HI Bart, On Wed, Sep 4, 2024 at 1:19 PM Bart Van Assche <bvanassche@xxxxxxx> wrote: > > Suppress the following lockdep complaint: > > INFO: trying to register non-static key. > The code is fine but needs lockdep annotation, or maybe > you didn't initialize this object before use? > turning off the locking correctness validator. > > Cc: Hans de Goede <hdegoede@xxxxxxxxxx> > Cc: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> > Cc: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> > Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > Fixes: fde0aa6c175a ("usb: common: Small class for USB role switches") > Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> > --- > drivers/usb/roles/class.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/roles/class.c b/drivers/usb/roles/class.c > index d7aa913ceb8a..f648ce3dd9b5 100644 > --- a/drivers/usb/roles/class.c > +++ b/drivers/usb/roles/class.c > @@ -21,6 +21,7 @@ static const struct class role_class = { > > struct usb_role_switch { > struct device dev; > + struct lock_class_key key; > struct mutex lock; /* device lock*/ > struct module *module; /* the module this device depends on */ > enum usb_role role; > @@ -326,6 +327,8 @@ static void usb_role_switch_release(struct device *dev) > { > struct usb_role_switch *sw = to_role_switch(dev); > > + mutex_destroy(&sw->lock); > + lockdep_unregister_key(&sw->key); > kfree(sw); > } > > @@ -364,7 +367,8 @@ usb_role_switch_register(struct device *parent, > if (!sw) > return ERR_PTR(-ENOMEM); > > - mutex_init(&sw->lock); > + lockdep_register_key(&sw->key); > + __mutex_init(&sw->lock, "usb_role_switch_desc::lock", &sw->key); https://lore.kernel.org/all/ZsiYRAJST%2F2hAju1@xxxxxxxxxxxxxxxxx/ was already accepted and is perhaps better than what you are suggesting as it does not use the internal methods of mutex_init(). CCing Amit as well so that his patch can be submitted to stable trees as well. > > sw->allow_userspace_control = desc->allow_userspace_control; > sw->usb2_port = desc->usb2_port; > Thanks, Badhri