• Saravana Kannan's avatar
    driver core: Update device link status correctly for SYNC_STATE_ONLY links · 8c3e315d
    Saravana Kannan authored
    When SYNC_STATE_ONLY support was added in commit 05ef983e ("driver
    core: Add device link support for SYNC_STATE_ONLY flag"),
    SYNC_STATE_ONLY links were treated similar to STATELESS links in terms
    of not blocking consumer probe if the supplier hasn't probed yet.
    
    That caused a SYNC_STATE_ONLY device link's status to not get updated.
    Since SYNC_STATE_ONLY device link is no longer useful once the
    consumer probes, commit 21c27f06 ("driver core: Fix
    SYNC_STATE_ONLY device link implementation") addresses the status
    update issue by deleting the SYNC_STATE_ONLY device link instead of
    complicating the status update code.
    
    However, there are still some cases where we need to update the status
    of a SYNC_STATE_ONLY device link. This is because a SYNC_STATE_ONLY
    device link can later get converted into a normal MANAGED device link
    when a normal MANAGED device link is created between a supplier and
    consumer that already have a SYNC_STATE_ONLY device link between them.
    
    If a SYNC_STATE_ONLY device link's status isn't maintained correctly
    till it's converted to a normal MANAGED device link, then the normal
    MANAGED device link will end up with a wrong link status. This can cause
    a warning stack trace[1] when the consumer device probes successfully.
    
    This commit fixes the SYNC_STATE_ONLY device link status update issue
    where it wouldn't transition correctly from DL_STATE_DORMANT or
    DL_STATE_AVAILABLE to DL_STATE_CONSUMER_PROBE. It also resets the status
    back to DL_STATE_DORMANT or DL_STATE_AVAILABLE if the consumer probe
    fails.
    
    [1] - https://lore.kernel.org/lkml/20200522204120.3b3c9ed6@apollo/
    Fixes: 05ef983e ("driver core: Add device link support for SYNC_STATE_ONLY flag")
    Fixes: 21c27f06 ("driver core: Fix SYNC_STATE_ONLY device link implementation")
    Reported-by: default avatarMichael Walle <michael@walle.cc>
    Tested-by: default avatarMichael Walle <michael@walle.cc>
    Signed-off-by: default avatarSaravana Kannan <saravanak@google.com>
    Reviewed-by: default avatarRafael J. Wysocki <rrafael.j.wysocki@intel.com>
    Link: https://lore.kernel.org/r/20200526220928.49939-1-saravanak@google.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    8c3e315d
core.c 110 KB