]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[usb] Add function to device's function list before attempting probe
authorMichael Brown <mcb30@ipxe.org>
Sat, 5 Sep 2015 17:29:53 +0000 (18:29 +0100)
committerMichael Brown <mcb30@ipxe.org>
Sun, 6 Sep 2015 20:51:38 +0000 (21:51 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/bus/usb.c

index 2520922e096889dc8d15008a5ef8189986a4d0d6..c0cd54bb7890bd13bd024c0781520891d489235a 100644 (file)
@@ -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;
        }