From: Michal Pecio <michal.pecio@gmail.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Alan Stern <stern@rowland.harvard.edu>, linux-usb@vger.kernel.org
Subject: [PATCH] USB: document requirements of usb_set_interface on disconnection
Date: Sun, 18 Feb 2024 00:54:36 +0100 [thread overview]
Message-ID: <20240218005436.46a4ddca@foxbook> (raw)
A call to usb_set_interface() crashes if the device is deallocated
concurrently, such as due to physical removal or serious IO error.
It could also interfere with other drivers using the device if the
current driver is unbound before the call is done.
Document the need to delay driver unbinding until this call returns,
which solves both issues.
Explicitly mention finishing pending operations in the documentation
of the driver disconnect callback.
Signed-off-by: Michal Pecio <michal.pecio@gmail.com>
---
Documentation/driver-api/usb/callbacks.rst | 4 +++-
drivers/usb/core/message.c | 3 ++-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/Documentation/driver-api/usb/callbacks.rst b/Documentation/driver-api/usb/callbacks.rst
index 2b80cf54bcc3..c7fa55375e9a 100644
--- a/Documentation/driver-api/usb/callbacks.rst
+++ b/Documentation/driver-api/usb/callbacks.rst
@@ -100,7 +100,9 @@ This callback is a signal to break any connection with an interface.
You are not allowed any IO to a device after returning from this
callback. You also may not do any other operation that may interfere
with another driver bound the interface, eg. a power management
-operation.
+operation. Outstanding operations on the device must complete or be
+aborted before this callback returns.
+
If you are called due to a physical disconnection, all your URBs will be
killed by usbcore. Note that in this case disconnect will be called some
time after the physical disconnection. Thus your driver must be prepared
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 077dfe48d01c..08acebd51823 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -1516,7 +1516,8 @@ void usb_enable_interface(struct usb_device *dev,
* This call is synchronous, and may not be used in an interrupt context.
* Also, drivers must not change altsettings while urbs are scheduled for
* endpoints in that interface; all such urbs must first be completed
- * (perhaps forced by unlinking).
+ * (perhaps forced by unlinking). If a thread in your driver uses this call,
+ * make sure your disconnect() method can wait for it to complete.
*
* Return: Zero on success, or else the status code returned by the
* underlying usb_control_msg() call.
--
2.43.0
next reply other threads:[~2024-02-17 23:54 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-17 23:54 Michal Pecio [this message]
2024-02-18 2:48 ` [PATCH] USB: document requirements of usb_set_interface on disconnection Alan Stern
2024-02-18 8:25 ` [PATCH v2] USB: document some API requirements " Michal Pecio
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=20240218005436.46a4ddca@foxbook \
--to=michal.pecio@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-usb@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
/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 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).