All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] usb: ucsi: huawei_gaokun: move typec_altmode off stack
@ 2026-06-18 14:33 Arnd Bergmann
  2026-06-18 15:21 ` Pengyu Luo
  0 siblings, 1 reply; 2+ messages in thread
From: Arnd Bergmann @ 2026-06-18 14:33 UTC (permalink / raw)
  To: Pengyu Luo, Heikki Krogerus, Greg Kroah-Hartman
  Cc: Arnd Bergmann, Duoming Zhou, linux-usb, linux-kernel

From: Arnd Bergmann <arnd@arndb.de>

The typec_altmode structure contains a 'struct device' object
that cannot be allocated on the stack because of its size, even
when ignoring the lifetime rules:

drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c:326:13: error: stack frame size (1456) exceeds limit (1280) in 'gaokun_ucsi_usb_notify_ind' [-Werror,-Wframe-larger-than]
  326 | static void gaokun_ucsi_usb_notify_ind(struct gaokun_ucsi *uec)

Since the altmode is always associated with a port here, move
it into the port object and avoid at least the stack allocation
issue.

Fixes: 1c2b66a7d725 ("usb: ucsi: huawei_gaokun: support mode switching")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
This is probably not the fix we want, as it still leaves an uninitialized
device object in the structure, but it illustrates the issue and
fixing it like this has no immediate downsides.

Please check if you want this as a hotfix for the moment, or can provide
a more elaborate fix. Reverting 1c2b66a7d725 may also be an option.
---
 drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c b/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c
index ad669d2f8b9c..ca1b534cb183 100644
--- a/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c
+++ b/drivers/usb/typec/ucsi/ucsi_huawei_gaokun.c
@@ -84,6 +84,8 @@ struct gaokun_ucsi_port {
 	struct auxiliary_device *bridge;
 
 	struct typec_mux *typec_mux;
+	struct typec_mux_state state;
+	struct typec_altmode dp_alt;
 
 	int idx;
 	enum gaokun_ucsi_ccx ccx;
@@ -292,24 +294,22 @@ static int gaokun_ucsi_refresh(struct gaokun_ucsi *uec)
 static void gaokun_ucsi_handle_usb_mode(struct gaokun_ucsi_port *port)
 {
 	struct gaokun_ucsi *uec = port->ucsi;
-	struct typec_mux_state state = {};
-	struct typec_altmode dp_alt = {};
 	int idx = port->idx, ret;
 
 	/*
 	 * For every typec port on this platform, the only mode-switch is
 	 * controlled by its qmp combo phy which consumes svid and mode only.
 	 */
-	dp_alt.svid = port->svid;
-	state.mode = port->mode;
-	state.alt = &dp_alt;
+	port->dp_alt.svid = port->svid;
+	port->state.mode = port->mode;
+	port->state.alt = &port->dp_alt;
 
 	if (idx >= uec->num_ports) {
 		dev_warn(uec->dev, "altmode port out of range: %d\n", idx);
 		return;
 	}
 
-	ret = typec_mux_set(port->typec_mux, &state);
+	ret = typec_mux_set(port->typec_mux, &port->state);
 	if (ret)
 		dev_err(uec->dev, "failed to set mux %d\n", ret);
 
-- 
2.39.5


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

* Re: [PATCH] usb: ucsi: huawei_gaokun: move typec_altmode off stack
  2026-06-18 14:33 [PATCH] usb: ucsi: huawei_gaokun: move typec_altmode off stack Arnd Bergmann
@ 2026-06-18 15:21 ` Pengyu Luo
  0 siblings, 0 replies; 2+ messages in thread
From: Pengyu Luo @ 2026-06-18 15:21 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Pengyu Luo, Heikki Krogerus, Greg Kroah-Hartman, Arnd Bergmann,
	Duoming Zhou, linux-usb, linux-kernel

On Thu, 18 Jun 2026 16:33:14 +0200, Arnd Bergmann <arnd@kernel.org> wrote:
> usb: ucsi: huawei_gaokun: move typec_altmode off stack

Reviewed-by: Pengyu Luo <mitltlatltl@gmail.com>

-- 
Best wishes,
Pengyu


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

end of thread, other threads:[~2026-06-18 15:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-18 14:33 [PATCH] usb: ucsi: huawei_gaokun: move typec_altmode off stack Arnd Bergmann
2026-06-18 15:21 ` Pengyu Luo

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.