USB: ohci-at91 refcount fix for irq wake enables
The attached patch fixes the unbalanced calls to enable_irq_wake() and disable_irq_wake() in the AT91 USB Host driver. It should resolve these kernel messages: Unbalanced IRQ x wake disable BUG: warning at kernel/irq/manage.c:167/set_irq_wake() (The original code was debugged before a bug in the genirq wakeup irq logic was fixed by adding the IRQ wake enable/disable refcounting. Not all code yet uses the bugfixed model.) Signed-off-by: Andrew Victor <andrew@sanpeople.com> Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Родитель
f3f4906516
Коммит
6dde896e4e
|
@ -170,7 +170,6 @@ static int usb_hcd_at91_remove(struct usb_hcd *hcd,
|
||||||
at91_stop_hc(pdev);
|
at91_stop_hc(pdev);
|
||||||
iounmap(hcd->regs);
|
iounmap(hcd->regs);
|
||||||
release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
|
release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
|
||||||
disable_irq_wake(hcd->irq);
|
|
||||||
|
|
||||||
clk_put(fclk);
|
clk_put(fclk);
|
||||||
clk_put(iclk);
|
clk_put(iclk);
|
||||||
|
@ -271,8 +270,6 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
|
||||||
|
|
||||||
if (device_may_wakeup(&pdev->dev))
|
if (device_may_wakeup(&pdev->dev))
|
||||||
enable_irq_wake(hcd->irq);
|
enable_irq_wake(hcd->irq);
|
||||||
else
|
|
||||||
disable_irq_wake(hcd->irq);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The integrated transceivers seem unable to notice disconnect,
|
* The integrated transceivers seem unable to notice disconnect,
|
||||||
|
@ -293,6 +290,11 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
|
||||||
|
|
||||||
static int ohci_hcd_at91_drv_resume(struct platform_device *pdev)
|
static int ohci_hcd_at91_drv_resume(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
|
struct usb_hcd *hcd = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
|
if (device_may_wakeup(&pdev->dev))
|
||||||
|
disable_irq_wake(hcd->irq);
|
||||||
|
|
||||||
if (!clocked) {
|
if (!clocked) {
|
||||||
clk_enable(iclk);
|
clk_enable(iclk);
|
||||||
clk_enable(fclk);
|
clk_enable(fclk);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче