···148148149149/* Structure to hold all of our device specific stuff */150150struct ld_usb {151151- struct semaphore sem; /* locks this structure */151151+ struct mutex mutex; /* locks this structure */152152 struct usb_interface* intf; /* save off the usb interface pointer */153153154154 int open_count; /* number of times this port has been opened */···319319 return -ENODEV;320320321321 /* lock this device */322322- if (down_interruptible(&dev->sem))322322+ if (mutex_lock_interruptible(&dev->mutex))323323 return -ERESTARTSYS;324324325325 /* allow opening only once */···358358 file->private_data = dev;359359360360unlock_exit:361361- up(&dev->sem);361361+ mutex_unlock(&dev->mutex);362362363363 return retval;364364}···378378 goto exit;379379 }380380381381- if (down_interruptible(&dev->sem)) {381381+ if (mutex_lock_interruptible(&dev->mutex)) {382382 retval = -ERESTARTSYS;383383 goto exit;384384 }···389389 }390390 if (dev->intf == NULL) {391391 /* the device was unplugged before the file was released */392392- up(&dev->sem);392392+ mutex_unlock(&dev->mutex);393393 /* unlock here as ld_usb_delete frees dev */394394 ld_usb_delete(dev);395395 goto exit;···402402 dev->open_count = 0;403403404404unlock_exit:405405- up(&dev->sem);405405+ mutex_unlock(&dev->mutex);406406407407exit:408408 return retval;···448448 goto exit;449449450450 /* lock this object */451451- if (down_interruptible(&dev->sem)) {451451+ if (mutex_lock_interruptible(&dev->mutex)) {452452 retval = -ERESTARTSYS;453453 goto exit;454454 }···505505506506unlock_exit:507507 /* unlock the device */508508- up(&dev->sem);508508+ mutex_unlock(&dev->mutex);509509510510exit:511511 return retval;···528528 goto exit;529529530530 /* lock this object */531531- if (down_interruptible(&dev->sem)) {531531+ if (mutex_lock_interruptible(&dev->mutex)) {532532 retval = -ERESTARTSYS;533533 goto exit;534534 }···602602603603unlock_exit:604604 /* unlock the device */605605- up(&dev->sem);605605+ mutex_unlock(&dev->mutex);606606607607exit:608608 return retval;···651651 dev_err(&intf->dev, "Out of memory\n");652652 goto exit;653653 }654654- init_MUTEX(&dev->sem);654654+ mutex_init(&dev->mutex);655655 spin_lock_init(&dev->rbsl);656656 dev->intf = intf;657657 init_waitqueue_head(&dev->read_wait);···765765 /* give back our minor */766766 usb_deregister_dev(intf, &ld_usb_class);767767768768- down(&dev->sem);768768+ mutex_lock(&dev->mutex);769769770770 /* if the device is not opened, then we clean up right now */771771 if (!dev->open_count) {772772- up(&dev->sem);772772+ mutex_unlock(&dev->mutex);773773 ld_usb_delete(dev);774774 } else {775775 dev->intf = NULL;776776- up(&dev->sem);776776+ mutex_unlock(&dev->mutex);777777 }778778779779 dev_info(&intf->dev, "LD USB Device #%d now disconnected\n",