2018-02-27 22:29:39

by Merlijn Wajer

[permalink] [raw]
Subject: [PATCH v2 0/1] usb: musb: fix vbus_show

Hi,

This fixes reading vbus status in musb.

v2 places the pm_runtime_{get,put}_sync calls outside of the spinlocks, because
pm_runtime_{get,put}_sync would otherwise (sometimes, depending on the platform)
cause deadlocks.
Hopefully this fixes the deadlock issue that Bin Liu ran into. I've tested this
patch on my Nokia N900 and it works for me.

Cheers,
Merlijn


2018-02-27 22:30:04

by Merlijn Wajer

[permalink] [raw]
Subject: [PATCH v2 1/1] usb: musb: call pm_runtime_{get,put}_sync before reading vbus registers

Without pm_runtime_{get,put}_sync calls in place, reading
vbus status via /sys causes the following error:

Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa0ab060
pgd = b333e822
[fa0ab060] *pgd=48011452(bad)

[<c05261b0>] (musb_default_readb) from [<c0525bd0>] (musb_vbus_show+0x58/0xe4)
[<c0525bd0>] (musb_vbus_show) from [<c04c0148>] (dev_attr_show+0x20/0x44)
[<c04c0148>] (dev_attr_show) from [<c0259f74>] (sysfs_kf_seq_show+0x80/0xdc)
[<c0259f74>] (sysfs_kf_seq_show) from [<c0210bac>] (seq_read+0x250/0x448)
[<c0210bac>] (seq_read) from [<c01edb40>] (__vfs_read+0x1c/0x118)
[<c01edb40>] (__vfs_read) from [<c01edccc>] (vfs_read+0x90/0x144)
[<c01edccc>] (vfs_read) from [<c01ee1d0>] (SyS_read+0x3c/0x74)
[<c01ee1d0>] (SyS_read) from [<c0106fe0>] (ret_fast_syscall+0x0/0x54)

Solution was suggested by Tony Lindgren <[email protected]>.

Signed-off-by: Merlijn Wajer <[email protected]>
---
drivers/usb/musb/musb_core.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index eef4ad578b31..c344ef4e5355 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -1756,6 +1756,7 @@ vbus_show(struct device *dev, struct device_attribute *attr, char *buf)
int vbus;
u8 devctl;

+ pm_runtime_get_sync(dev);
spin_lock_irqsave(&musb->lock, flags);
val = musb->a_wait_bcon;
vbus = musb_platform_get_vbus_status(musb);
@@ -1769,6 +1770,7 @@ vbus_show(struct device *dev, struct device_attribute *attr, char *buf)
vbus = 0;
}
spin_unlock_irqrestore(&musb->lock, flags);
+ pm_runtime_put_sync(dev);

return sprintf(buf, "Vbus %s, timeout %lu msec\n",
vbus ? "on" : "off", val);
--
2.16.2


2018-02-28 22:01:02

by Tony Lindgren

[permalink] [raw]
Subject: Re: [PATCH v2 1/1] usb: musb: call pm_runtime_{get,put}_sync before reading vbus registers

* Merlijn Wajer <[email protected]> [180227 22:29]:
> Without pm_runtime_{get,put}_sync calls in place, reading
> vbus status via /sys causes the following error:
>
> Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa0ab060
> pgd = b333e822
> [fa0ab060] *pgd=48011452(bad)
>
> [<c05261b0>] (musb_default_readb) from [<c0525bd0>] (musb_vbus_show+0x58/0xe4)
> [<c0525bd0>] (musb_vbus_show) from [<c04c0148>] (dev_attr_show+0x20/0x44)
> [<c04c0148>] (dev_attr_show) from [<c0259f74>] (sysfs_kf_seq_show+0x80/0xdc)
> [<c0259f74>] (sysfs_kf_seq_show) from [<c0210bac>] (seq_read+0x250/0x448)
> [<c0210bac>] (seq_read) from [<c01edb40>] (__vfs_read+0x1c/0x118)
> [<c01edb40>] (__vfs_read) from [<c01edccc>] (vfs_read+0x90/0x144)
> [<c01edccc>] (vfs_read) from [<c01ee1d0>] (SyS_read+0x3c/0x74)
> [<c01ee1d0>] (SyS_read) from [<c0106fe0>] (ret_fast_syscall+0x0/0x54)
>
> Solution was suggested by Tony Lindgren <[email protected]>.
>
> Signed-off-by: Merlijn Wajer <[email protected]>

Thanks for fixing this. Assuming it passes Bin's tests:

Acked-by: Tony Lindgren <[email protected]>

2018-03-05 17:39:34

by Bin Liu

[permalink] [raw]
Subject: Re: [PATCH v2 1/1] usb: musb: call pm_runtime_{get,put}_sync before reading vbus registers

