summaryrefslogtreecommitdiffstats
path: root/src/drivers/bus
diff options
context:
space:
mode:
authorMichael Brown2015-09-05 19:29:53 +0200
committerMichael Brown2015-09-06 22:51:38 +0200
commit82bc90dd88c3720020fbc336a24a73664416f58a (patch)
treeb75942978f0cc55b0cfd50b9fcad6dea0afc99af /src/drivers/bus
parent[usb] Expose usb_find_driver() (diff)
downloadipxe-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.c10
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;
}