• Saravana Kannan's avatar
    driver core: Add edit_links() callback for drivers · 134b23ee
    Saravana Kannan authored
    The driver core/bus adding supplier-consumer dependencies by default
    enables functional dependencies to be tracked correctly even when the
    consumer devices haven't had their drivers registered or loaded (if they
    are modules).
    
    However, when the bus incorrectly adds dependencies that it shouldn't
    have added, the devices might never probe.
    
    For example, if device-C is a consumer of device-S and they have
    phandles to each other in DT, the following could happen:
    
    1.  Device-S get added first.
    2.  The bus add_links() callback will (incorrectly) try to link it as
        a consumer of device-C.
    3.  Since device-C isn't present, device-S will be put in
        "waiting-for-supplier" list.
    4.  Device-C gets added next.
    5.  All devices in "waiting-for-supplier" list are retried for linking.
    6.  Device-S gets linked as consumer to Device-C.
    7.  The bus add_links() callback will (correctly) try to link it as
        a consumer of device-S.
    8.  This isn't allowed because it would create a cyclic device links.
    
    Neither devices will get probed since the supplier is marked as
    dependent on the consumer. And the consumer will never probe because the
    consumer can't get resources from the supplier.
    
    Without this patch, things stay in this broken state. However, with this
    patch, the execution will continue like this:
    
    9.  Device-C's driver is loaded.
    10. Device-C's driver removes Device-S as a consumer of Device-C.
    11. Device-C's driver adds Device-C as a consumer of Device-S.
    12. Device-S probes.
    14. Device-C probes.
    
    kbuild test robot reported missing documentation for device.has_edit_links
    Reported-by: default avatarkbuild test robot <lkp@intel.com>
    Signed-off-by: default avatarSaravana Kannan <saravanak@google.com>
    Link: https://lore.kernel.org/r/20190731221721.187713-3-saravanak@google.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    134b23ee
dd.c 33 KB