On Wed, Feb 28, 2018 at 01:59:43PM -0800, Tony Lindgren wrote:
> * Merlijn Wajer <[email protected]> [180227 22:29]:
> > Without pm_runtime_{get,put}_sync calls in place, reading
> > vbus status via /sys causes the following error:
> >
> > Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa0ab060
> > pgd = b333e822
> > [fa0ab060] *pgd=48011452(bad)
> >
> > [<c05261b0>] (musb_default_readb) from [<c0525bd0>] (musb_vbus_show+0x58/0xe4)
> > [<c0525bd0>] (musb_vbus_show) from [<c04c0148>] (dev_attr_show+0x20/0x44)
> > [<c04c0148>] (dev_attr_show) from [<c0259f74>] (sysfs_kf_seq_show+0x80/0xdc)
> > [<c0259f74>] (sysfs_kf_seq_show) from [<c0210bac>] (seq_read+0x250/0x448)
> > [<c0210bac>] (seq_read) from [<c01edb40>] (__vfs_read+0x1c/0x118)
> > [<c01edb40>] (__vfs_read) from [<c01edccc>] (vfs_read+0x90/0x144)
> > [<c01edccc>] (vfs_read) from [<c01ee1d0>] (SyS_read+0x3c/0x74)
> > [<c01ee1d0>] (SyS_read) from [<c0106fe0>] (ret_fast_syscall+0x0/0x54)
> >
> > Solution was suggested by Tony Lindgren <[email protected]>.
> >
> > Signed-off-by: Merlijn Wajer <[email protected]>
>
> Thanks for fixing this. Assuming it passes Bin's tests:
>
> Acked-by: Tony Lindgren <[email protected]>

Applied and sent out. Thanks.

-Bin.

2018-03-05 18:37:42

by Ivaylo Dimitrov

[permalink] [raw]
Subject: Re: [PATCH v2 1/1] usb: musb: call pm_runtime_{get,put}_sync before reading vbus registers

Hi,

On 5.03.2018 19:38, Bin Liu wrote:
> On Wed, Feb 28, 2018 at 01:59:43PM -0800, Tony Lindgren wrote:
>> * Merlijn Wajer <[email protected]> [180227 22:29]:
>>> Without pm_runtime_{get,put}_sync calls in place, reading
>>> vbus status via /sys causes the following error:
>>>
>>> Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa0ab060
>>> pgd = b333e822
>>> [fa0ab060] *pgd=48011452(bad)
>>>
>>> [<c05261b0>] (musb_default_readb) from [<c0525bd0>] (musb_vbus_show+0x58/0xe4)
>>> [<c0525bd0>] (musb_vbus_show) from [<c04c0148>] (dev_attr_show+0x20/0x44)
>>> [<c04c0148>] (dev_attr_show) from [<c0259f74>] (sysfs_kf_seq_show+0x80/0xdc)
>>> [<c0259f74>] (sysfs_kf_seq_show) from [<c0210bac>] (seq_read+0x250/0x448)
>>> [<c0210bac>] (seq_read) from [<c01edb40>] (__vfs_read+0x1c/0x118)
>>> [<c01edb40>] (__vfs_read) from [<c01edccc>] (vfs_read+0x90/0x144)
>>> [<c01edccc>] (vfs_read) from [<c01ee1d0>] (SyS_read+0x3c/0x74)
>>> [<c01ee1d0>] (SyS_read) from [<c0106fe0>] (ret_fast_syscall+0x0/0x54)
>>>
>>> Solution was suggested by Tony Lindgren <[email protected]>.
>>>
>>> Signed-off-by: Merlijn Wajer <[email protected]>
>>
>> Thanks for fixing this. Assuming it passes Bin's tests:
>>
>> Acked-by: Tony Lindgren <[email protected]>
>
> Applied and sent out. Thanks.
>

What about stable kernels? Shouldn't this be fixed there as well?

Ivo

2018-03-05 18:58:58

by Bin Liu

[permalink] [raw]
Subject: Re: [PATCH v2 1/1] usb: musb: call pm_runtime_{get,put}_sync before reading vbus registers

On Mon, Mar 05, 2018 at 08:35:10PM +0200, Ivaylo Dimitrov wrote:
> Hi,
>
> On 5.03.2018 19:38, Bin Liu wrote:
> >On Wed, Feb 28, 2018 at 01:59:43PM -0800, Tony Lindgren wrote:
> >>* Merlijn Wajer <[email protected]> [180227 22:29]:
> >>>Without pm_runtime_{get,put}_sync calls in place, reading
> >>>vbus status via /sys causes the following error:
> >>>
> >>>Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa0ab060
> >>>pgd = b333e822
> >>>[fa0ab060] *pgd=48011452(bad)
> >>>
> >>>[<c05261b0>] (musb_default_readb) from [<c0525bd0>] (musb_vbus_show+0x58/0xe4)
> >>>[<c0525bd0>] (musb_vbus_show) from [<c04c0148>] (dev_attr_show+0x20/0x44)
> >>>[<c04c0148>] (dev_attr_show) from [<c0259f74>] (sysfs_kf_seq_show+0x80/0xdc)
> >>>[<c0259f74>] (sysfs_kf_seq_show) from [<c0210bac>] (seq_read+0x250/0x448)
> >>>[<c0210bac>] (seq_read) from [<c01edb40>] (__vfs_read+0x1c/0x118)
> >>>[<c01edb40>] (__vfs_read) from [<c01edccc>] (vfs_read+0x90/0x144)
> >>>[<c01edccc>] (vfs_read) from [<c01ee1d0>] (SyS_read+0x3c/0x74)
> >>>[<c01ee1d0>] (SyS_read) from [<c0106fe0>] (ret_fast_syscall+0x0/0x54)
> >>>
> >>>Solution was suggested by Tony Lindgren <[email protected]>.
> >>>
> >>>Signed-off-by: Merlijn Wajer <[email protected]>
> >>
> >>Thanks for fixing this. Assuming it passes Bin's tests:
> >>
> >>Acked-by: Tony Lindgren <[email protected]>
> >
> >Applied and sent out. Thanks.
> >
>
> What about stable kernels? Shouldn't this be fixed there as well?

Yes, it should, but I need to figure out which stables to send to and I
am busy in something at the moment. So I will send it @stable some time
later.

Regards,
-Bin.