Skip to content

Commit

Permalink
usb: gadget: composite: make sure to reactivate function on unbind
Browse files Browse the repository at this point in the history
If a function sets bind_deactivated flag, upon removal we will be left
with an unbalanced deactivation. Let's make sure that we conditionally
call usb_function_activate() from usb_remove_function() and make sure
usb_remove_function() is called from remove_config().

Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
  • Loading branch information
Felipe Balbi committed Jun 6, 2017
1 parent afbbc79 commit 0e3e975
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions drivers/usb/gadget/composite.c
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,9 @@ void usb_remove_function(struct usb_configuration *c, struct usb_function *f)
list_del(&f->list);
if (f->unbind)
f->unbind(c, f);

if (f->bind_deactivated)
usb_function_activate(f);
}
EXPORT_SYMBOL_GPL(usb_remove_function);

Expand Down Expand Up @@ -956,12 +959,8 @@ static void remove_config(struct usb_composite_dev *cdev,

f = list_first_entry(&config->functions,
struct usb_function, list);
list_del(&f->list);
if (f->unbind) {
DBG(cdev, "unbind function '%s'/%p\n", f->name, f);
f->unbind(config, f);
/* may free memory for "f" */
}

usb_remove_function(config, f);
}
list_del(&config->list);
if (config->unbind) {
Expand Down

0 comments on commit 0e3e975

Please sign in to comment.