linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] usb: xhci: tegra: fix sleep in atomic call
@ 2023-03-20  7:40 Haotien Hsu
  2023-03-20  8:09 ` Greg Kroah-Hartman
  0 siblings, 1 reply; 4+ messages in thread
From: Haotien Hsu @ 2023-03-20  7:40 UTC (permalink / raw)
  To: Mathias Nyman, Greg Kroah-Hartman, Thierry Reding,
	Jonathan Hunter, Philipp Zabel, linux-usb, linux-tegra,
	linux-kernel
  Cc: JC Kuo, Wayne Chang, Haotien Hsu

From: Wayne Chang <waynec@nvidia.com>

When we set the OTG port to Host mode, we observed the following splat:
[  167.057718] BUG: sleeping function called from invalid context at
include/linux/sched/mm.h:229
[  167.057872] Workqueue: events tegra_xusb_usb_phy_work
[  167.057954] Call trace:
[  167.057962]  dump_backtrace+0x0/0x210
[  167.057996]  show_stack+0x30/0x50
[  167.058020]  dump_stack_lvl+0x64/0x84
[  167.058065]  dump_stack+0x14/0x34
[  167.058100]  __might_resched+0x144/0x180
[  167.058140]  __might_sleep+0x64/0xd0
[  167.058171]  slab_pre_alloc_hook.constprop.0+0xa8/0x110
[  167.058202]  __kmalloc_track_caller+0x74/0x2b0
[  167.058233]  kvasprintf+0xa4/0x190
[  167.058261]  kasprintf+0x58/0x90
[  167.058285]  tegra_xusb_find_port_node.isra.0+0x58/0xd0
[  167.058334]  tegra_xusb_find_port+0x38/0xa0
[  167.058380]  tegra_xusb_padctl_get_usb3_companion+0x38/0xd0
[  167.058430]  tegra_xhci_id_notify+0x8c/0x1e0
[  167.058473]  notifier_call_chain+0x88/0x100
[  167.058506]  atomic_notifier_call_chain+0x44/0x70
[  167.058537]  tegra_xusb_usb_phy_work+0x60/0xd0
[  167.058581]  process_one_work+0x1dc/0x4c0
[  167.058618]  worker_thread+0x54/0x410
[  167.058650]  kthread+0x188/0x1b0
[  167.058672]  ret_from_fork+0x10/0x20

The function tegra_xusb_padctl_get_usb3_companion eventually calls
tegra_xusb_find_port and this in turn calls kasprintf which might sleep
and so cannot be called from an atomic context.

Fix this by moving the call to tegra_xusb_padctl_get_usb3_companion to
the tegra_xhci_id_work function where it is really needed.

Signed-off-by: Wayne Chang <waynec@nvidia.com>
Signed-off-by: Haotien Hsu <haotienh@nvidia.com>
---
 drivers/usb/host/xhci-tegra.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c
index 1ff22f675930..af0185bacc70 100644
--- a/drivers/usb/host/xhci-tegra.c
+++ b/drivers/usb/host/xhci-tegra.c
@@ -2,7 +2,7 @@
 /*
  * NVIDIA Tegra xHCI host controller driver
  *
- * Copyright (c) 2014-2020, NVIDIA CORPORATION. All rights reserved.
+ * Copyright (c) 2014-2023, NVIDIA CORPORATION. All rights reserved.
  * Copyright (C) 2014 Google, Inc.
  */
 
@@ -1360,6 +1360,10 @@ static void tegra_xhci_id_work(struct work_struct *work)
 
 	mutex_unlock(&tegra->lock);
 
+	tegra->otg_usb3_port = tegra_xusb_padctl_get_usb3_companion(
+							tegra->padctl,
+							tegra->otg_usb2_port);
+
 	if (tegra->host_mode) {
 		/* switch to host mode */
 		if (tegra->otg_usb3_port >= 0) {
@@ -1474,9 +1478,6 @@ static int tegra_xhci_id_notify(struct notifier_block *nb,
 	}
 
 	tegra->otg_usb2_port = tegra_xusb_get_usb2_port(tegra, usbphy);
-	tegra->otg_usb3_port = tegra_xusb_padctl_get_usb3_companion(
-							tegra->padctl,
-							tegra->otg_usb2_port);
 
 	tegra->host_mode = (usbphy->last_event == USB_EVENT_ID) ? true : false;
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] usb: xhci: tegra: fix sleep in atomic call
  2023-03-20  7:40 [PATCH] usb: xhci: tegra: fix sleep in atomic call Haotien Hsu
@ 2023-03-20  8:09 ` Greg Kroah-Hartman
  2023-03-20  9:54   ` Haotien Hsu
  0 siblings, 1 reply; 4+ messages in thread
From: Greg Kroah-Hartman @ 2023-03-20  8:09 UTC (permalink / raw)
  To: Haotien Hsu
  Cc: Mathias Nyman, Thierry Reding, Jonathan Hunter, Philipp Zabel,
	linux-usb, linux-tegra, linux-kernel, JC Kuo, Wayne Chang

On Mon, Mar 20, 2023 at 03:40:28PM +0800, Haotien Hsu wrote:
> From: Wayne Chang <waynec@nvidia.com>
> 
> When we set the OTG port to Host mode, we observed the following splat:
> [  167.057718] BUG: sleeping function called from invalid context at
> include/linux/sched/mm.h:229
> [  167.057872] Workqueue: events tegra_xusb_usb_phy_work
> [  167.057954] Call trace:
> [  167.057962]  dump_backtrace+0x0/0x210
> [  167.057996]  show_stack+0x30/0x50
> [  167.058020]  dump_stack_lvl+0x64/0x84
> [  167.058065]  dump_stack+0x14/0x34
> [  167.058100]  __might_resched+0x144/0x180
> [  167.058140]  __might_sleep+0x64/0xd0
> [  167.058171]  slab_pre_alloc_hook.constprop.0+0xa8/0x110
> [  167.058202]  __kmalloc_track_caller+0x74/0x2b0
> [  167.058233]  kvasprintf+0xa4/0x190
> [  167.058261]  kasprintf+0x58/0x90
> [  167.058285]  tegra_xusb_find_port_node.isra.0+0x58/0xd0
> [  167.058334]  tegra_xusb_find_port+0x38/0xa0
> [  167.058380]  tegra_xusb_padctl_get_usb3_companion+0x38/0xd0
> [  167.058430]  tegra_xhci_id_notify+0x8c/0x1e0
> [  167.058473]  notifier_call_chain+0x88/0x100
> [  167.058506]  atomic_notifier_call_chain+0x44/0x70
> [  167.058537]  tegra_xusb_usb_phy_work+0x60/0xd0
> [  167.058581]  process_one_work+0x1dc/0x4c0
> [  167.058618]  worker_thread+0x54/0x410
> [  167.058650]  kthread+0x188/0x1b0
> [  167.058672]  ret_from_fork+0x10/0x20
> 
> The function tegra_xusb_padctl_get_usb3_companion eventually calls
> tegra_xusb_find_port and this in turn calls kasprintf which might sleep
> and so cannot be called from an atomic context.
> 
> Fix this by moving the call to tegra_xusb_padctl_get_usb3_companion to
> the tegra_xhci_id_work function where it is really needed.
> 
> Signed-off-by: Wayne Chang <waynec@nvidia.com>
> Signed-off-by: Haotien Hsu <haotienh@nvidia.com>

What commit id does this fix?  And does it need to be backported to
older kernels?

> ---
>  drivers/usb/host/xhci-tegra.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c
> index 1ff22f675930..af0185bacc70 100644
> --- a/drivers/usb/host/xhci-tegra.c
> +++ b/drivers/usb/host/xhci-tegra.c
> @@ -2,7 +2,7 @@
>  /*
>   * NVIDIA Tegra xHCI host controller driver
>   *
> - * Copyright (c) 2014-2020, NVIDIA CORPORATION. All rights reserved.
> + * Copyright (c) 2014-2023, NVIDIA CORPORATION. All rights reserved.

Please submit copyright updates separately, showing that there really
was copyright updates during those years as that is independent of this
fix and does not need to be backported anywhere.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] usb: xhci: tegra: fix sleep in atomic call
  2023-03-20  8:09 ` Greg Kroah-Hartman
