2017-04-24 12:35:30

by Nate Dailey

[permalink] [raw]
Subject: [PATCH RT] usb: Use _nort in usb_hcd_pci_remove

A trip through usb_hcd_pci_remove produces:

BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:993
in_atomic(): 0, irqs_disabled(): 1, pid: 4752, name: bash
INFO: lockdep is turned off.
irq event stamp: 0
hardirqs last enabled at (0): [< (null)>] (null)
hardirqs last disabled at (0): [<ffffffff8108da9d>] copy_process.part.36+0x64d/0x2380
softirqs last enabled at (0): [<ffffffff8108da9d>] copy_process.part.36+0x64d/0x2380
softirqs last disabled at (0): [< (null)>] (null)
CPU: 1 PID: 4752 Comm: bash Tainted: G W I 4.9.0debug-rt16+ #2
Hardware name: Stratus ftServer 2700/G7LAY, BIOS BIOS Version 6.3:58 09/18/2014
ffffc90006e5fbd0 ffffffff813d243a ffff88016ac0b240 0000000000001290
ffffc90006e5fbf8 ffffffff810c6907 ffff8801682f45d0 ffff8801682f1000
ffff8801682f45d0 ffffc90006e5fc18 ffffffff817dee44 ffff88016b2aee18
Call Trace:
[<ffffffff813d243a>] dump_stack+0x99/0xcf
[<ffffffff810c6907>] ___might_sleep+0x137/0x210
[<ffffffff817dee44>] rt_spin_lock+0x24/0x60
[<ffffffff815b526f>] ehci_irq+0x2f/0x400
[<ffffffff814226b9>] ? pci_bus_read_config_word+0x99/0xb0
[<ffffffff81592d66>] usb_hcd_irq+0x26/0x40
[<ffffffff815a7a90>] usb_hcd_pci_remove+0x50/0x170
[<ffffffff815b933a>] ehci_pci_remove+0x1a/0x20
[<ffffffff8142fc39>] pci_device_remove+0x39/0xc0
[<ffffffff8152c4da>] __device_release_driver+0x9a/0x150
[<ffffffff8152c5b3>] device_release_driver+0x23/0x30
[<ffffffff81427f6c>] pci_stop_bus_device+0x8c/0xa0
[<ffffffff8142808a>] pci_stop_and_remove_bus_device_locked+0x1a/0x30
[<ffffffff8143182c>] remove_store+0x7c/0x90
[<ffffffff81526508>] dev_attr_store+0x18/0x30
[<ffffffff81313444>] sysfs_kf_write+0x44/0x60
[<ffffffff81312d7c>] kernfs_fop_write+0x13c/0x1d0
[<ffffffff81279bb7>] __vfs_write+0x37/0x160
[<ffffffff81118c82>] ? rcu_sync_lockdep_assert+0x12/0x60
[<ffffffff8127e3c6>] ? __sb_start_write+0x176/0x260
[<ffffffff8127a3f4>] ? vfs_write+0x184/0x1b0
[<ffffffff8127a325>] vfs_write+0xb5/0x1b0
[<ffffffff810025e0>] ? syscall_trace_enter+0x1d0/0x380
[<ffffffff8127b7e8>] SyS_write+0x58/0xc0
[<ffffffff81002d0a>] do_syscall_64+0x7a/0x230
[<ffffffff817df6c9>] entry_SYSCALL64_slow_path+0x25/0x25

Repro via something like:

> echo 1 > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:3d:00.0/0000:3e:01.0/0000:66:00.0/remove

Switching usb_hcd_pci_remove to use _nort variants prevents the BUG.

Signed-off-by: Nate Dailey <[email protected]>
---
drivers/usb/core/hcd-pci.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
index 7859d738df41..e9e7307028bc 100644
--- a/drivers/usb/core/hcd-pci.c
+++ b/drivers/usb/core/hcd-pci.c
@@ -341,9 +341,9 @@ void usb_hcd_pci_remove(struct pci_dev *dev)
* to test whether the controller hardware has been removed (e.g.,
* cardbus physical eject).
*/
- local_irq_disable();
+ local_irq_disable_nort();
usb_hcd_irq(0, hcd);
- local_irq_enable();
+ local_irq_enable_nort();

/* Note: dev_set_drvdata must be called while holding the rwsem */
if (dev->class == CL_EHCI) {
--
2.11.0


2017-04-25 05:27:15

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH RT] usb: Use _nort in usb_hcd_pci_remove

Hi Nate,

