From: Bin Liu <b-liu@ti.com>
To: Merlijn Wajer <merlijn@wizzup.org>
Cc: linux-omap@vger.kernel.org, tony@atomide.com,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] usb: musb: call pm_runtime_{get,put}_sync before reading vbus registers
Date: Mon, 26 Feb 2018 11:38:33 -0600 [thread overview]
Message-ID: <20180226173833.GC20609@uda0271908> (raw)
In-Reply-To: <73a1de6d-6bf4-275f-aee3-85699cd6ca76@wizzup.org>
On Mon, Feb 26, 2018 at 06:19:30PM +0100, Merlijn Wajer wrote:
> Hi,
>
> On 26/02/18 16:57, Bin Liu wrote:
> > Hi,
> >
> > On Mon, Feb 26, 2018 at 11:56:08AM +0100, Merlijn Wajer wrote:
> >> 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 <tony@atomide.com>.
> >>
> >> Signed-off-by: Merlijn Wajer <merlijn@wizzup.org>
> >> ---
> >> drivers/usb/musb/musb_core.c | 4 ++++
> >> 1 file changed, 4 insertions(+)
> >>
> >> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
> >> index eef4ad578b31..ceaa40ef0e73 100644
> >> --- a/drivers/usb/musb/musb_core.c
> >> +++ b/drivers/usb/musb/musb_core.c
> >> @@ -1760,6 +1760,8 @@ vbus_show(struct device *dev, struct device_attribute *attr, char *buf)
> >> val = musb->a_wait_bcon;
> >> vbus = musb_platform_get_vbus_status(musb);
> >> if (vbus < 0) {
> >> + pm_runtime_get_sync(dev);
> >> +
> >> /* Use default MUSB method by means of DEVCTL register */
> >> devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
> >> if ((devctl & MUSB_DEVCTL_VBUS)
> >> @@ -1767,6 +1769,8 @@ vbus_show(struct device *dev, struct device_attribute *attr, char *buf)
> >> vbus = 1;
> >> else
> >> vbus = 0;
> >> +
> >> + pm_runtime_put_sync(dev);
> >> }
> >> spin_unlock_irqrestore(&musb->lock, flags);
> >
> > Thanks for the patch, but I got spinlock deadlock when testing it. I
> > think the function pair should be at the outside scope of the
> > spin_lock/unlock, doesn't it?
>
> I see - sorry. Weird, it worked for me on my Nokia N900. What did you
> test this on?
>
> I will try to submit an improved version tonight (you seem to have a
> good idea on what is wrong, so I will follow that), but it would help me
> if I can reproduce the issue.
I tested on both Beaglebone Black and AM335x GP EVM, on the USB1 host
port. I didn't test the USB0 port (yet).
Thanks,
-Bin.
WARNING: multiple messages have this Message-ID (diff)
From: Bin Liu <b-liu@ti.com>
To: Merlijn Wajer <merlijn@wizzup.org>
Cc: linux-omap@vger.kernel.org, tony@atomide.com,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: usb: musb: call pm_runtime_{get,put}_sync before reading vbus registers
Date: Mon, 26 Feb 2018 11:38:33 -0600 [thread overview]
Message-ID: <20180226173833.GC20609@uda0271908> (raw)
On Mon, Feb 26, 2018 at 06:19:30PM +0100, Merlijn Wajer wrote:
> Hi,
>
> On 26/02/18 16:57, Bin Liu wrote:
> > Hi,
> >
> > On Mon, Feb 26, 2018 at 11:56:08AM +0100, Merlijn Wajer wrote:
> >> 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 <tony@atomide.com>.
> >>
> >> Signed-off-by: Merlijn Wajer <merlijn@wizzup.org>
> >> ---
> >> drivers/usb/musb/musb_core.c | 4 ++++
> >> 1 file changed, 4 insertions(+)
> >>
> >> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
> >> index eef4ad578b31..ceaa40ef0e73 100644
> >> --- a/drivers/usb/musb/musb_core.c
> >> +++ b/drivers/usb/musb/musb_core.c
> >> @@ -1760,6 +1760,8 @@ vbus_show(struct device *dev, struct device_attribute *attr, char *buf)
> >> val = musb->a_wait_bcon;
> >> vbus = musb_platform_get_vbus_status(musb);
> >> if (vbus < 0) {
> >> + pm_runtime_get_sync(dev);
> >> +
> >> /* Use default MUSB method by means of DEVCTL register */
> >> devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
> >> if ((devctl & MUSB_DEVCTL_VBUS)
> >> @@ -1767,6 +1769,8 @@ vbus_show(struct device *dev, struct device_attribute *attr, char *buf)
> >> vbus = 1;
> >> else
> >> vbus = 0;
> >> +
> >> + pm_runtime_put_sync(dev);
> >> }
> >> spin_unlock_irqrestore(&musb->lock, flags);
> >
> > Thanks for the patch, but I got spinlock deadlock when testing it. I
> > think the function pair should be at the outside scope of the
> > spin_lock/unlock, doesn't it?
>
> I see - sorry. Weird, it worked for me on my Nokia N900. What did you
> test this on?
>
> I will try to submit an improved version tonight (you seem to have a
> good idea on what is wrong, so I will follow that), but it would help me
> if I can reproduce the issue.
I tested on both Beaglebone Black and AM335x GP EVM, on the USB1 host
port. I didn't test the USB0 port (yet).
Thanks,
-Bin.
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Bin Liu <b-liu@ti.com>
To: Merlijn Wajer <merlijn@wizzup.org>
Cc: <linux-omap@vger.kernel.org>, <tony@atomide.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
<linux-usb@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] usb: musb: call pm_runtime_{get,put}_sync before reading vbus registers
Date: Mon, 26 Feb 2018 11:38:33 -0600 [thread overview]
Message-ID: <20180226173833.GC20609@uda0271908> (raw)
In-Reply-To: <73a1de6d-6bf4-275f-aee3-85699cd6ca76@wizzup.org>
On Mon, Feb 26, 2018 at 06:19:30PM +0100, Merlijn Wajer wrote:
> Hi,
>
> On 26/02/18 16:57, Bin Liu wrote:
> > Hi,
> >
> > On Mon, Feb 26, 2018 at 11:56:08AM +0100, Merlijn Wajer wrote:
> >> 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 <tony@atomide.com>.
> >>
> >> Signed-off-by: Merlijn Wajer <merlijn@wizzup.org>
> >> ---
> >> drivers/usb/musb/musb_core.c | 4 ++++
> >> 1 file changed, 4 insertions(+)
> >>
> >> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
> >> index eef4ad578b31..ceaa40ef0e73 100644
> >> --- a/drivers/usb/musb/musb_core.c
> >> +++ b/drivers/usb/musb/musb_core.c
> >> @@ -1760,6 +1760,8 @@ vbus_show(struct device *dev, struct device_attribute *attr, char *buf)
> >> val = musb->a_wait_bcon;
> >> vbus = musb_platform_get_vbus_status(musb);
> >> if (vbus < 0) {
> >> + pm_runtime_get_sync(dev);
> >> +
> >> /* Use default MUSB method by means of DEVCTL register */
> >> devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
> >> if ((devctl & MUSB_DEVCTL_VBUS)
> >> @@ -1767,6 +1769,8 @@ vbus_show(struct device *dev, struct device_attribute *attr, char *buf)
> >> vbus = 1;
> >> else
> >> vbus = 0;
> >> +
> >> + pm_runtime_put_sync(dev);
> >> }
> >> spin_unlock_irqrestore(&musb->lock, flags);
> >
> > Thanks for the patch, but I got spinlock deadlock when testing it. I
> > think the function pair should be at the outside scope of the
> > spin_lock/unlock, doesn't it?
>
> I see - sorry. Weird, it worked for me on my Nokia N900. What did you
> test this on?
>
> I will try to submit an improved version tonight (you seem to have a
> good idea on what is wrong, so I will follow that), but it would help me
> if I can reproduce the issue.
I tested on both Beaglebone Black and AM335x GP EVM, on the USB1 host
port. I didn't test the USB0 port (yet).
Thanks,
-Bin.
next prev parent reply other threads:[~2018-02-26 17:38 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-26 10:56 [PATCH] usb: musb: call pm_runtime_{get,put}_sync before reading vbus registers Merlijn Wajer
2018-02-26 10:56 ` Merlijn Wajer
2018-02-26 15:57 ` [PATCH] " Bin Liu
2018-02-26 15:57 ` Bin Liu
2018-02-26 15:57 ` Bin Liu
2018-02-26 17:19 ` [PATCH] " Merlijn Wajer
2018-02-26 17:19 ` Merlijn Wajer
2018-02-26 17:38 ` Bin Liu [this message]
2018-02-26 17:38 ` [PATCH] " Bin Liu
2018-02-26 17:38 ` Bin Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180226173833.GC20609@uda0271908 \
--to=b-liu@ti.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=merlijn@wizzup.org \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.