diff options
author | Michael Brown | 2015-09-05 19:29:53 +0200 |
---|---|---|
committer | Michael Brown | 2015-09-06 22:51:38 +0200 |
commit | 82bc90dd88c3720020fbc336a24a73664416f58a (patch) | |
tree | b75942978f0cc55b0cfd50b9fcad6dea0afc99af /src/drivers/bus | |
parent | [usb] Expose usb_find_driver() (diff) | |
download | ipxe-82bc90dd88c3720020fbc336a24a73664416f58a.tar.gz ipxe-82bc90dd88c3720020fbc336a24a73664416f58a.tar.xz ipxe-82bc90dd88c3720020fbc336a24a73664416f58a.zip |
[usb] Add function to device's function list before attempting probe
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/bus')
-rw-r--r-- | src/drivers/bus/usb.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/drivers/bus/usb.c b/src/drivers/bus/usb.c index 2520922e..c0cd54bb 100644 --- a/src/drivers/bus/usb.c +++ b/src/drivers/bus/usb.c @@ -1097,6 +1097,7 @@ usb_probe_all ( struct usb_device *usb, "%s-%d.%d", usb->name, config->config, first ); INIT_LIST_HEAD ( &func->dev.children ); func->dev.parent = bus->dev; + list_add_tail ( &func->list, &usb->functions ); /* Identify function */ if ( ( rc = usb_function ( func, config, first ) ) != 0 ) @@ -1125,22 +1126,19 @@ usb_probe_all ( struct usb_device *usb, func->interface[i] ); DBGC ( usb, " using driver %s\n", func->dev.driver_name ); - /* Add to list of functions */ - list_add ( &func->list, &usb->functions ); - /* Add to device hierarchy */ list_add_tail ( &func->dev.siblings, &bus->dev->children ); continue; list_del ( &func->dev.siblings ); - list_del ( &func->list ); usb_remove ( func ); err_probe: - free ( func ); - err_alloc: err_interface: err_function: + list_del ( &func->list ); + free ( func ); + err_alloc: /* Continue registering other functions */ continue; } |