[auto build test ERROR on usb/usb-testing]
[also build test ERROR on v4.11-rc8 next-20170424]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Nate-Dailey/usb-Use-_nort-in-usb_hcd_pci_remove/20170424-214548
base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
config: x86_64-rhel (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64

All errors (new ones prefixed by >>):

drivers/usb//core/hcd-pci.c: In function 'usb_hcd_pci_remove':
>> drivers/usb//core/hcd-pci.c:344:2: error: implicit declaration of function 'local_irq_disable_nort' [-Werror=implicit-function-declaration]
local_irq_disable_nort();
^~~~~~~~~~~~~~~~~~~~~~
>> drivers/usb//core/hcd-pci.c:346:2: error: implicit declaration of function 'local_irq_enable_nort' [-Werror=implicit-function-declaration]
local_irq_enable_nort();
^~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors

vim +/local_irq_disable_nort +344 drivers/usb//core/hcd-pci.c

338 pm_runtime_get_noresume(&dev->dev);
339
340 /* Fake an interrupt request in order to give the driver a chance
341 * to test whether the controller hardware has been removed (e.g.,
342 * cardbus physical eject).
343 */
> 344 local_irq_disable_nort();
345 usb_hcd_irq(0, hcd);
> 346 local_irq_enable_nort();
347
348 /* Note: dev_set_drvdata must be called while holding the rwsem */
349 if (dev->class == CL_EHCI) {

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation


Attachments:
(No filename) (1.78 kB)
.config.gz (37.98 kB)
Download all attachments

2017-04-25 12:02:11

by Steven Rostedt

[permalink] [raw]
Subject: Re: [PATCH RT] usb: Use _nort in usb_hcd_pci_remove

On Tue, 25 Apr 2017 13:26:41 +0800
kbuild test robot <[email protected]> wrote:

> Hi Nate,
>
> [auto build test ERROR on usb/usb-testing]
> [also build test ERROR on v4.11-rc8 next-20170424]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

Hi Fengguang,

You may want to have your bot look at the subject. If there's an "RT"
in the [PATCH ...] portion, then you need to apply the PREEMPT_RT
patch, or use one of the RT git trees for it.

This patch is applied to the RT trees.

Thanks!

-- Steve

>
> url: https://github.com/0day-ci/linux/commits/Nate-Dailey/usb-Use-_nort-in-usb_hcd_pci_remove/20170424-214548
> base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
> config: x86_64-rhel (attached as .config)
> compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
> reproduce:
> # save the attached .config to linux build tree
> make ARCH=x86_64
>
> All errors (new ones prefixed by >>):
>
> drivers/usb//core/hcd-pci.c: In function 'usb_hcd_pci_remove':
> >> drivers/usb//core/hcd-pci.c:344:2: error: implicit declaration of function 'local_irq_disable_nort' [-Werror=implicit-function-declaration]
> local_irq_disable_nort();
> ^~~~~~~~~~~~~~~~~~~~~~
> >> drivers/usb//core/hcd-pci.c:346:2: error: implicit declaration of function 'local_irq_enable_nort' [-Werror=implicit-function-declaration]
> local_irq_enable_nort();
> ^~~~~~~~~~~~~~~~~~~~~
> cc1: some warnings being treated as errors
>
> vim +/local_irq_disable_nort +344 drivers/usb//core/hcd-pci.c
>
> 338 pm_runtime_get_noresume(&dev->dev);
> 339
> 340 /* Fake an interrupt request in order to give the driver a chance
> 341 * to test whether the controller hardware has been removed (e.g.,
> 342 * cardbus physical eject).
> 343 */
> > 344 local_irq_disable_nort();
> 345 usb_hcd_irq(0, hcd);
> > 346 local_irq_enable_nort();
> 347
> 348 /* Note: dev_set_drvdata must be called while holding the rwsem */
> 349 if (dev->class == CL_EHCI) {
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation

2017-04-25 13:02:06

by Philip Li

[permalink] [raw]
Subject: Re: [kbuild-all] [PATCH RT] usb: Use _nort in usb_hcd_pci_remove

On Tue, Apr 25, 2017 at 08:01:54AM -0400, Steven Rostedt wrote:
> On Tue, 25 Apr 2017 13:26:41 +0800
> kbuild test robot <[email protected]> wrote:
>
> > Hi Nate,
> >
> > [auto build test ERROR on usb/usb-testing]
> > [also build test ERROR on v4.11-rc8 next-20170424]
> > [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>
> Hi Fengguang,
>
> You may want to have your bot look at the subject. If there's an "RT"
> in the [PATCH ...] portion, then you need to apply the PREEMPT_RT
> patch, or use one of the RT git trees for it.
>
> This patch is applied to the RT trees.
thanks Steve for the feedback, we will update the logic to handle this situation.

>
> Thanks!
>
> -- Steve
>
> >
> > url: https://github.com/0day-ci/linux/commits/Nate-Dailey/usb-Use-_nort-in-usb_hcd_pci_remove/20170424-214548
> > base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
> > config: x86_64-rhel (attached as .config)
> > compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
> > reproduce:
> > # save the attached .config to linux build tree
> > make ARCH=x86_64
> >
> > All errors (new ones prefixed by >>):
> >
> > drivers/usb//core/hcd-pci.c: In function 'usb_hcd_pci_remove':
> > >> drivers/usb//core/hcd-pci.c:344:2: error: implicit declaration of function 'local_irq_disable_nort' [-Werror=implicit-function-declaration]
> > local_irq_disable_nort();
> > ^~~~~~~~~~~~~~~~~~~~~~
> > >> drivers/usb//core/hcd-pci.c:346:2: error: implicit declaration of function 'local_irq_enable_nort' [-Werror=implicit-function-declaration]
> > local_irq_enable_nort();
> > ^~~~~~~~~~~~~~~~~~~~~
> > cc1: some warnings being treated as errors
> >
> > vim +/local_irq_disable_nort +344 drivers/usb//core/hcd-pci.c
> >
> > 338 pm_runtime_get_noresume(&dev->dev);
> > 339
> > 340 /* Fake an interrupt request in order to give the driver a chance
> > 341 * to test whether the controller hardware has been removed (e.g.,
> > 342 * cardbus physical eject).
> > 343 */
> > > 344 local_irq_disable_nort();
> > 345 usb_hcd_irq(0, hcd);
> > > 346 local_irq_enable_nort();
> > 347
> > 348 /* Note: dev_set_drvdata must be called while holding the rwsem */
> > 349 if (dev->class == CL_EHCI) {
> >
> > ---
> > 0-DAY kernel test infrastructure Open Source Technology Center
> > https://lists.01.org/pipermail/kbuild-all Intel Corporation
>
> _______________________________________________
> kbuild-all mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/kbuild-all