From 82bc90dd88c3720020fbc336a24a73664416f58a Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sat, 5 Sep 2015 18:29:53 +0100 Subject: [PATCH] [usb] Add function to device's function list before attempting probe Signed-off-by: Michael Brown --- src/drivers/bus/usb.c | 10 ++++------ 1 file 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; }