Message ID | 20190531103137.14901-1-narmstrong@baylibre.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | phy: meson-g12a-usb3-pcie: disable locking for cr_regmap | expand |
Hi, On 31/05/19 4:01 PM, Neil Armstrong wrote: > Fix the following BUG by disabling locking for the cr_regmap config. What caused the BUG in the first place? The commit log needs more details or else this looks like a workaround to mask a BUG. Thanks Kishon > > BUG: sleeping function called from invalid context at drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c:85 > in_atomic(): 1, irqs_disabled(): 128, pid: 60, name: kworker/3:1 > [snip] > Workqueue: events deferred_probe_work_func > Call trace: > dump_backtrace+0x0/0x190 > show_stack+0x14/0x20 > dump_stack+0x90/0xb4 > ___might_sleep+0xec/0x110 > __might_sleep+0x50/0x88 > phy_g12a_usb3_pcie_cr_bus_addr.isra.0+0x80/0x1a8 > phy_g12a_usb3_pcie_cr_bus_read+0x34/0x1d8 > _regmap_read+0x60/0xe0 > _regmap_update_bits+0xc4/0x110 > regmap_update_bits_base+0x60/0x90 > phy_g12a_usb3_pcie_init+0xdc/0x210 > phy_init+0x74/0xd0 > dwc3_meson_g12a_probe+0x2cc/0x4d0 > platform_drv_probe+0x50/0xa0 > really_probe+0x20c/0x3b8 > driver_probe_device+0x68/0x150 > __device_attach_driver+0xa8/0x170 > bus_for_each_drv+0x64/0xc8 > __device_attach+0xd8/0x158 > device_initial_probe+0x10/0x18 > bus_probe_device+0x90/0x98 > deferred_probe_work_func+0x94/0xe8 > process_one_work+0x1e0/0x338 > worker_thread+0x230/0x458 > kthread+0x134/0x138 > ret_from_fork+0x10/0x1c > > Fixes: 36077e16c050 ("phy: amlogic: Add Amlogic G12A USB3 + PCIE Combo PHY Driver") > Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> > --- > drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c b/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c > index 6233a7979a93..ac322d643c7a 100644 > --- a/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c > +++ b/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c > @@ -188,7 +188,7 @@ static const struct regmap_config phy_g12a_usb3_pcie_cr_regmap_conf = { > .reg_read = phy_g12a_usb3_pcie_cr_bus_read, > .reg_write = phy_g12a_usb3_pcie_cr_bus_write, > .max_register = 0xffff, > - .fast_io = true, > + .disable_locking = true, > }; > > static int phy_g12a_usb3_init(struct phy *phy) >
On 31/05/2019 12:35, Kishon Vijay Abraham I wrote: > Hi, > > On 31/05/19 4:01 PM, Neil Armstrong wrote: >> Fix the following BUG by disabling locking for the cr_regmap config. > > What caused the BUG in the first place? The commit log needs more details or > else this looks like a workaround to mask a BUG. I thought it was pretty explicit, phy_g12a_usb3_pcie_cr_bus_read() sleeps with regmap_read_poll_timeout() while ran in spinlock_irq, caused by regmap fast_io = true Locking is not needed in our case, this regmap is only used by the PHY init() callback. Should I send a v2 with such explanation ? Neil > > Thanks > Kishon > >> >> BUG: sleeping function called from invalid context at drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c:85 >> in_atomic(): 1, irqs_disabled(): 128, pid: 60, name: kworker/3:1 >> [snip] >> Workqueue: events deferred_probe_work_func >> Call trace: >> dump_backtrace+0x0/0x190 >> show_stack+0x14/0x20 >> dump_stack+0x90/0xb4 >> ___might_sleep+0xec/0x110 >> __might_sleep+0x50/0x88 >> phy_g12a_usb3_pcie_cr_bus_addr.isra.0+0x80/0x1a8 >> phy_g12a_usb3_pcie_cr_bus_read+0x34/0x1d8 >> _regmap_read+0x60/0xe0 >> _regmap_update_bits+0xc4/0x110 >> regmap_update_bits_base+0x60/0x90 >> phy_g12a_usb3_pcie_init+0xdc/0x210 >> phy_init+0x74/0xd0 >> dwc3_meson_g12a_probe+0x2cc/0x4d0 >> platform_drv_probe+0x50/0xa0 >> really_probe+0x20c/0x3b8 >> driver_probe_device+0x68/0x150 >> __device_attach_driver+0xa8/0x170 >> bus_for_each_drv+0x64/0xc8 >> __device_attach+0xd8/0x158 >> device_initial_probe+0x10/0x18 >> bus_probe_device+0x90/0x98 >> deferred_probe_work_func+0x94/0xe8 >> process_one_work+0x1e0/0x338 >> worker_thread+0x230/0x458 >> kthread+0x134/0x138 >> ret_from_fork+0x10/0x1c >> >> Fixes: 36077e16c050 ("phy: amlogic: Add Amlogic G12A USB3 + PCIE Combo PHY Driver") >> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> >> --- >> drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c b/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c >> index 6233a7979a93..ac322d643c7a 100644 >> --- a/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c >> +++ b/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c >> @@ -188,7 +188,7 @@ static const struct regmap_config phy_g12a_usb3_pcie_cr_regmap_conf = { >> .reg_read = phy_g12a_usb3_pcie_cr_bus_read, >> .reg_write = phy_g12a_usb3_pcie_cr_bus_write, >> .max_register = 0xffff, >> - .fast_io = true, >> + .disable_locking = true, >> }; >> >> static int phy_g12a_usb3_init(struct phy *phy) >>
On 31/05/19 7:52 PM, Neil Armstrong wrote: > On 31/05/2019 12:35, Kishon Vijay Abraham I wrote: >> Hi, >> >> On 31/05/19 4:01 PM, Neil Armstrong wrote: >>> Fix the following BUG by disabling locking for the cr_regmap config. >> >> What caused the BUG in the first place? The commit log needs more details or >> else this looks like a workaround to mask a BUG. > > I thought it was pretty explicit, phy_g12a_usb3_pcie_cr_bus_read() sleeps > with regmap_read_poll_timeout() while ran in spinlock_irq, caused by regmap fast_io = true > > Locking is not needed in our case, this regmap is only used by the PHY init() callback. > > Should I send a v2 with such explanation ? yes, should atleast mention locking is not needed here. -Kishon > > Neil > >> >> Thanks >> Kishon >> >>> >>> BUG: sleeping function called from invalid context at drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c:85 >>> in_atomic(): 1, irqs_disabled(): 128, pid: 60, name: kworker/3:1 >>> [snip] >>> Workqueue: events deferred_probe_work_func >>> Call trace: >>> dump_backtrace+0x0/0x190 >>> show_stack+0x14/0x20 >>> dump_stack+0x90/0xb4 >>> ___might_sleep+0xec/0x110 >>> __might_sleep+0x50/0x88 >>> phy_g12a_usb3_pcie_cr_bus_addr.isra.0+0x80/0x1a8 >>> phy_g12a_usb3_pcie_cr_bus_read+0x34/0x1d8 >>> _regmap_read+0x60/0xe0 >>> _regmap_update_bits+0xc4/0x110 >>> regmap_update_bits_base+0x60/0x90 >>> phy_g12a_usb3_pcie_init+0xdc/0x210 >>> phy_init+0x74/0xd0 >>> dwc3_meson_g12a_probe+0x2cc/0x4d0 >>> platform_drv_probe+0x50/0xa0 >>> really_probe+0x20c/0x3b8 >>> driver_probe_device+0x68/0x150 >>> __device_attach_driver+0xa8/0x170 >>> bus_for_each_drv+0x64/0xc8 >>> __device_attach+0xd8/0x158 >>> device_initial_probe+0x10/0x18 >>> bus_probe_device+0x90/0x98 >>> deferred_probe_work_func+0x94/0xe8 >>> process_one_work+0x1e0/0x338 >>> worker_thread+0x230/0x458 >>> kthread+0x134/0x138 >>> ret_from_fork+0x10/0x1c >>> >>> Fixes: 36077e16c050 ("phy: amlogic: Add Amlogic G12A USB3 + PCIE Combo PHY Driver") >>> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> >>> --- >>> drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c b/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c >>> index 6233a7979a93..ac322d643c7a 100644 >>> --- a/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c >>> +++ b/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c >>> @@ -188,7 +188,7 @@ static const struct regmap_config phy_g12a_usb3_pcie_cr_regmap_conf = { >>> .reg_read = phy_g12a_usb3_pcie_cr_bus_read, >>> .reg_write = phy_g12a_usb3_pcie_cr_bus_write, >>> .max_register = 0xffff, >>> - .fast_io = true, >>> + .disable_locking = true, >>> }; >>> >>> static int phy_g12a_usb3_init(struct phy *phy) >>> >
diff --git a/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c b/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c index 6233a7979a93..ac322d643c7a 100644 --- a/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c +++ b/drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c @@ -188,7 +188,7 @@ static const struct regmap_config phy_g12a_usb3_pcie_cr_regmap_conf = { .reg_read = phy_g12a_usb3_pcie_cr_bus_read, .reg_write = phy_g12a_usb3_pcie_cr_bus_write, .max_register = 0xffff, - .fast_io = true, + .disable_locking = true, }; static int phy_g12a_usb3_init(struct phy *phy)
Fix the following BUG by disabling locking for the cr_regmap config. BUG: sleeping function called from invalid context at drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c:85 in_atomic(): 1, irqs_disabled(): 128, pid: 60, name: kworker/3:1 [snip] Workqueue: events deferred_probe_work_func Call trace: dump_backtrace+0x0/0x190 show_stack+0x14/0x20 dump_stack+0x90/0xb4 ___might_sleep+0xec/0x110 __might_sleep+0x50/0x88 phy_g12a_usb3_pcie_cr_bus_addr.isra.0+0x80/0x1a8 phy_g12a_usb3_pcie_cr_bus_read+0x34/0x1d8 _regmap_read+0x60/0xe0 _regmap_update_bits+0xc4/0x110 regmap_update_bits_base+0x60/0x90 phy_g12a_usb3_pcie_init+0xdc/0x210 phy_init+0x74/0xd0 dwc3_meson_g12a_probe+0x2cc/0x4d0 platform_drv_probe+0x50/0xa0 really_probe+0x20c/0x3b8 driver_probe_device+0x68/0x150 __device_attach_driver+0xa8/0x170 bus_for_each_drv+0x64/0xc8 __device_attach+0xd8/0x158 device_initial_probe+0x10/0x18 bus_probe_device+0x90/0x98 deferred_probe_work_func+0x94/0xe8 process_one_work+0x1e0/0x338 worker_thread+0x230/0x458 kthread+0x134/0x138 ret_from_fork+0x10/0x1c Fixes: 36077e16c050 ("phy: amlogic: Add Amlogic G12A USB3 + PCIE Combo PHY Driver") Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> --- drivers/phy/amlogic/phy-meson-g12a-usb3-pcie.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)