aboutsummaryrefslogtreecommitdiffstats
path: root/src/drivers/bus
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2015-09-05 18:29:53 +0100
committerMichael Brown <mcb30@ipxe.org>2015-09-06 21:51:38 +0100
commit82bc90dd88c3720020fbc336a24a73664416f58a (patch)
treeb75942978f0cc55b0cfd50b9fcad6dea0afc99af /src/drivers/bus
parent866e52581451238e840be214a34648da2958dafd (diff)
downloadipxe-82bc90dd88c3720020fbc336a24a73664416f58a.tar.gz
[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 2520922e0..c0cd54bb7 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;
}