summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorVincent Palatin <vpalatin@chromium.org>2011-07-29 14:12:02 -0700
committerSimon Glass <sjg@chromium.org>2011-08-29 10:59:24 -0700
commitcf14a2f01ae1749143060aa04df6f58dd5859d38 (patch)
tree31cd37019fd7683e08305e59e1b5e92d5092cd13 /drivers/usb
parent60531d5f97cb4993541029e7f537b66940f2ab08 (diff)
eth: remove usb-ethernet devices before re-enumerating them
Fix the crash when running several times usb_init() with a USB ethernet device plugged. BUG=chromium-os:15206 TEST=run several "usb start" commands and having inserted/removed all possible combinations of 0 to 3 USB Ethernet devices. Change-Id: I23109ad8774daeb07eeba5de615700fec643dfdb Reviewed-on: http://gerrit.chromium.org/gerrit/5026 Tested-by: Vincent Palatin <vpalatin@chromium.org> Reviewed-by: Doug Anderson <dianders@chromium.org> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/eth/usb_ether.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/usb/eth/usb_ether.c b/drivers/usb/eth/usb_ether.c
index 68a08836ec..b7106731b2 100644
--- a/drivers/usb/eth/usb_ether.c
+++ b/drivers/usb/eth/usb_ether.c
@@ -115,8 +115,11 @@ int usb_host_eth_scan(int mode)
old_async = usb_disable_asynch(1); /* asynch transfer not allowed */
- for (i = 0; i < USB_MAX_ETH_DEV; i++)
- memset(&usb_eth[i], 0, sizeof(usb_eth[i]));
+ /* unregister a previously detected device */
+ for (i = 0; i < usb_max_eth_dev; i++)
+ eth_unregister(&usb_eth[i].eth_dev);
+
+ memset(usb_eth, 0, sizeof(usb_eth));
for (i = 0; prob_dev[i].probe; i++) {
if (prob_dev[i].before_probe)