summaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2014-07-18 13:56:37 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2014-07-22 08:09:04 +0200
commitd113857d2b7d696f69fc41299d5f5069c3c4d59c (patch)
tree6faee7bd538965ebd2d436e71b6100383db4c514 /drivers/usb
parentb670c7566e06e035ce16bce026e2a63fc9e61e12 (diff)
downloadbarebox-d113857d2b7d696f69fc41299d5f5069c3c4d59c.tar.gz
barebox-d113857d2b7d696f69fc41299d5f5069c3c4d59c.tar.xz
USB: gadget: composite: Break out of potential endless loop
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/composite.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 37c67d5353..ba3b9da206 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -577,16 +577,21 @@ static void reset_config(struct usb_composite_dev *cdev)
{
struct usb_function *f;
+ if (cdev->in_reset_config)
+ return;
+
+ cdev->in_reset_config = 1;
+
DBG(cdev, "reset config\n");
list_for_each_entry(f, &cdev->config->functions, list) {
if (f->disable)
f->disable(f);
-
bitmap_zero(f->endpoints, 32);
}
cdev->config = NULL;
cdev->delayed_status = 0;
+ cdev->in_reset_config = 0;
}
static int set_config(struct usb_composite_dev *cdev,