diff options
Diffstat (limited to 'drivers/usb/gadget/configfs.c')
-rw-r--r-- | drivers/usb/gadget/configfs.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c index 8df96cb3bb58..be29dc4bef89 100644 --- a/drivers/usb/gadget/configfs.c +++ b/drivers/usb/gadget/configfs.c @@ -8,6 +8,7 @@ #include "configfs.h" #include "u_f.h" #include "u_os_desc.h" +#include "debug.h" #ifdef CONFIG_USB_CONFIGFS_UEVENT #include <linux/platform_device.h> @@ -1527,7 +1528,14 @@ static int android_setup(struct usb_gadget *gadget, static void android_disconnect(struct usb_gadget *gadget) { struct usb_composite_dev *cdev = get_gadget_data(gadget); - struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev); + struct gadget_info *gi; + + if (!cdev) { + pr_err("%s: gadget is not connected\n", __func__); + return; + } + + gi = container_of(cdev, struct gadget_info, cdev); /* accessory HID support can be active while the accessory function is not actually enabled, @@ -1737,6 +1745,7 @@ void unregister_gadget_item(struct config_item *item) { struct gadget_info *gi = to_gadget_info(item); + /* to protect race with gadget_dev_desc_UDC_store*/ mutex_lock(&gi->lock); unregister_gadget(gi); mutex_unlock(&gi->lock); @@ -1749,6 +1758,8 @@ static int __init gadget_cfs_init(void) config_group_init(&gadget_subsys.su_group); + debug_debugfs_init(); + ret = configfs_register_subsystem(&gadget_subsys); #ifdef CONFIG_USB_CONFIGFS_UEVENT @@ -1763,6 +1774,7 @@ module_init(gadget_cfs_init); static void __exit gadget_cfs_exit(void) { + debug_debugfs_exit(); configfs_unregister_subsystem(&gadget_subsys); #ifdef CONFIG_USB_CONFIGFS_UEVENT if (!IS_ERR(android_class)) |