Messages in this thread | | | From | Frank Li <> | Subject | RE: [EXT] [PATCH v3] USB: gadget: Add ID numbers to configfs-gadget driver names | Date | Wed, 11 Jan 2023 15:16:05 +0000 |
| |
> -----Original Message----- > From: Chanh Nguyen <chanh@os.amperecomputing.com> > Sent: Wednesday, January 11, 2023 12:51 AM > To: OpenBMC Maillist <openbmc@lists.ozlabs.org>; Greg Kroah-Hartman > <gregkh@linuxfoundation.org>; Frank Li <frank.li@nxp.com>; Christophe > JAILLET <christophe.jaillet@wanadoo.fr>; Dan Vacura > <w36195@motorola.com>; Jakob Koschel <jakobkoschel@gmail.com>; Alan > Stern <stern@rowland.harvard.edu>; Vijayavardhan Vennapusa > <vvreddy@codeaurora.org>; Rondreis <linhaoguo86@gmail.com>; Andrzej > Pietrasiewicz <andrzej.p@collabora.com>; Heikki Krogerus > <heikki.krogerus@linux.intel.com>; linux-usb@vger.kernel.org; linux- > kernel@vger.kernel.org; Open Source Submission > <patches@amperecomputing.com> > Cc: Chanh Nguyen <chanh@os.amperecomputing.com> > Subject: [EXT] [PATCH v3] USB: gadget: Add ID numbers to configfs-gadget > driver names > > Caution: EXT Email > > It is unable to use configfs to attach more than one gadget. When > attaching the second gadget, it always fails and the kernel message > prints out: > > Error: Driver 'configfs-gadget' is already registered, aborting... > UDC core: g1: driver registration failed: -16 > > This commit fixes the problem by using the gadget name as a suffix > to each configfs_gadget's driver name, thus making the names > distinct. > > Fixes: fc274c1e9973 ("USB: gadget: Add a new bus for gadgets") > Signed-off-by: Chanh Nguyen <chanh@os.amperecomputing.com>
Reviewed-by: Frank Li <frank.li@nxp.com>
> > --- > Changes in v3: > - Use the gadget name as a unique suffix instead [Andrzej] > - Remove the driver.name allocation by template [Chanh] > - Update commit message [Chanh] > > Changes in v2: > - Replace scnprintf() by kasprintf() to simplify the code [CJ] > - Move the clean up code from gadgets_drop() to > gadget_info_attr_release() [Frank Li] > - Correct the resource free up in gadges_make() [Alan Stern] > - Remove the unnecessary variable in gadgets_make() [Chanh] > - Fixes minor grammar issue in commit message [Chanh] > --- > drivers/usb/gadget/configfs.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c > index 96121d1c8df4..0853536cbf2e 100644 > --- a/drivers/usb/gadget/configfs.c > +++ b/drivers/usb/gadget/configfs.c > @@ -393,6 +393,7 @@ static void gadget_info_attr_release(struct > config_item *item) > WARN_ON(!list_empty(&gi->string_list)); > WARN_ON(!list_empty(&gi->available_func)); > kfree(gi->composite.gadget_driver.function); > + kfree(gi->composite.gadget_driver.driver.name); > kfree(gi); > } > > @@ -1572,7 +1573,6 @@ static const struct usb_gadget_driver > configfs_driver_template = { > .max_speed = USB_SPEED_SUPER_PLUS, > .driver = { > .owner = THIS_MODULE, > - .name = "configfs-gadget", > }, > .match_existing_only = 1, > }; > @@ -1623,13 +1623,21 @@ static struct config_group *gadgets_make( > > gi->composite.gadget_driver = configfs_driver_template; > > + gi->composite.gadget_driver.driver.name = kasprintf(GFP_KERNEL, > + "configfs-gadget.%s", name); > + if (!gi->composite.gadget_driver.driver.name) > + goto err; > + > gi->composite.gadget_driver.function = kstrdup(name, GFP_KERNEL); > gi->composite.name = gi->composite.gadget_driver.function; > > if (!gi->composite.gadget_driver.function) > - goto err; > + goto out_free_driver_name; > > return &gi->group; > + > +out_free_driver_name: > + kfree(gi->composite.gadget_driver.driver.name); > err: > kfree(gi); > return ERR_PTR(-ENOMEM); > -- > 2.17.1
| |