#include <linux/init.h>
#include <linux/slab.h>
#include <linux/kthread.h>
-#include <linux/mutex.h>
#include <scsi/scsi.h>
#include <scsi/scsi_cmnd.h>
struct us_data *us = usb_get_intfdata(iface);
/* Wait until no command is running */
- mutex_lock(&us->dev_mutex);
+ down(&us->dev_semaphore);
US_DEBUGP("%s\n", __FUNCTION__);
if (us->suspend_resume_hook)
/* When runtime PM is working, we'll set a flag to indicate
* whether we should autoresume when a SCSI request arrives. */
- mutex_unlock(&us->dev_mutex);
+ up(&us->dev_semaphore);
return 0;
}
{
struct us_data *us = usb_get_intfdata(iface);
- mutex_lock(&us->dev_mutex);
+ down(&us->dev_semaphore);
US_DEBUGP("%s\n", __FUNCTION__);
if (us->suspend_resume_hook)
(us->suspend_resume_hook)(us, US_RESUME);
iface->dev.power.power_state.event = PM_EVENT_ON;
- mutex_unlock(&us->dev_mutex);
+ up(&us->dev_semaphore);
return 0;
}
US_DEBUGP("*** thread awakened.\n");
/* lock the device pointers */
- mutex_lock(&(us->dev_mutex));
+ down(&(us->dev_semaphore));
/* if the device has disconnected, we are free to exit */
if (test_bit(US_FLIDX_DISCONNECTING, &us->flags)) {
US_DEBUGP("-- exiting\n");
- mutex_unlock(&us->dev_mutex);
+ up(&(us->dev_semaphore));
break;
}
scsi_unlock(host);
/* unlock the device pointers */
- mutex_unlock(&us->dev_mutex);
+ up(&(us->dev_semaphore));
} /* for (;;) */
scsi_host_put(host);
break;
#endif
-#ifdef CONFIG_USB_STORAGE_ALAUDA
- case US_PR_ALAUDA:
- us->transport_name = "Alauda Control/Bulk";
- us->transport = alauda_transport;
- us->transport_reset = usb_stor_Bulk_reset;
- us->max_lun = 1;
- break;
-#endif
-
default:
return -EIO;
}
break;
#endif
+#ifdef CONFIG_USB_STORAGE_ALAUDA
+ case US_PR_ALAUDA:
+ us->transport_name = "Alauda Control/Bulk";
+ us->transport = alauda_transport;
+ us->transport_reset = usb_stor_Bulk_reset;
+ us->max_lun = 1;
+ break;
+#endif
+
default:
return -EIO;
}
* The thread will exit when it sees the DISCONNECTING flag. */
/* Wait for the current command to finish, then remove the host */
- mutex_lock(&us->dev_mutex);
- mutex_unlock(&us->dev_mutex);
+ down(&us->dev_semaphore);
+ up(&us->dev_semaphore);
/* queuecommand won't accept any new commands and the control
* thread won't execute a previously-queued command. If there
/* For bulk-only devices, determine the max LUN value */
if (us->protocol == US_PR_BULK &&
!(us->flags & US_FL_SINGLE_LUN)) {
- mutex_lock(&us->dev_mutex);
+ down(&us->dev_semaphore);
us->max_lun = usb_stor_Bulk_max_lun(us);
- mutex_unlock(&us->dev_mutex);
+ up(&us->dev_semaphore);
}
scsi_scan_host(us_to_host(us));
printk(KERN_DEBUG "usb-storage: device scan complete\n");
us = host_to_us(host);
memset(us, 0, sizeof(struct us_data));
- mutex_init(&(us->dev_mutex));
+ init_MUTEX(&(us->dev_semaphore));
init_MUTEX_LOCKED(&(us->sema));
init_completion(&(us->notify));
init_waitqueue_head(&us->delay_wait);