From: Michael Trimarchi <michael@amarulasolutions.com>
To: Thinh Nguyen <Thinh.Nguyen@synopsys.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-amarula@amarulasolutions.com,
Michael Trimarchi <michael@amarulasolutions.com>
Subject: [PATCH] usb: dwc3: gadget: Fix suspend/resume warning when no-gadget is connected
Date: Sun, 25 Feb 2024 19:13:09 +0100 [thread overview]
Message-ID: <20240225181309.1697245-1-michael@amarulasolutions.com> (raw)
This patch restore the logic but protects the variable using a spinlock
without moving the code
[ 45.597274] dwc3 31000000.usb: wait for SETUP phase timed out
[ 45.599140] dwc3 31000000.usb: failed to set STALL on ep0out
[ 45.601069] ------------[ cut here ]------------
[ 45.601073] WARNING: CPU: 0 PID: 150 at drivers/usb/dwc3/ep0.c:289 dwc3_ep0_out_start+0xcc/0xd4
[ 45.601102] Modules linked in: cfg80211 rfkill ipv6 rpmsg_ctrl rpmsg_char crct10dif_ce rti_wdt k3_j72xx_bandgap rtc_ti_k3 omap_mailbox sa2ul authenc [last unloaded: ti_k3_r5_remoteproc]
[ 45.601151] CPU: 0 PID: 150 Comm: sh Not tainted 6.8.0-rc5 #1
[ 45.601159] Hardware name: BSH - CCM-M3 (DT)
[ 45.601164] pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 45.601172] pc : dwc3_ep0_out_start+0xcc/0xd4
[ 45.601179] lr : dwc3_ep0_out_start+0x50/0xd4
[ 45.601186] sp : ffff8000832739e0
[ 45.601189] x29: ffff8000832739e0 x28: ffff800082a21000 x27: ffff8000808dc630
[ 45.601200] x26: 0000000000000002 x25: ffff800082530a44 x24: 0000000000000000
[ 45.601210] x23: ffff000000e079a0 x22: ffff000000e07a68 x21: 0000000000000001
[ 45.601219] x20: ffff000000e07880 x19: ffff000000e07880 x18: 0000000000000040
[ 45.601229] x17: ffff7fff8e1ce000 x16: ffff800080000000 x15: fffffffffffe5260
[ 45.601239] x14: 0000000000000000 x13: 206e6f204c4c4154 x12: 5320746573206f74
[ 45.601249] x11: 0000000000000001 x10: 000000000000000a x9 : ffff800083273930
[ 45.601259] x8 : 000000000000000a x7 : ffffffffffff3f0c x6 : ffffffffffff3f00
[ 45.601268] x5 : ffffffffffff3f0c x4 : 0000000000000000 x3 : 0000000000000000
[ 45.601278] x2 : 0000000000000000 x1 : ffff000004e7e600 x0 : 00000000ffffff92
[ 45.601289] Call trace:
[ 45.601293] dwc3_ep0_out_start+0xcc/0xd4
[ 45.601301] dwc3_ep0_stall_and_restart+0x98/0xbc
[ 45.601309] dwc3_ep0_reset_state+0x5c/0x88
[ 45.601315] dwc3_gadget_soft_disconnect+0x144/0x160
[ 45.601323] dwc3_gadget_suspend+0x18/0xb0
[ 45.601329] dwc3_suspend_common+0x5c/0x18c
[ 45.601341] dwc3_suspend+0x20/0x44
[ 45.601350] platform_pm_suspend+0x2c/0x6c
[ 45.601360] __device_suspend+0x10c/0x34c
[ 45.601372] dpm_suspend+0x1a8/0x240
[ 45.601382] dpm_suspend_start+0x80/0x9c
[ 45.601391] suspend_devices_and_enter+0x1c4/0x584
[ 45.601402] pm_suspend+0x1b0/0x264
[ 45.601408] state_store+0x80/0xec
[ 45.601415] kobj_attr_store+0x18/0x2c
[ 45.601426] sysfs_kf_write+0x44/0x54
[ 45.601434] kernfs_fop_write_iter+0x120/0x1ec
[ 45.601445] vfs_write+0x23c/0x358
[ 45.601458] ksys_write+0x70/0x104
[ 45.601467] __arm64_sys_write+0x1c/0x28
[ 45.601477] invoke_syscall+0x48/0x114
[ 45.601488] el0_svc_common.constprop.0+0x40/0xe0
[ 45.601498] do_el0_svc+0x1c/0x28
[ 45.601506] el0_svc+0x34/0xb8
[ 45.601516] el0t_64_sync_handler+0x100/0x12c
[ 45.601522] el0t_64_sync+0x190/0x194
[ 45.601531] ---[ end trace 0000000000000000 ]---
[ 45.608794] Disabling non-boot CPUs ...
[ 45.611029] psci: CPU1 killed (polled 0 ms)
[ 45.611837] Enabling non-boot CPUs ...
[ 45.612247] Detected VIPT I-cache on CPU1
Tested on a am62x board
Fixes: 61a348857e86 ("usb: dwc3: gadget: Fix NULL pointer dereference in dwc3_gadget_suspend)
Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
---
drivers/usb/dwc3/gadget.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 4c8dd6724678..4c88e44127b5 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -4703,13 +4703,19 @@ int dwc3_gadget_suspend(struct dwc3 *dwc)
unsigned long flags;
int ret;
+ spin_lock_irqsave(&dwc->lock, flags);
+ if (!dwc->gadget_driver) {
+ spin_unlock_irqrestore(&dwc->lock, flags);
+ return 0;
+ }
+ spin_unlock_irqrestore(&dwc->lock, flags);
+
ret = dwc3_gadget_soft_disconnect(dwc);
if (ret)
goto err;
spin_lock_irqsave(&dwc->lock, flags);
- if (dwc->gadget_driver)
- dwc3_disconnect_gadget(dwc);
+ dwc3_disconnect_gadget(dwc);
spin_unlock_irqrestore(&dwc->lock, flags);
return 0;
--
2.40.1
next reply other threads:[~2024-02-25 18:13 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-25 18:13 Michael Trimarchi [this message]
2024-02-26 6:03 ` [PATCH] usb: dwc3: gadget: Fix suspend/resume warning when no-gadget is connected Greg Kroah-Hartman
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=20240225181309.1697245-1-michael@amarulasolutions.com \
--to=michael@amarulasolutions.com \
--cc=Thinh.Nguyen@synopsys.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-amarula@amarulasolutions.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/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.