On Wed, Jan 24, 2024 at 02:45:54PM +0800, Xu Yang wrote: > There is a possibility that usb_role_switch device is unregistered before > the user put usb_role_switch. In this case, the user may still want to > get/set_role() since the user can't sense the changes of usb_role_switch. > > This will add a flag to show if usb_role_switch is already registered and > avoid unwanted behaviors. > > Signed-off-by: Xu Yang <xu.yang_2@xxxxxxx> > > --- > Changes in v2: > - new patch during test patch 1 > - add registered flag > --- > drivers/usb/roles/class.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/roles/class.c b/drivers/usb/roles/class.c > index 2bad038fb9ad..70165dd86b5d 100644 > --- a/drivers/usb/roles/class.c > +++ b/drivers/usb/roles/class.c > @@ -23,6 +23,7 @@ struct usb_role_switch { > struct mutex lock; /* device lock*/ > struct module *module; /* the module this device depends on */ > enum usb_role role; > + bool registered; > > /* From descriptor */ > struct device *usb2_port; > @@ -49,6 +50,9 @@ int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role) > if (IS_ERR_OR_NULL(sw)) > return 0; > > + if (!sw->registered) > + return -EOPNOTSUPP; What's to prevent this from changing right after you check it? And why is this patch not cc: stable and have a fixes tag if it resolves a real issue for people? thanks, greg k-h