@ 2023-03-20  9:54   ` Haotien Hsu
  2023-03-20 10:02     ` gregkh
  0 siblings, 1 reply; 4+ messages in thread
From: Haotien Hsu @ 2023-03-20  9:54 UTC (permalink / raw)
  To: gregkh
  Cc: linux-usb, thierry.reding, Jonathan Hunter, linux-tegra,
	Wayne Chang, linux-kernel, mathias.nyman, p.zabel, Jui Chang Kuo

On Mon, 2023-03-20 at 09:09 +0100, Greg Kroah-Hartman wrote:
> External email: Use caution opening links or attachments
> 
> 
> On Mon, Mar 20, 2023 at 03:40:28PM +0800, Haotien Hsu wrote:
> > From: Wayne Chang <waynec@nvidia.com>
> > 
> > When we set the OTG port to Host mode, we observed the following
> > splat:
> > [  167.057718] BUG: sleeping function called from invalid context
> > at
> > include/linux/sched/mm.h:229
> > [  167.057872] Workqueue: events tegra_xusb_usb_phy_work
> > [  167.057954] Call trace:
> > [  167.057962]  dump_backtrace+0x0/0x210
> > [  167.057996]  show_stack+0x30/0x50
> > [  167.058020]  dump_stack_lvl+0x64/0x84
> > [  167.058065]  dump_stack+0x14/0x34
> > [  167.058100]  __might_resched+0x144/0x180
> > [  167.058140]  __might_sleep+0x64/0xd0
> > [  167.058171]  slab_pre_alloc_hook.constprop.0+0xa8/0x110
> > [  167.058202]  __kmalloc_track_caller+0x74/0x2b0
> > [  167.058233]  kvasprintf+0xa4/0x190
> > [  167.058261]  kasprintf+0x58/0x90
> > [  167.058285]  tegra_xusb_find_port_node.isra.0+0x58/0xd0
> > [  167.058334]  tegra_xusb_find_port+0x38/0xa0
> > [  167.058380]  tegra_xusb_padctl_get_usb3_companion+0x38/0xd0
> > [  167.058430]  tegra_xhci_id_notify+0x8c/0x1e0
> > [  167.058473]  notifier_call_chain+0x88/0x100
> > [  167.058506]  atomic_notifier_call_chain+0x44/0x70
> > [  167.058537]  tegra_xusb_usb_phy_work+0x60/0xd0
> > [  167.058581]  process_one_work+0x1dc/0x4c0
> > [  167.058618]  worker_thread+0x54/0x410
> > [  167.058650]  kthread+0x188/0x1b0
> > [  167.058672]  ret_from_fork+0x10/0x20
> > 
> > The function tegra_xusb_padctl_get_usb3_companion eventually calls
> > tegra_xusb_find_port and this in turn calls kasprintf which might
> > sleep
> > and so cannot be called from an atomic context.
> > 
> > Fix this by moving the call to tegra_xusb_padctl_get_usb3_companion
> > to
> > the tegra_xhci_id_work function where it is really needed.
> > 
> > Signed-off-by: Wayne Chang <waynec@nvidia.com>
> > Signed-off-by: Haotien Hsu <haotienh@nvidia.com>
> 
> What commit id does this fix?  And does it need to be backported to
> older kernels?
> 

