|
@@ -155,13 +155,8 @@ static int ide_read_setting(ide_drive_t *drive,
|
|
|
const struct ide_devset *ds = setting->setting;
|
|
|
int val = -EINVAL;
|
|
|
|
|
|
- if (ds->get) {
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- spin_lock_irqsave(&ide_lock, flags);
|
|
|
+ if (ds->get)
|
|
|
val = ds->get(drive);
|
|
|
- spin_unlock_irqrestore(&ide_lock, flags);
|
|
|
- }
|
|
|
|
|
|
return val;
|
|
|
}
|
|
@@ -583,31 +578,19 @@ EXPORT_SYMBOL(ide_proc_register_driver);
|
|
|
* Clean up the driver specific /proc files and IDE settings
|
|
|
* for a given drive.
|
|
|
*
|
|
|
- * Takes ide_setting_mtx and ide_lock.
|
|
|
- * Caller must hold none of the locks.
|
|
|
+ * Takes ide_setting_mtx.
|
|
|
*/
|
|
|
|
|
|
void ide_proc_unregister_driver(ide_drive_t *drive, ide_driver_t *driver)
|
|
|
{
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
ide_remove_proc_entries(drive->proc, driver->proc_entries(drive));
|
|
|
|
|
|
mutex_lock(&ide_setting_mtx);
|
|
|
- spin_lock_irqsave(&ide_lock, flags);
|
|
|
/*
|
|
|
- * ide_setting_mtx protects the settings list
|
|
|
- * ide_lock protects the use of settings
|
|
|
- *
|
|
|
- * so we need to hold both, ide_settings_sem because we want to
|
|
|
- * modify the settings list, and ide_lock because we cannot take
|
|
|
- * a setting out that is being used.
|
|
|
- *
|
|
|
- * OTOH both ide_{read,write}_setting are only ever used under
|
|
|
- * ide_setting_mtx.
|
|
|
+ * ide_setting_mtx protects both the settings list and the use
|
|
|
+ * of settings (we cannot take a setting out that is being used).
|
|
|
*/
|
|
|
drive->settings = NULL;
|
|
|
- spin_unlock_irqrestore(&ide_lock, flags);
|
|
|
mutex_unlock(&ide_setting_mtx);
|
|
|
}
|
|
|
EXPORT_SYMBOL(ide_proc_unregister_driver);
|