[PATCH][TRUSTY] Revert "usb: ehci: fix deadlock when threadirqs option is used"
Colin Ian King
colin.king at canonical.com
Thu Mar 6 13:33:05 UTC 2014
On 06/03/14 13:28, Tim Gardner wrote:
> On 03/06/2014 02:20 AM, Colin King wrote:
>> From: Colin Ian King <colin.king at canonical.com>
>>
>> This patch unfortunately breaks USB on my Lenovo x230 and on a Lenovo
>> T440. I guess it may break it on a wider range of machines too. I'm
>> requesting that it is reverted.
>>
>> This reverts commit 65482e0c807a50dc3ec9d59a7465801f9c56bf52.
>> ---
>> drivers/usb/host/ehci-hcd.c | 13 +++----------
>> 1 file changed, 3 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
>> index 4dfd6fb..e8ba4c4 100644
>> --- a/drivers/usb/host/ehci-hcd.c
>> +++ b/drivers/usb/host/ehci-hcd.c
>> @@ -686,15 +686,8 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)
>> struct ehci_hcd *ehci = hcd_to_ehci (hcd);
>> u32 status, masked_status, pcd_status = 0, cmd;
>> int bh;
>> - unsigned long flags;
>>
>> - /*
>> - * For threadirqs option we use spin_lock_irqsave() variant to
>> prevent
>> - * deadlock with ehci hrtimer callback, because hrtimer callbacks
>> run
>> - * in interrupt context even when threadirqs is specified. We can go
>> - * back to spin_lock() variant when hrtimer callbacks become
>> threaded.
>> - */
>> - spin_lock_irqsave(&ehci->lock, flags);
>> + spin_lock (&ehci->lock);
>>
>> status = ehci_readl(ehci, &ehci->regs->status);
>>
>> @@ -712,7 +705,7 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)
>>
>> /* Shared IRQ? */
>> if (!masked_status || unlikely(ehci->rh_state == EHCI_RH_HALTED)) {
>> - spin_unlock_irqrestore(&ehci->lock, flags);
>> + spin_unlock(&ehci->lock);
>> return IRQ_NONE;
>> }
>>
>> @@ -830,7 +823,7 @@ dead:
>>
>> if (bh)
>> ehci_work (ehci);
>> - spin_unlock_irqrestore(&ehci->lock, flags);
>> + spin_unlock (&ehci->lock);
>> if (pcd_status)
>> usb_hcd_poll_rh_status(hcd);
>> return IRQ_HANDLED;
>>
>
> Colin - I'm reluctant to do this since it is a significant divergence
> from upstream. Can you work with the maintainer to figure out why your
> machines break ? Or alternatively the comment above spin_lock_irqsave()
> suggests a revert after hrtimer callbacks become threaded (which ought
> not be too difficult). I could take a shot at it later today.
>
> rtg
I now see the root cause of my issues, the linux-image-extras* package
was missing causing me not to see the USB devices when I originally
tested the -proposed kernel and when I installed my rebuilt debug kernel
it worked because I installed the *extras. So, this is a NACK from me.
Colin
More information about the kernel-team
mailing list