* [PATCH 0/2] Use mutexes instead of semaphores in the ELAN U132 Host Controller Driver
@ 2007-09-06 21:09 Matthias Kaehlcke
2007-09-06 21:18 ` [PATCH 1/2] ELAN U132 Host Controller Driver: convert sw_lock to mutex Matthias Kaehlcke
2007-09-06 21:19 ` [PATCH 2/2] ELAN U132 Host Controller Driver: convert scheduler_lock " Matthias Kaehlcke
0 siblings, 2 replies; 7+ messages in thread
From: Matthias Kaehlcke @ 2007-09-06 21:09 UTC (permalink / raw)
To: gregkh, linux-usb-users, linux-usb-devel; +Cc: linux-kernel, akpm
This patchset converts sw_lock and scheduler_lock in the ELAN U132
Host Controller Driver from semaphores to the mutex API
--
Matthias Kaehlcke
Linux Application Developer
Barcelona
La libertad es como la mañana. Hay quienes esperan dormidos a que
llegue, pero hay quienes desvelan y caminan la noche para alcanzarla
(Subcomandante Marcos)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 1/2] ELAN U132 Host Controller Driver: convert sw_lock to mutex 2007-09-06 21:09 [PATCH 0/2] Use mutexes instead of semaphores in the ELAN U132 Host Controller Driver Matthias Kaehlcke @ 2007-09-06 21:18 ` Matthias Kaehlcke 2007-09-06 22:08 ` Oleg Verych 2007-09-06 21:19 ` [PATCH 2/2] ELAN U132 Host Controller Driver: convert scheduler_lock " Matthias Kaehlcke 1 sibling, 1 reply; 7+ messages in thread From: Matthias Kaehlcke @ 2007-09-06 21:18 UTC (permalink / raw) To: gregkh, linux-usb-users, linux-usb-devel, linux-kernel, akpm The ELAN U132 Host Controller Driver uses the semaphore sw_lock as mutex. Use the mutex API instead of the (binary) semaphore. Signed-off-by: Matthias Kaehlcke <matthias.kaehlcke@gmail.com> -- diff --git a/drivers/usb/host/u132-hcd.c b/drivers/usb/host/u132-hcd.c index b88eb3c..1201ca4 100644 --- a/drivers/usb/host/u132-hcd.c +++ b/drivers/usb/host/u132-hcd.c @@ -184,7 +184,7 @@ struct u132_ring { struct u132 { struct kref kref; struct list_head u132_list; - struct semaphore sw_lock; + struct mutex sw_lock; struct semaphore scheduler_lock; struct u132_platform_data *board; struct platform_device *platform_dev; @@ -493,20 +493,20 @@ static void u132_hcd_monitor_work(struct work_struct *work) return; } else { int retval; - down(&u132->sw_lock); + mutex_lock(&u132->sw_lock); retval = read_roothub_info(u132); if (retval) { struct usb_hcd *hcd = u132_to_hcd(u132); u132_disable(u132); u132->going = 1; - up(&u132->sw_lock); + mutex_unlock(&u132->sw_lock); usb_hc_died(hcd); ftdi_elan_gone_away(u132->platform_dev); u132_monitor_put_kref(u132); return; } else { u132_monitor_requeue_work(u132, 500); - up(&u132->sw_lock); + mutex_unlock(&u132->sw_lock); return; } } @@ -1805,10 +1805,10 @@ static void u132_hcd_stop(struct usb_hcd *hcd) dev_err(&u132->platform_dev->dev, "device hcd=%p is being remov" "ed\n", hcd); } else { - down(&u132->sw_lock); + mutex_lock(&u132->sw_lock); msleep(100); u132_power(u132, 0); - up(&u132->sw_lock); + mutex_unlock(&u132->sw_lock); } } @@ -1830,7 +1830,7 @@ static int u132_hcd_start(struct usb_hcd *hcd) (pdev->dev.platform_data))->vendor; u16 device = ((struct u132_platform_data *) (pdev->dev.platform_data))->device; - down(&u132->sw_lock); + mutex_lock(&u132->sw_lock); msleep(10); if (vendor == PCI_VENDOR_ID_AMD && device == 0x740c) { u132->flags = OHCI_QUIRK_AMD756; @@ -1845,7 +1845,7 @@ static int u132_hcd_start(struct usb_hcd *hcd) u132->going = 1; } msleep(100); - up(&u132->sw_lock); + mutex_unlock(&u132->sw_lock); return retval; } else { dev_err(&u132->platform_dev->dev, "platform_device missing\n"); @@ -1865,13 +1865,13 @@ static int u132_hcd_reset(struct usb_hcd *hcd) return -ESHUTDOWN; } else { int retval; - down(&u132->sw_lock); + mutex_lock(&u132->sw_lock); retval = u132_init(u132); if (retval) { u132_disable(u132); u132->going = 1; } - up(&u132->sw_lock); + mutex_unlock(&u132->sw_lock); return retval; } } @@ -2805,7 +2805,7 @@ static int u132_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, return -ESHUTDOWN; } else { int retval = 0; - down(&u132->sw_lock); + mutex_lock(&u132->sw_lock); switch (typeReq) { case ClearHubFeature: switch (wValue) { @@ -2868,7 +2868,7 @@ static int u132_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, stall:retval = -EPIPE; break; } - up(&u132->sw_lock); + mutex_unlock(&u132->sw_lock); return retval; } } @@ -3004,7 +3004,7 @@ static int __devexit u132_remove(struct platform_device *pdev) dev_err(&u132->platform_dev->dev, "removing device u132" ".%d\n", u132->sequence_num); msleep(100); - down(&u132->sw_lock); + mutex_lock(&u132->sw_lock); u132_monitor_cancel_work(u132); while (rings-- > 0) { struct u132_ring *ring = &u132->ring[rings]; @@ -3017,7 +3017,7 @@ static int __devexit u132_remove(struct platform_device *pdev) u132->going += 1; printk(KERN_INFO "removing device u132.%d\n", u132->sequence_num); - up(&u132->sw_lock); + mutex_unlock(&u132->sw_lock); usb_remove_hcd(hcd); u132_u132_put_kref(u132); return 0; @@ -3037,7 +3037,7 @@ static void u132_initialise(struct u132 *u132, struct platform_device *pdev) u132->platform_dev = pdev; u132->power = 0; u132->reset = 0; - init_MUTEX(&u132->sw_lock); + mutex_init(&u132->sw_lock); init_MUTEX(&u132->scheduler_lock); while (rings-- > 0) { struct u132_ring *ring = &u132->ring[rings]; @@ -3047,7 +3047,7 @@ static void u132_initialise(struct u132 *u132, struct platform_device *pdev) ring->curr_endp = NULL; INIT_DELAYED_WORK(&ring->scheduler, u132_hcd_ring_work_scheduler); - } down(&u132->sw_lock); + } mutex_lock(&u132->sw_lock); INIT_DELAYED_WORK(&u132->monitor, u132_hcd_monitor_work); while (ports-- > 0) { struct u132_port *port = &u132->port[ports]; @@ -3077,7 +3077,7 @@ static void u132_initialise(struct u132 *u132, struct platform_device *pdev) while (endps-- > 0) { u132->endp[endps] = NULL; } - up(&u132->sw_lock); + mutex_unlock(&u132->sw_lock); return; } -- Matthias Kaehlcke Linux Application Developer Barcelona If you don't know where you are going, you will probably end up somewhere else (Laurence J. Peter) .''`. using free software / Debian GNU/Linux | http://debian.org : :' : `. `'` gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `- ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] ELAN U132 Host Controller Driver: convert sw_lock to mutex 2007-09-06 21:18 ` [PATCH 1/2] ELAN U132 Host Controller Driver: convert sw_lock to mutex Matthias Kaehlcke @ 2007-09-06 22:08 ` Oleg Verych 2007-09-07 6:14 ` Matthias Kaehlcke 0 siblings, 1 reply; 7+ messages in thread From: Oleg Verych @ 2007-09-06 22:08 UTC (permalink / raw) To: Matthias Kaehlcke; +Cc: gregkh, linux-usb-devel, linux-kernel, akpm * Thu, 6 Sep 2007 23:18:15 +0200 [] > @@ -184,7 +184,7 @@ struct u132_ring { > struct u132 { Subject: [PATCH 1/2] ELAN U132 Host Controller Driver: convert sw_lock to mutex [] > struct list_head u132_list; > - struct semaphore sw_lock; > + struct mutex sw_lock; > struct semaphore scheduler_lock; Subject: [PATCH 2/2] ELAN U132 Host Controller Driver: convert scheduler_lock t [] > struct list_head u132_list; > struct semaphore sw_lock; >- struct semaphore scheduler_lock; >+ struct mutex scheduler_lock; Are you sure, you have right patch sequence? ____ ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] ELAN U132 Host Controller Driver: convert sw_lock to mutex 2007-09-06 22:08 ` Oleg Verych @ 2007-09-07 6:14 ` Matthias Kaehlcke 0 siblings, 0 replies; 7+ messages in thread From: Matthias Kaehlcke @ 2007-09-07 6:14 UTC (permalink / raw) To: Oleg Verych; +Cc: gregkh, linux-usb-devel, linux-kernel, akpm El Fri, Sep 07, 2007 at 12:08:34AM +0200 Oleg Verych ha dit: > * Thu, 6 Sep 2007 23:18:15 +0200 > > [] > > @@ -184,7 +184,7 @@ struct u132_ring { > > struct u132 { > > Subject: [PATCH 1/2] ELAN U132 Host Controller Driver: convert sw_lock to mutex > [] > > struct list_head u132_list; > > - struct semaphore sw_lock; > > + struct mutex sw_lock; > > struct semaphore scheduler_lock; > > Subject: [PATCH 2/2] ELAN U132 Host Controller Driver: convert scheduler_lock t > [] > > struct list_head u132_list; > > struct semaphore sw_lock; > >- struct semaphore scheduler_lock; > >+ struct mutex scheduler_lock; > > Are you sure, you have right patch sequence? my idea was to sent two independent patches, would it be better to have one patch based on the other? -- Matthias Kaehlcke Linux Application Developer Barcelona Insanity: doing the same thing over and over again and expecting different results (Albert Einstein) .''`. using free software / Debian GNU/Linux | http://debian.org : :' : `. `'` gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `- ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] ELAN U132 Host Controller Driver: convert scheduler_lock to mutex 2007-09-06 21:09 [PATCH 0/2] Use mutexes instead of semaphores in the ELAN U132 Host Controller Driver Matthias Kaehlcke 2007-09-06 21:18 ` [PATCH 1/2] ELAN U132 Host Controller Driver: convert sw_lock to mutex Matthias Kaehlcke @ 2007-09-06 21:19 ` Matthias Kaehlcke 2007-09-07 13:10 ` Matthias Kaehlcke 1 sibling, 1 reply; 7+ messages in thread From: Matthias Kaehlcke @ 2007-09-06 21:19 UTC (permalink / raw) To: gregkh, linux-usb-users, linux-usb-devel, linux-kernel, akpm The ELAN U132 Host Controller Driver uses the semaphore scheduler_lock as mutex. Use the mutex API instead of the (binary) semaphore. Signed-off-by: Matthias Kaehlcke <matthias.kaehlcke@gmail.com> -- diff --git a/drivers/usb/host/u132-hcd.c b/drivers/usb/host/u132-hcd.c index b88eb3c..e299992 100644 --- a/drivers/usb/host/u132-hcd.c +++ b/drivers/usb/host/u132-hcd.c @@ -185,7 +185,7 @@ struct u132 { struct kref kref; struct list_head u132_list; struct semaphore sw_lock; - struct semaphore scheduler_lock; + struct mutex scheduler_lock; struct u132_platform_data *board; struct platform_device *platform_dev; struct u132_ring ring[MAX_U132_RINGS]; @@ -536,12 +536,12 @@ static void u132_hcd_giveback_urb(struct u132 *u132, struct u132_endp *endp, endp->active = 0; spin_unlock_irqrestore(&endp->queue_lock.slock, irqs); kfree(urbq); - } down(&u132->scheduler_lock); + } mutex_lock(&u132->scheduler_lock); ring = endp->ring; ring->in_use = 0; u132_ring_cancel_work(u132, ring); u132_ring_queue_work(u132, ring, 0); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); usb_hcd_giveback_urb(hcd, urb); return; @@ -633,22 +633,22 @@ static void u132_hcd_interrupt_recv(void *data, struct urb *urb, u8 *buf, struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; struct u132_udev *udev = &u132->udev[address]; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { @@ -667,7 +667,7 @@ static void u132_hcd_interrupt_recv(void *data, struct urb *urb, u8 *buf, 1 & toggle_bits); if (urb->actual_length > 0) { int retval; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_single(u132, ring, endp, urb, address, endp->toggle_bits, u132_hcd_interrupt_recv); @@ -682,7 +682,7 @@ static void u132_hcd_interrupt_recv(void *data, struct urb *urb, u8 *buf, msecs_to_jiffies(urb->interval); u132_ring_cancel_work(u132, ring); u132_ring_queue_work(u132, ring, 0); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); } return; @@ -691,7 +691,7 @@ static void u132_hcd_interrupt_recv(void *data, struct urb *urb, u8 *buf, endp->toggle_bits = toggle_bits; usb_settoggle(udev->usb_device, endp->usb_endp, 0, 1 & toggle_bits); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else { @@ -711,7 +711,7 @@ static void u132_hcd_interrupt_recv(void *data, struct urb *urb, u8 *buf, "g back INTERRUPT %s\n", urb, cc_to_text[condition_code]); } - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, cc_to_error[condition_code]); return; @@ -719,7 +719,7 @@ static void u132_hcd_interrupt_recv(void *data, struct urb *urb, u8 *buf, } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -732,22 +732,22 @@ static void u132_hcd_bulk_output_sent(void *data, struct urb *urb, u8 *buf, struct u132_endp *endp = data; struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { @@ -756,7 +756,7 @@ static void u132_hcd_bulk_output_sent(void *data, struct urb *urb, u8 *buf, endp->toggle_bits = toggle_bits; if (urb->transfer_buffer_length > urb->actual_length) { int retval; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_output(u132, ring, endp, urb, address, endp->toggle_bits, u132_hcd_bulk_output_sent); if (retval == 0) { @@ -764,14 +764,14 @@ static void u132_hcd_bulk_output_sent(void *data, struct urb *urb, u8 *buf, u132_hcd_giveback_urb(u132, endp, urb, retval); return; } else { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -785,22 +785,22 @@ static void u132_hcd_bulk_input_recv(void *data, struct urb *urb, u8 *buf, struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; struct u132_udev *udev = &u132->udev[address]; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { @@ -818,7 +818,7 @@ static void u132_hcd_bulk_input_recv(void *data, struct urb *urb, u8 *buf, endp->toggle_bits = toggle_bits; usb_settoggle(udev->usb_device, endp->usb_endp, 0, 1 & toggle_bits); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp, urb, address, endp->usb_endp, endp->toggle_bits, @@ -831,7 +831,7 @@ static void u132_hcd_bulk_input_recv(void *data, struct urb *urb, u8 *buf, endp->toggle_bits = toggle_bits; usb_settoggle(udev->usb_device, endp->usb_endp, 0, 1 & toggle_bits); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, cc_to_error[condition_code]); return; @@ -840,7 +840,7 @@ static void u132_hcd_bulk_input_recv(void *data, struct urb *urb, u8 *buf, endp->toggle_bits = toggle_bits; usb_settoggle(udev->usb_device, endp->usb_endp, 0, 1 & toggle_bits); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else if (condition_code == TD_DATAUNDERRUN) { @@ -850,13 +850,13 @@ static void u132_hcd_bulk_input_recv(void *data, struct urb *urb, u8 *buf, dev_warn(&u132->platform_dev->dev, "urb=%p(SHORT NOT OK" ") giving back BULK IN %s\n", urb, cc_to_text[condition_code]); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else if (condition_code == TD_CC_STALL) { endp->toggle_bits = 0x2; usb_settoggle(udev->usb_device, endp->usb_endp, 0, 0); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, cc_to_error[condition_code]); return; @@ -866,7 +866,7 @@ static void u132_hcd_bulk_input_recv(void *data, struct urb *urb, u8 *buf, dev_err(&u132->platform_dev->dev, "urb=%p giving back B" "ULK IN code=%d %s\n", urb, condition_code, cc_to_text[condition_code]); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, cc_to_error[condition_code]); return; @@ -874,7 +874,7 @@ static void u132_hcd_bulk_input_recv(void *data, struct urb *urb, u8 *buf, } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -886,32 +886,32 @@ static void u132_hcd_configure_empty_sent(void *data, struct urb *urb, u8 *buf, { struct u132_endp *endp = data; struct u132 *u132 = endp->u132; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -924,22 +924,22 @@ static void u132_hcd_configure_input_recv(void *data, struct urb *urb, u8 *buf, struct u132_endp *endp = data; struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { @@ -955,7 +955,7 @@ static void u132_hcd_configure_input_recv(void *data, struct urb *urb, u8 *buf, TD_DATAUNDERRUN) && ((urb->transfer_flags & URB_SHORT_NOT_OK) == 0))) { int retval; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_empty(u132->platform_dev, ring->number, endp, urb, address, endp->usb_endp, 0x3, @@ -965,14 +965,14 @@ static void u132_hcd_configure_input_recv(void *data, struct urb *urb, u8 *buf, u132_hcd_giveback_urb(u132, endp, urb, retval); return; } else if (condition_code == TD_CC_STALL) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); dev_warn(&u132->platform_dev->dev, "giving back SETUP I" "NPUT STALL urb %p\n", urb); u132_hcd_giveback_urb(u132, endp, urb, cc_to_error[condition_code]); return; } else { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); dev_err(&u132->platform_dev->dev, "giving back SETUP IN" "PUT %s urb %p\n", cc_to_text[condition_code], urb); @@ -983,7 +983,7 @@ static void u132_hcd_configure_input_recv(void *data, struct urb *urb, u8 *buf, } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -995,32 +995,32 @@ static void u132_hcd_configure_empty_recv(void *data, struct urb *urb, u8 *buf, { struct u132_endp *endp = data; struct u132 *u132 = endp->u132; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1033,29 +1033,29 @@ static void u132_hcd_configure_setup_sent(void *data, struct urb *urb, u8 *buf, struct u132_endp *endp = data; struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { if (usb_pipein(urb->pipe)) { int retval; struct u132_ring *ring = endp->ring; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp, urb, address, endp->usb_endp, 0, @@ -1067,7 +1067,7 @@ static void u132_hcd_configure_setup_sent(void *data, struct urb *urb, u8 *buf, } else { int retval; struct u132_ring *ring = endp->ring; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp, urb, address, endp->usb_endp, 0, @@ -1080,7 +1080,7 @@ static void u132_hcd_configure_setup_sent(void *data, struct urb *urb, u8 *buf, } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1094,34 +1094,34 @@ static void u132_hcd_enumeration_empty_recv(void *data, struct urb *urb, struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; struct u132_udev *udev = &u132->udev[address]; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { u132->addr[0].address = 0; endp->usb_addr = udev->usb_addr; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1133,28 +1133,28 @@ static void u132_hcd_enumeration_address_sent(void *data, struct urb *urb, { struct u132_endp *endp = data; struct u132 *u132 = endp->u132; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { int retval; struct u132_ring *ring = endp->ring; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp, urb, 0, endp->usb_endp, 0, u132_hcd_enumeration_empty_recv); @@ -1165,7 +1165,7 @@ static void u132_hcd_enumeration_address_sent(void *data, struct urb *urb, } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1177,32 +1177,32 @@ static void u132_hcd_initial_empty_sent(void *data, struct urb *urb, u8 *buf, { struct u132_endp *endp = data; struct u132 *u132 = endp->u132; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1215,22 +1215,22 @@ static void u132_hcd_initial_input_recv(void *data, struct urb *urb, u8 *buf, struct u132_endp *endp = data; struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { @@ -1243,7 +1243,7 @@ static void u132_hcd_initial_input_recv(void *data, struct urb *urb, u8 *buf, *u++ = *b++; } urb->actual_length = len; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_empty(u132->platform_dev, ring->number, endp, urb, address, endp->usb_endp, 0x3, u132_hcd_initial_empty_sent); @@ -1254,7 +1254,7 @@ static void u132_hcd_initial_input_recv(void *data, struct urb *urb, u8 *buf, } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1267,28 +1267,28 @@ static void u132_hcd_initial_setup_sent(void *data, struct urb *urb, u8 *buf, struct u132_endp *endp = data; struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { int retval; struct u132_ring *ring = endp->ring; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp, urb, address, endp->usb_endp, 0, u132_hcd_initial_input_recv); @@ -1299,7 +1299,7 @@ static void u132_hcd_initial_setup_sent(void *data, struct urb *urb, u8 *buf, } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1314,9 +1314,9 @@ static void u132_hcd_ring_work_scheduler(struct work_struct *work) struct u132_ring *ring = container_of(work, struct u132_ring, scheduler.work); struct u132 *u132 = ring->u132; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (ring->in_use) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_ring_put_kref(u132, ring); return; } else if (ring->curr_endp) { @@ -1333,7 +1333,7 @@ static void u132_hcd_ring_work_scheduler(struct work_struct *work) ring->curr_endp = endp; u132_endp_cancel_work(u132, last_endp); u132_endp_queue_work(u132, last_endp, 0); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_ring_put_kref(u132, ring); return; } else { @@ -1347,7 +1347,7 @@ static void u132_hcd_ring_work_scheduler(struct work_struct *work) last_endp->jiffies)) { u132_endp_cancel_work(u132, last_endp); u132_endp_queue_work(u132, last_endp, 0); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_ring_put_kref(u132, ring); return; } else { @@ -1357,15 +1357,15 @@ static void u132_hcd_ring_work_scheduler(struct work_struct *work) } if (wakeup > 0) { u132_ring_requeue_work(u132, ring, wakeup); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); return; } else { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_ring_put_kref(u132, ring); return; } } else { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_ring_put_kref(u132, ring); return; } @@ -1377,32 +1377,32 @@ static void u132_hcd_endp_work_scheduler(struct work_struct *work) struct u132_endp *endp = container_of(work, struct u132_endp, scheduler.work); struct u132 *u132 = endp->u132; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); ring = endp->ring; if (endp->edset_flush) { endp->edset_flush = 0; if (endp->dequeueing) usb_ftdi_elan_edset_flush(u132->platform_dev, ring->number, endp); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else if (endp->active) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else if (ring->in_use) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else if (endp->queue_next == endp->queue_last) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else if (endp->pipetype == PIPE_INTERRUPT) { u8 address = u132->addr[endp->usb_addr].address; if (ring->in_use) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else { @@ -1412,7 +1412,7 @@ static void u132_hcd_endp_work_scheduler(struct work_struct *work) endp->active = 1; ring->curr_endp = endp; ring->in_use = 1; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_single(u132, ring, endp, urb, address, endp->toggle_bits, u132_hcd_interrupt_recv); if (retval == 0) { @@ -1423,7 +1423,7 @@ static void u132_hcd_endp_work_scheduler(struct work_struct *work) } else if (endp->pipetype == PIPE_CONTROL) { u8 address = u132->addr[endp->usb_addr].address; if (ring->in_use) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else if (address == 0) { @@ -1433,7 +1433,7 @@ static void u132_hcd_endp_work_scheduler(struct work_struct *work) endp->active = 1; ring->curr_endp = endp; ring->in_use = 1; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_setup(u132, ring, endp, urb, address, 0x2, u132_hcd_initial_setup_sent); if (retval == 0) { @@ -1447,7 +1447,7 @@ static void u132_hcd_endp_work_scheduler(struct work_struct *work) endp->active = 1; ring->curr_endp = endp; ring->in_use = 1; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_setup(u132, ring, endp, urb, 0, 0x2, u132_hcd_enumeration_address_sent); if (retval == 0) { @@ -1462,7 +1462,7 @@ static void u132_hcd_endp_work_scheduler(struct work_struct *work) endp->active = 1; ring->curr_endp = endp; ring->in_use = 1; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_setup(u132, ring, endp, urb, address, 0x2, u132_hcd_configure_setup_sent); if (retval == 0) { @@ -1474,7 +1474,7 @@ static void u132_hcd_endp_work_scheduler(struct work_struct *work) if (endp->input) { u8 address = u132->addr[endp->usb_addr].address; if (ring->in_use) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else { @@ -1484,7 +1484,7 @@ static void u132_hcd_endp_work_scheduler(struct work_struct *work) endp->active = 1; ring->curr_endp = endp; ring->in_use = 1; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_input(u132, ring, endp, urb, address, endp->toggle_bits, u132_hcd_bulk_input_recv); @@ -1497,7 +1497,7 @@ static void u132_hcd_endp_work_scheduler(struct work_struct *work) } else { /* output pipe */ u8 address = u132->addr[endp->usb_addr].address; if (ring->in_use) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else { @@ -1507,7 +1507,7 @@ static void u132_hcd_endp_work_scheduler(struct work_struct *work) endp->active = 1; ring->curr_endp = endp; ring->in_use = 1; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_output(u132, ring, endp, urb, address, endp->toggle_bits, u132_hcd_bulk_output_sent); -- Matthias Kaehlcke Linux Application Developer Barcelona El camino se hace al andar (Antonio Machado) .''`. using free software / Debian GNU/Linux | http://debian.org : :' : `. `'` gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `- ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] ELAN U132 Host Controller Driver: convert scheduler_lock to mutex 2007-09-06 21:19 ` [PATCH 2/2] ELAN U132 Host Controller Driver: convert scheduler_lock " Matthias Kaehlcke @ 2007-09-07 13:10 ` Matthias Kaehlcke 2007-09-09 16:41 ` Greg KH 0 siblings, 1 reply; 7+ messages in thread From: Matthias Kaehlcke @ 2007-09-07 13:10 UTC (permalink / raw) To: gregkh, linux-usb-users, linux-usb-devel, linux-kernel, akpm A corrected version of the patch, the first one contained context removed by the first patch of this serie -- The ELAN U132 Host Controller Driver uses the semaphore scheduler_lock as mutex. Use the mutex API instead of the (binary) semaphore. Signed-off-by: Matthias Kaehlcke <matthias.kaehlcke@gmail.com> -- --- linux-2.6/drivers/usb/host/u132-hcd.c.orig 2007-09-07 15:04:11.000000000 +0200 +++ linux-2.6/drivers/usb/host/u132-hcd.c 2007-09-07 15:05:21.000000000 +0200 @@ -185,7 +185,7 @@ struct kref kref; struct list_head u132_list; struct mutex sw_lock; - struct semaphore scheduler_lock; + struct mutex scheduler_lock; struct u132_platform_data *board; struct platform_device *platform_dev; struct u132_ring ring[MAX_U132_RINGS]; @@ -536,12 +536,12 @@ endp->active = 0; spin_unlock_irqrestore(&endp->queue_lock.slock, irqs); kfree(urbq); - } down(&u132->scheduler_lock); + } mutex_lock(&u132->scheduler_lock); ring = endp->ring; ring->in_use = 0; u132_ring_cancel_work(u132, ring); u132_ring_queue_work(u132, ring, 0); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); usb_hcd_giveback_urb(hcd, urb); return; @@ -633,22 +633,22 @@ struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; struct u132_udev *udev = &u132->udev[address]; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { @@ -667,7 +667,7 @@ 1 & toggle_bits); if (urb->actual_length > 0) { int retval; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_single(u132, ring, endp, urb, address, endp->toggle_bits, u132_hcd_interrupt_recv); @@ -682,7 +682,7 @@ msecs_to_jiffies(urb->interval); u132_ring_cancel_work(u132, ring); u132_ring_queue_work(u132, ring, 0); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); } return; @@ -691,7 +691,7 @@ endp->toggle_bits = toggle_bits; usb_settoggle(udev->usb_device, endp->usb_endp, 0, 1 & toggle_bits); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else { @@ -711,7 +711,7 @@ "g back INTERRUPT %s\n", urb, cc_to_text[condition_code]); } - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, cc_to_error[condition_code]); return; @@ -719,7 +719,7 @@ } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -732,22 +732,22 @@ struct u132_endp *endp = data; struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { @@ -756,7 +756,7 @@ endp->toggle_bits = toggle_bits; if (urb->transfer_buffer_length > urb->actual_length) { int retval; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_output(u132, ring, endp, urb, address, endp->toggle_bits, u132_hcd_bulk_output_sent); if (retval == 0) { @@ -764,14 +764,14 @@ u132_hcd_giveback_urb(u132, endp, urb, retval); return; } else { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -785,22 +785,22 @@ struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; struct u132_udev *udev = &u132->udev[address]; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { @@ -818,7 +818,7 @@ endp->toggle_bits = toggle_bits; usb_settoggle(udev->usb_device, endp->usb_endp, 0, 1 & toggle_bits); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp, urb, address, endp->usb_endp, endp->toggle_bits, @@ -831,7 +831,7 @@ endp->toggle_bits = toggle_bits; usb_settoggle(udev->usb_device, endp->usb_endp, 0, 1 & toggle_bits); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, cc_to_error[condition_code]); return; @@ -840,7 +840,7 @@ endp->toggle_bits = toggle_bits; usb_settoggle(udev->usb_device, endp->usb_endp, 0, 1 & toggle_bits); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else if (condition_code == TD_DATAUNDERRUN) { @@ -850,13 +850,13 @@ dev_warn(&u132->platform_dev->dev, "urb=%p(SHORT NOT OK" ") giving back BULK IN %s\n", urb, cc_to_text[condition_code]); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else if (condition_code == TD_CC_STALL) { endp->toggle_bits = 0x2; usb_settoggle(udev->usb_device, endp->usb_endp, 0, 0); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, cc_to_error[condition_code]); return; @@ -866,7 +866,7 @@ dev_err(&u132->platform_dev->dev, "urb=%p giving back B" "ULK IN code=%d %s\n", urb, condition_code, cc_to_text[condition_code]); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, cc_to_error[condition_code]); return; @@ -874,7 +874,7 @@ } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -886,32 +886,32 @@ { struct u132_endp *endp = data; struct u132 *u132 = endp->u132; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -924,22 +924,22 @@ struct u132_endp *endp = data; struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { @@ -955,7 +955,7 @@ TD_DATAUNDERRUN) && ((urb->transfer_flags & URB_SHORT_NOT_OK) == 0))) { int retval; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_empty(u132->platform_dev, ring->number, endp, urb, address, endp->usb_endp, 0x3, @@ -965,14 +965,14 @@ u132_hcd_giveback_urb(u132, endp, urb, retval); return; } else if (condition_code == TD_CC_STALL) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); dev_warn(&u132->platform_dev->dev, "giving back SETUP I" "NPUT STALL urb %p\n", urb); u132_hcd_giveback_urb(u132, endp, urb, cc_to_error[condition_code]); return; } else { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); dev_err(&u132->platform_dev->dev, "giving back SETUP IN" "PUT %s urb %p\n", cc_to_text[condition_code], urb); @@ -983,7 +983,7 @@ } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -995,32 +995,32 @@ { struct u132_endp *endp = data; struct u132 *u132 = endp->u132; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1033,29 +1033,29 @@ struct u132_endp *endp = data; struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { if (usb_pipein(urb->pipe)) { int retval; struct u132_ring *ring = endp->ring; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp, urb, address, endp->usb_endp, 0, @@ -1067,7 +1067,7 @@ } else { int retval; struct u132_ring *ring = endp->ring; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp, urb, address, endp->usb_endp, 0, @@ -1080,7 +1080,7 @@ } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1094,34 +1094,34 @@ struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; struct u132_udev *udev = &u132->udev[address]; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { u132->addr[0].address = 0; endp->usb_addr = udev->usb_addr; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1133,28 +1133,28 @@ { struct u132_endp *endp = data; struct u132 *u132 = endp->u132; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { int retval; struct u132_ring *ring = endp->ring; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp, urb, 0, endp->usb_endp, 0, u132_hcd_enumeration_empty_recv); @@ -1165,7 +1165,7 @@ } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1177,32 +1177,32 @@ { struct u132_endp *endp = data; struct u132 *u132 = endp->u132; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, 0); return; } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1215,22 +1215,22 @@ struct u132_endp *endp = data; struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { @@ -1243,7 +1243,7 @@ *u++ = *b++; } urb->actual_length = len; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_empty(u132->platform_dev, ring->number, endp, urb, address, endp->usb_endp, 0x3, u132_hcd_initial_empty_sent); @@ -1254,7 +1254,7 @@ } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1267,28 +1267,28 @@ struct u132_endp *endp = data; struct u132 *u132 = endp->u132; u8 address = u132->addr[endp->usb_addr].address; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (u132->going > 1) { dev_err(&u132->platform_dev->dev, "device has been removed %d\n" , u132->going); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_forget_urb(u132, endp, urb, -ENODEV); return; } else if (endp->dequeueing) { endp->dequeueing = 0; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -EINTR); return; } else if (u132->going > 0) { dev_err(&u132->platform_dev->dev, "device is being removed urb=" "%p status=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, -ENODEV); return; } else if (urb->status == -EINPROGRESS) { int retval; struct u132_ring *ring = endp->ring; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp, urb, address, endp->usb_endp, 0, u132_hcd_initial_input_recv); @@ -1299,7 +1299,7 @@ } else { dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p statu" "s=%d\n", urb, urb->status); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_hcd_giveback_urb(u132, endp, urb, urb->status); return; } @@ -1314,9 +1314,9 @@ struct u132_ring *ring = container_of(work, struct u132_ring, scheduler.work); struct u132 *u132 = ring->u132; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); if (ring->in_use) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_ring_put_kref(u132, ring); return; } else if (ring->curr_endp) { @@ -1333,7 +1333,7 @@ ring->curr_endp = endp; u132_endp_cancel_work(u132, last_endp); u132_endp_queue_work(u132, last_endp, 0); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_ring_put_kref(u132, ring); return; } else { @@ -1347,7 +1347,7 @@ last_endp->jiffies)) { u132_endp_cancel_work(u132, last_endp); u132_endp_queue_work(u132, last_endp, 0); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_ring_put_kref(u132, ring); return; } else { @@ -1357,15 +1357,15 @@ } if (wakeup > 0) { u132_ring_requeue_work(u132, ring, wakeup); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); return; } else { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_ring_put_kref(u132, ring); return; } } else { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_ring_put_kref(u132, ring); return; } @@ -1377,32 +1377,32 @@ struct u132_endp *endp = container_of(work, struct u132_endp, scheduler.work); struct u132 *u132 = endp->u132; - down(&u132->scheduler_lock); + mutex_lock(&u132->scheduler_lock); ring = endp->ring; if (endp->edset_flush) { endp->edset_flush = 0; if (endp->dequeueing) usb_ftdi_elan_edset_flush(u132->platform_dev, ring->number, endp); - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else if (endp->active) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else if (ring->in_use) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else if (endp->queue_next == endp->queue_last) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else if (endp->pipetype == PIPE_INTERRUPT) { u8 address = u132->addr[endp->usb_addr].address; if (ring->in_use) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else { @@ -1412,7 +1412,7 @@ endp->active = 1; ring->curr_endp = endp; ring->in_use = 1; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_single(u132, ring, endp, urb, address, endp->toggle_bits, u132_hcd_interrupt_recv); if (retval == 0) { @@ -1423,7 +1423,7 @@ } else if (endp->pipetype == PIPE_CONTROL) { u8 address = u132->addr[endp->usb_addr].address; if (ring->in_use) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else if (address == 0) { @@ -1433,7 +1433,7 @@ endp->active = 1; ring->curr_endp = endp; ring->in_use = 1; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_setup(u132, ring, endp, urb, address, 0x2, u132_hcd_initial_setup_sent); if (retval == 0) { @@ -1447,7 +1447,7 @@ endp->active = 1; ring->curr_endp = endp; ring->in_use = 1; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_setup(u132, ring, endp, urb, 0, 0x2, u132_hcd_enumeration_address_sent); if (retval == 0) { @@ -1462,7 +1462,7 @@ endp->active = 1; ring->curr_endp = endp; ring->in_use = 1; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_setup(u132, ring, endp, urb, address, 0x2, u132_hcd_configure_setup_sent); if (retval == 0) { @@ -1474,7 +1474,7 @@ if (endp->input) { u8 address = u132->addr[endp->usb_addr].address; if (ring->in_use) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else { @@ -1484,7 +1484,7 @@ endp->active = 1; ring->curr_endp = endp; ring->in_use = 1; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_input(u132, ring, endp, urb, address, endp->toggle_bits, u132_hcd_bulk_input_recv); @@ -1497,7 +1497,7 @@ } else { /* output pipe */ u8 address = u132->addr[endp->usb_addr].address; if (ring->in_use) { - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); u132_endp_put_kref(u132, endp); return; } else { @@ -1507,7 +1507,7 @@ endp->active = 1; ring->curr_endp = endp; ring->in_use = 1; - up(&u132->scheduler_lock); + mutex_unlock(&u132->scheduler_lock); retval = edset_output(u132, ring, endp, urb, address, endp->toggle_bits, u132_hcd_bulk_output_sent); @@ -3038,7 +3038,7 @@ u132->power = 0; u132->reset = 0; mutex_init(&u132->sw_lock); - init_MUTEX(&u132->scheduler_lock); + mutex_init(&u132->scheduler_lock); while (rings-- > 0) { struct u132_ring *ring = &u132->ring[rings]; ring->u132 = u132; -- Matthias Kaehlcke Linux Application Developer Barcelona Yo soy como soy y tú eres como eres, construyamos un mundo donde yo pueda ser sin dejar de ser yo, donde tú puedas ser sin dejar de ser tú, y donde ni yo ni tú obliguemos al otro a ser como yo o como tú .''`. using free software / Debian GNU/Linux | http://debian.org : :' : `. `'` gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `- ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] ELAN U132 Host Controller Driver: convert scheduler_lock to mutex 2007-09-07 13:10 ` Matthias Kaehlcke @ 2007-09-09 16:41 ` Greg KH 0 siblings, 0 replies; 7+ messages in thread From: Greg KH @ 2007-09-09 16:41 UTC (permalink / raw) To: Matthias Kaehlcke, gregkh, linux-usb-users, linux-usb-devel, linux-kernel, akpm On Fri, Sep 07, 2007 at 03:10:54PM +0200, Matthias Kaehlcke wrote: > A corrected version of the patch, the first one contained context > removed by the first patch of this serie This patch for some reason did not apply cleanly. Care to redo it after the next -mm releae that has your first patch in it (that looked fine.) thanks, greg k-h ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2007-09-09 20:04 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-09-06 21:09 [PATCH 0/2] Use mutexes instead of semaphores in the ELAN U132 Host Controller Driver Matthias Kaehlcke 2007-09-06 21:18 ` [PATCH 1/2] ELAN U132 Host Controller Driver: convert sw_lock to mutex Matthias Kaehlcke 2007-09-06 22:08 ` Oleg Verych 2007-09-07 6:14 ` Matthias Kaehlcke 2007-09-06 21:19 ` [PATCH 2/2] ELAN U132 Host Controller Driver: convert scheduler_lock " Matthias Kaehlcke 2007-09-07 13:10 ` Matthias Kaehlcke 2007-09-09 16:41 ` Greg KH
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox