From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
patches@lists.linux.dev, Todd Brandt <todd.e.brandt@intel.com>,
Heikki Krogerus <heikki.krogerus@linux.intel.com>
Subject: [PATCH 6.0 22/28] usb: typec: ucsi: Resume in separate work
Date: Mon, 19 Dec 2022 20:23:09 +0100 [thread overview]
Message-ID: <20221219182945.149297846@linuxfoundation.org> (raw)
In-Reply-To: <20221219182944.179389009@linuxfoundation.org>
From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
commit e0dced9c7d4763fd97c86a13902d135f03cc42eb upstream.
It can take more than one second to check each connector
when the system is resumed. So if you have, say, eight
connectors, it may take eight seconds for ucsi_resume() to
finish. That's a bit too much.
This will modify ucsi_resume() so that it schedules a work
where the interface is actually resumed instead of checking
the connectors directly. The connections will also be
checked in separate tasks which are queued for each connector
separately.
Link: https://bugzilla.kernel.org/show_bug.cgi?id=216706
Fixes: 99f6d4361113 ("usb: typec: ucsi: Check the connection on resume")
Cc: <stable@vger.kernel.org>
Reported-by: Todd Brandt <todd.e.brandt@intel.com>
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://lore.kernel.org/r/20221123093021.25981-1-heikki.krogerus@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/typec/ucsi/ucsi.c | 17 +++++++++++++----
drivers/usb/typec/ucsi/ucsi.h | 1 +
2 files changed, 14 insertions(+), 4 deletions(-)
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
@@ -1270,8 +1270,9 @@ err:
return ret;
}
-int ucsi_resume(struct ucsi *ucsi)
+static void ucsi_resume_work(struct work_struct *work)
{
+ struct ucsi *ucsi = container_of(work, struct ucsi, resume_work);
struct ucsi_connector *con;
u64 command;
int ret;
@@ -1279,15 +1280,21 @@ int ucsi_resume(struct ucsi *ucsi)
/* Restore UCSI notification enable mask after system resume */
command = UCSI_SET_NOTIFICATION_ENABLE | ucsi->ntfy;
ret = ucsi_send_command(ucsi, command, NULL, 0);
- if (ret < 0)
- return ret;
+ if (ret < 0) {
+ dev_err(ucsi->dev, "failed to re-enable notifications (%d)\n", ret);
+ return;
+ }
for (con = ucsi->connector; con->port; con++) {
mutex_lock(&con->lock);
- ucsi_check_connection(con);
+ ucsi_partner_task(con, ucsi_check_connection, 1, 0);
mutex_unlock(&con->lock);
}
+}
+int ucsi_resume(struct ucsi *ucsi)
+{
+ queue_work(system_long_wq, &ucsi->resume_work);
return 0;
}
EXPORT_SYMBOL_GPL(ucsi_resume);
@@ -1347,6 +1354,7 @@ struct ucsi *ucsi_create(struct device *
if (!ucsi)
return ERR_PTR(-ENOMEM);
+ INIT_WORK(&ucsi->resume_work, ucsi_resume_work);
INIT_DELAYED_WORK(&ucsi->work, ucsi_init_work);
mutex_init(&ucsi->ppm_lock);
ucsi->dev = dev;
@@ -1401,6 +1409,7 @@ void ucsi_unregister(struct ucsi *ucsi)
/* Make sure that we are not in the middle of driver initialization */
cancel_delayed_work_sync(&ucsi->work);
+ cancel_work_sync(&ucsi->resume_work);
/* Disable notifications */
ucsi->ops->async_write(ucsi, UCSI_CONTROL, &cmd, sizeof(cmd));
--- a/drivers/usb/typec/ucsi/ucsi.h
+++ b/drivers/usb/typec/ucsi/ucsi.h
@@ -287,6 +287,7 @@ struct ucsi {
struct ucsi_capability cap;
struct ucsi_connector *connector;
+ struct work_struct resume_work;
struct delayed_work work;
int work_count;
#define UCSI_ROLE_SWITCH_RETRY_PER_HZ 10
next prev parent reply other threads:[~2022-12-19 19:26 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-19 19:22 [PATCH 6.0 00/28] 6.0.15-rc1 review Greg Kroah-Hartman
2022-12-19 19:22 ` [PATCH 6.0 01/28] PCI: mt7621: Add sentinel to quirks table Greg Kroah-Hartman
2022-12-19 19:22 ` [PATCH 6.0 02/28] kallsyms: Make module_kallsyms_on_each_symbol generally available Greg Kroah-Hartman
2022-12-19 19:22 ` [PATCH 6.0 03/28] ftrace: Add support to resolve module symbols in ftrace_lookup_symbols Greg Kroah-Hartman
2022-12-19 19:22 ` [PATCH 6.0 04/28] bpf: Rename __bpf_kprobe_multi_cookie_cmp to bpf_kprobe_multi_addrs_cmp Greg Kroah-Hartman
2022-12-19 19:22 ` [PATCH 6.0 05/28] bpf: Take module reference on kprobe_multi link Greg Kroah-Hartman
2022-12-19 19:22 ` [PATCH 6.0 06/28] selftests/bpf: Add load_kallsyms_refresh function Greg Kroah-Hartman
2022-12-19 19:22 ` [PATCH 6.0 07/28] selftests/bpf: Add bpf_testmod_fentry_* functions Greg Kroah-Hartman
2022-12-19 19:22 ` [PATCH 6.0 08/28] selftests/bpf: Add kprobe_multi check to module attach test Greg Kroah-Hartman
2022-12-19 19:22 ` [PATCH 6.0 09/28] selftests/bpf: Add kprobe_multi kmod attach api tests Greg Kroah-Hartman
2022-12-19 19:22 ` [PATCH 6.0 10/28] udf: Discard preallocation before extending file with a hole Greg Kroah-Hartman
2022-12-19 19:22 ` [PATCH 6.0 11/28] udf: Fix preallocation discarding at indirect extent boundary Greg Kroah-Hartman
2022-12-19 19:22 ` [PATCH 6.0 12/28] udf: Do not bother looking for prealloc extents if i_lenExtents matches i_size Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 13/28] udf: Fix extending file within last block Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 14/28] usb: gadget: uvc: Prevent buffer overflow in setup handler Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 15/28] USB: serial: option: add Quectel EM05-G modem Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 16/28] USB: serial: cp210x: add Kamstrup RF sniffer PIDs Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 17/28] USB: serial: f81232: fix division by zero on line-speed change Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 18/28] USB: serial: f81534: " Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 19/28] ALSA: hda/realtek: fix mute/micmute LEDs for a HP ProBook Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 20/28] xhci: Apply XHCI_RESET_TO_DEFAULT quirk to ADL-N Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 21/28] igb: Initialize mailbox message for VF reset Greg Kroah-Hartman
2022-12-19 19:23 ` Greg Kroah-Hartman [this message]
2022-12-19 19:23 ` [PATCH 6.0 23/28] usb: dwc3: pci: Update PCIe device ID for USB3 controller on CPU sub-system for Raptor Lake Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 24/28] KEYS: encrypted: fix key instantiation with user-provided data Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 25/28] usb: ulpi: defer ulpi_register on ulpi_read_id timeout Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 26/28] Bluetooth: L2CAP: Fix u8 overflow Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 27/28] selftests: net: Use "grep -E" instead of "egrep" Greg Kroah-Hartman
2022-12-19 19:23 ` [PATCH 6.0 28/28] net: loopback: use NET_NAME_PREDICTABLE for name_assign_type Greg Kroah-Hartman
2022-12-19 23:55 ` [PATCH 6.0 00/28] 6.0.15-rc1 review Florian Fainelli
2022-12-20 0:16 ` Shuah Khan
2022-12-20 4:44 ` Bagas Sanjaya
2022-12-20 6:41 ` Naresh Kamboju
2022-12-20 11:21 ` Sudip Mukherjee (Codethink)
2022-12-20 14:49 ` Guenter Roeck
2022-12-20 15:33 ` Guenter Roeck
2022-12-21 1:07 ` Guenter Roeck
2022-12-20 17:44 ` Ron Economos
2022-12-20 17:50 ` Jon Hunter
2022-12-21 1:16 ` Slade Watkins
2022-12-21 16:04 ` Justin Forbes
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=20221219182945.149297846@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=patches@lists.linux.dev \
--cc=stable@vger.kernel.org \
--cc=todd.e.brandt@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox