All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Elson Roy Serrao <quic_eserrao@quicinc.com>
Cc: gregkh@linuxfoundation.org, xu.yang_2@nxp.com,
	linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
	stable@vger.kernel.org
Subject: Re: [PATCH v2] usb: roles: set switch registered flag early on
Date: Thu, 13 Feb 2025 13:25:38 +0200	[thread overview]
Message-ID: <Z63Wsng27QfhyjLd@kuha.fi.intel.com> (raw)
In-Reply-To: <20250206193950.22421-1-quic_eserrao@quicinc.com>

On Thu, Feb 06, 2025 at 11:39:50AM -0800, Elson Roy Serrao wrote:
> The role switch registration and set_role() can happen in parallel as they
> are invoked independent of each other. There is a possibility that a driver
> might spend significant amount of time in usb_role_switch_register() API
> due to the presence of time intensive operations like component_add()
> which operate under common mutex. This leads to a time window after
> allocating the switch and before setting the registered flag where the set
> role notifications are dropped. Below timeline summarizes this behavior
> 
> Thread1				|	Thread2
> usb_role_switch_register()	|
> 	|			|
> 	---> allocate switch	|
> 	|			|
> 	---> component_add()	|	usb_role_switch_set_role()
> 	|			|	|
> 	|			|	--> Drop role notifications
> 	|			|	    since sw->registered
> 	|			|	    flag is not set.
> 	|			|
> 	--->Set registered flag.|
> 
> To avoid this, set the registered flag early on in the switch register
> API.
> 
> Fixes: b787a3e78175 ("usb: roles: don't get/set_role() when usb_role_switch is unregistered")
> cc: stable@vger.kernel.org
> Signed-off-by: Elson Roy Serrao <quic_eserrao@quicinc.com>

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
> Changes in v2:
>  - Set the switch registered flag from the get-go as suggested by
>    Heikki.
>  - Modified subject line and commit next as per the new logic.
>  - Link to v1: https://lore.kernel.org/all/20250127230715.6142-1-quic_eserrao@quicinc.com/
> 
>  drivers/usb/roles/class.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/roles/class.c b/drivers/usb/roles/class.c
> index c58a12c147f4..30482d4cf826 100644
> --- a/drivers/usb/roles/class.c
> +++ b/drivers/usb/roles/class.c
> @@ -387,8 +387,11 @@ usb_role_switch_register(struct device *parent,
>  	dev_set_name(&sw->dev, "%s-role-switch",
>  		     desc->name ? desc->name : dev_name(parent));
>  
> +	sw->registered = true;
> +
>  	ret = device_register(&sw->dev);
>  	if (ret) {
> +		sw->registered = false;
>  		put_device(&sw->dev);
>  		return ERR_PTR(ret);
>  	}
> @@ -399,8 +402,6 @@ usb_role_switch_register(struct device *parent,
>  			dev_warn(&sw->dev, "failed to add component\n");
>  	}
>  
> -	sw->registered = true;
> -
>  	/* TODO: Symlinks for the host port and the device controller. */
>  
>  	return sw;
> -- 
> 2.17.1

-- 
heikki

      reply	other threads:[~2025-02-13 11:25 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-06 19:39 [PATCH v2] usb: roles: set switch registered flag early on Elson Roy Serrao
2025-02-13 11:25 ` Heikki Krogerus [this message]

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=Z63Wsng27QfhyjLd@kuha.fi.intel.com \
    --to=heikki.krogerus@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=quic_eserrao@quicinc.com \
    --cc=stable@vger.kernel.org \
    --cc=xu.yang_2@nxp.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 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.