• Saravana Kannan's avatar
    driver core: Fix SYNC_STATE_ONLY device link implementation · 21c27f06
    Saravana Kannan authored
    When SYNC_STATE_ONLY support was added in commit 05ef983e ("driver
    core: Add device link support for SYNC_STATE_ONLY flag"),
    device_link_add() incorrectly skipped adding the new SYNC_STATE_ONLY
    device link to the supplier's and consumer's "device link" list.
    
    This causes multiple issues:
    - The device link is lost forever from driver core if the caller
      didn't keep track of it (caller typically isn't expected to). This is
      a memory leak.
    - The device link is also never visible to any other code path after
      device_link_add() returns.
    
    If we fix the "device link" list handling, that exposes a bunch of
    issues.
    
    1. The device link "status" state management code rightfully doesn't
    handle the case where a DL_FLAG_MANAGED device link exists between a
    supplier and consumer, but the consumer manages to probe successfully
    before the supplier. The addition of DL_FLAG_SYNC_STATE_ONLY links break
    this assumption. This causes device_links_driver_bound() to throw a
    warning when this happens.
    
    Since DL_FLAG_SYNC_STATE_ONLY device links are mainly used for creating
    proxy device links for child device dependencies and aren't useful once
    the consumer device probes successfully, this patch just deletes
    DL_FLAG_SYNC_STATE_ONLY device links once its consumer device probes.
    This way, we avoid the warning, free up some memory and avoid
    complicating the device links "status" state management code.
    
    2. Creating a DL_FLAG_STATELESS device link between two devices that
    already have a DL_FLAG_SYNC_STATE_ONLY device link will result in the
    DL_FLAG_STATELESS flag not getting set correctly. This patch also fixes
    this.
    
    Lastly, this patch also fixes minor whitespace issues.
    
    Cc: stable@vger.kernel.org
    Fixes: 05ef983e ("driver core: Add device link support for SYNC_STATE_ONLY flag")
    Signed-off-by: default avatarSaravana Kannan <saravanak@google.com>
    Reviewed-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Link: https://lore.kernel.org/r/20200519063000.128819-1-saravanak@google.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    21c27f06
core.c 106 KB