• Martin Liu's avatar
    driver core: hold dev's parent lock when needed · 8c97a46a
    Martin Liu authored
    SoC have internal I/O buses that can't be proved for devices. The
    devices on the buses can be accessed directly without additinal
    configuration required. This type of bus is represented as
    "simple-bus". In some platforms, we name "soc" with "simple-bus"
    attribute and many devices are hooked under it described in DT
    (device tree).
    
    In commit bf74ad5b ("Hold the device's parent's lock during
    probe and remove") to solve USB subsystem lock sequence since
    USB device's characteristic. Thus "soc" needs to be locked
    whenever a device and driver's probing happen under "soc" bus.
    During this period, an async driver tries to probe a device which
    is under the "soc" bus would be blocked until previous driver
    finish the probing and release "soc" lock. And the next probing
    under the "soc" bus need to wait for async finish. Because of
    that, driver's async probe for init time improvement will be
    shadowed.
    
    Since many devices don't have USB devices' characteristic, they
    actually don't need parent's lock. Thus, we introduce a lock flag
    in bus_type struct and driver core would lock the parent lock base
    on the flag. For USB, we set this flag in usb_bus_type to keep
    original lock behavior in driver core.
    
    Async probe could have more benefit after this patch.
    Signed-off-by: default avatarMartin Liu <liumartin@google.com>
    Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    8c97a46a
driver.c 55.3 KB