Sorry for missing "Fixes:" and "Cc: stable" lines.

> > ---
> >  drivers/usb/host/xhci-tegra.c | 9 +++++----
> >  1 file changed, 5 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-
> > tegra.c
> > index 1ff22f675930..af0185bacc70 100644
> > --- a/drivers/usb/host/xhci-tegra.c
> > +++ b/drivers/usb/host/xhci-tegra.c
> > @@ -2,7 +2,7 @@
> >  /*
> >   * NVIDIA Tegra xHCI host controller driver
> >   *
> > - * Copyright (c) 2014-2020, NVIDIA CORPORATION. All rights
> > reserved.
> > + * Copyright (c) 2014-2023, NVIDIA CORPORATION. All rights
> > reserved.
> 
> Please submit copyright updates separately, showing that there really
> was copyright updates during those years as that is independent of
> this
> fix and does not need to be backported anywhere.
> 

Thanks for the detailed information!

> thanks,
> 
> greg k-h

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] usb: xhci: tegra: fix sleep in atomic call
  2023-03-20  9:54   ` Haotien Hsu
@ 2023-03-20 10:02     ` gregkh
  0 siblings, 0 replies; 4+ messages in thread
From: gregkh @ 2023-03-20 10:02 UTC (permalink / raw)
  To: Haotien Hsu
  Cc: linux-usb, thierry.reding, Jonathan Hunter, linux-tegra,
	Wayne Chang, linux-kernel, mathias.nyman, p.zabel, Jui Chang Kuo

On Mon, Mar 20, 2023 at 09:54:28AM +0000, Haotien Hsu wrote:
> On Mon, 2023-03-20 at 09:09 +0100, Greg Kroah-Hartman wrote:
> > External email: Use caution opening links or attachments
> > 
> > 
> > On Mon, Mar 20, 2023 at 03:40:28PM +0800, Haotien Hsu wrote:
> > > From: Wayne Chang <waynec@nvidia.com>
> > > 
> > > When we set the OTG port to Host mode, we observed the following
> > > splat:
> > > [  167.057718] BUG: sleeping function called from invalid context
> > > at
> > > include/linux/sched/mm.h:229
> > > [  167.057872] Workqueue: events tegra_xusb_usb_phy_work
> > > [  167.057954] Call trace:
> > > [  167.057962]  dump_backtrace+0x0/0x210
> > > [  167.057996]  show_stack+0x30/0x50
> > > [  167.058020]  dump_stack_lvl+0x64/0x84
> > > [  167.058065]  dump_stack+0x14/0x34
> > > [  167.058100]  __might_resched+0x144/0x180
> > > [  167.058140]  __might_sleep+0x64/0xd0
> > > [  167.058171]  slab_pre_alloc_hook.constprop.0+0xa8/0x110
> > > [  167.058202]  __kmalloc_track_caller+0x74/0x2b0
> > > [  167.058233]  kvasprintf+0xa4/0x190
> > > [  167.058261]  kasprintf+0x58/0x90
> > > [  167.058285]  tegra_xusb_find_port_node.isra.0+0x58/0xd0
> > > [  167.058334]  tegra_xusb_find_port+0x38/0xa0
> > > [  167.058380]  tegra_xusb_padctl_get_usb3_companion+0x38/0xd0
> > > [  167.058430]  tegra_xhci_id_notify+0x8c/0x1e0
> > > [  167.058473]  notifier_call_chain+0x88/0x100
> > > [  167.058506]  atomic_notifier_call_chain+0x44/0x70
> > > [  167.058537]  tegra_xusb_usb_phy_work+0x60/0xd0
> > > [  167.058581]  process_one_work+0x1dc/0x4c0
> > > [  167.058618]  worker_thread+0x54/0x410
> > > [  167.058650]  kthread+0x188/0x1b0
> > > [  167.058672]  ret_from_fork+0x10/0x20
> > > 
> > > The function tegra_xusb_padctl_get_usb3_companion eventually calls
> > > tegra_xusb_find_port and this in turn calls kasprintf which might
> > > sleep
> > > and so cannot be called from an atomic context.
> > > 
> > > Fix this by moving the call to tegra_xusb_padctl_get_usb3_companion
> > > to
> > > the tegra_xhci_id_work function where it is really needed.
> > > 
> > > Signed-off-by: Wayne Chang <waynec@nvidia.com>
> > > Signed-off-by: Haotien Hsu <haotienh@nvidia.com>
> > 
> > What commit id does this fix?  And does it need to be backported to
> > older kernels?
> > 
> 
> Sorry for missing "Fixes:" and "Cc: stable" lines.

What should be listed for the Fixes line?  Please add it when you
resubmit it.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-03-20 10:03 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-20  7:40 [PATCH] usb: xhci: tegra: fix sleep in atomic call Haotien Hsu
2023-03-20  8:09 ` Greg Kroah-Hartman
2023-03-20  9:54   ` Haotien Hsu
2023-03-20 10:02     ` gregkh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).