• Alexander Duyck's avatar
    driver core: Probe devices asynchronously instead of the driver · ef0ff683
    Alexander Duyck authored
    Probe devices asynchronously instead of the driver. This results in us
    seeing the same behavior if the device is registered before the driver or
    after. This way we can avoid serializing the initialization should the
    driver not be loaded until after the devices have already been added.
    
    The motivation behind this is that if we have a set of devices that
    take a significant amount of time to load we can greatly reduce the time to
    load by processing them in parallel instead of one at a time. In addition,
    each device can exist on a different node so placing a single thread on one
    CPU to initialize all of the devices for a given driver can result in poor
    performance on a system with multiple nodes.
    
    This approach can reduce the time needed to scan SCSI LUNs significantly.
    The only way to realize that speedup is by enabling more concurrency which
    is what is achieved with this patch.
    
    To achieve this it was necessary to add a new member "async_driver" to the
    device_private structure to store the driver pointer while we wait on the
    deferred probe call.
    Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
    Reviewed-by: default avatarDan Williams <dan.j.williams@intel.com>
    Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@linux.intel.com>
    Reviewed-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    ef0ff683
base.h 6.38 KB