diff options
author | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2016-11-13 11:45:39 -0300 |
---|---|---|
committer | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2016-11-13 11:45:39 -0300 |
commit | c920cb550195a94e919bd724c7ae268f74134460 (patch) | |
tree | 3dbf0c1e48dc8726a2efef4c8be041cdbf66ba3b /kernels/linux-libre-knock/0011-usb-musb-Fix-hardirq-safe-hardirq-unsafe-lock-order-.patch | |
parent | 11341f5a6a4dd621b5a2d146e1acb96ff31c0053 (diff) | |
download | abslibre-c920cb550195a94e919bd724c7ae268f74134460.tar.gz abslibre-c920cb550195a94e919bd724c7ae268f74134460.tar.bz2 abslibre-c920cb550195a94e919bd724c7ae268f74134460.zip |
linux-libre-knock: minor fix for armv7h
Diffstat (limited to 'kernels/linux-libre-knock/0011-usb-musb-Fix-hardirq-safe-hardirq-unsafe-lock-order-.patch')
-rw-r--r-- | kernels/linux-libre-knock/0011-usb-musb-Fix-hardirq-safe-hardirq-unsafe-lock-order-.patch | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/kernels/linux-libre-knock/0011-usb-musb-Fix-hardirq-safe-hardirq-unsafe-lock-order-.patch b/kernels/linux-libre-knock/0011-usb-musb-Fix-hardirq-safe-hardirq-unsafe-lock-order-.patch deleted file mode 100644 index 9c53526b9..000000000 --- a/kernels/linux-libre-knock/0011-usb-musb-Fix-hardirq-safe-hardirq-unsafe-lock-order-.patch +++ /dev/null @@ -1,86 +0,0 @@ -From b947f36e0453d0bc466fd88a883f3c4a50e6f6a1 Mon Sep 17 00:00:00 2001 -From: Tony Lindgren <tony@atomide.com> -Date: Fri, 30 Sep 2016 11:10:09 -0700 -Subject: [PATCH 11/14] usb: musb: Fix hardirq-safe hardirq-unsafe lock order - error - -If we configure musb with 2430 glue as a peripheral, and then rmmod -omap2430 module, we'll get the following error: - -[ INFO: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected ] -... -rmmod/413 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire: - (&phy->mutex){+.+.+.}, at: [<c04b9fd0>] phy_power_off+0x1c/0xb8 -[ 204.678710] - and this task is already holding: - (&(&musb->lock)->rlock){-.-...}, at: [<bf3a482c>] - musb_gadget_stop+0x24/0xec [musb_hdrc] -which would create a new lock dependency: - (&(&musb->lock)->rlock){-.-...} -> (&phy->mutex){+.+.+.} -... - -This is because some glue layers expect musb_platform_enable/disable -to be called with spinlock held, and 2430 glue layer has USB PHY on -the I2C bus using a mutex. - -We could fix the glue layers to take the spinlock, but we still have -a problem of musb_plaform_enable/disable being called in an unbalanced -manner. So that would still lead into USB PHY enable/disable related -problems for omap2430 glue layer. - -While it makes sense to only enable USB PHY when needed from PM point -of view, in this case we just can't do it yet without breaking things. -So let's just revert phy_enable/disable related changes instead and -reconsider this after we have fixed musb_platform_enable/disable to -be balanced. - -Fixes: a83e17d0f73b ("usb: musb: Improve PM runtime and phy handling -for 2430 glue layer") -Signed-off-by: Tony Lindgren <tony@atomide.com> -Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> ---- - drivers/usb/musb/omap2430.c | 7 ++----- - 1 file changed, 2 insertions(+), 5 deletions(-) - -diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c -index 0b4cec9..dae92de 100644 ---- a/drivers/usb/musb/omap2430.c -+++ b/drivers/usb/musb/omap2430.c -@@ -337,6 +337,7 @@ static int omap2430_musb_init(struct musb *musb) - } - musb->isr = omap2430_musb_interrupt; - phy_init(musb->phy); -+ phy_power_on(musb->phy); - - l = musb_readl(musb->mregs, OTG_INTERFSEL); - -@@ -373,8 +374,6 @@ static void omap2430_musb_enable(struct musb *musb) - struct musb_hdrc_platform_data *pdata = dev_get_platdata(dev); - struct omap_musb_board_data *data = pdata->board_data; - -- if (!WARN_ON(!musb->phy)) -- phy_power_on(musb->phy); - - omap2430_set_power(musb, true, glue->cable_connected); - -@@ -413,9 +412,6 @@ static void omap2430_musb_disable(struct musb *musb) - struct device *dev = musb->controller; - struct omap2430_glue *glue = dev_get_drvdata(dev->parent); - -- if (!WARN_ON(!musb->phy)) -- phy_power_off(musb->phy); -- - if (glue->status != MUSB_UNKNOWN) - omap_control_usb_set_mode(glue->control_otghs, - USB_MODE_DISCONNECT); -@@ -429,6 +425,7 @@ static int omap2430_musb_exit(struct musb *musb) - struct omap2430_glue *glue = dev_get_drvdata(dev->parent); - - omap2430_low_level_exit(musb); -+ phy_power_off(musb->phy); - phy_exit(musb->phy); - musb->phy = NULL; - cancel_work_sync(&glue->omap_musb_mailbox_work); --- -2.10.0 - |