diff options
author | Vincent Palatin <vpalatin@chromium.org> | 2011-07-29 14:12:02 -0700 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2011-08-29 10:59:24 -0700 |
commit | cf14a2f01ae1749143060aa04df6f58dd5859d38 (patch) | |
tree | 31cd37019fd7683e08305e59e1b5e92d5092cd13 /drivers/usb | |
parent | 60531d5f97cb4993541029e7f537b66940f2ab08 (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.c | 7 |
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) |