• Rafael J. Wysocki's avatar
    PM / core: Fix supplier device runtime PM usage counter imbalance · 47e5abfb
    Rafael J. Wysocki authored
    If a device link is added via device_link_add() by the driver of the
    link's consumer device, the supplier's runtime PM usage counter is
    going to be dropped by the pm_runtime_put_suppliers() call in
    driver_probe_device().  However, in that case it is not incremented
    unless the supplier driver is already present and the link is not
    stateless.  That leads to a runtime PM usage counter imbalance for
    the supplier device in a few cases.
    
    To prevent that from happening, bump up the supplier runtime
    PM usage counter in device_link_add() for all links with the
    DL_FLAG_PM_RUNTIME flag set that are added at the consumer probe
    time.  Use pm_runtime_get_noresume() for that as the callers of
    device_link_add() who want the supplier to be resumed by it are
    expected to pass DL_FLAG_RPM_ACTIVE in flags to it anyway, but
    additionally resume the supplier if the link is added during
    consumer driver probe to retain the existing behavior for the
    callers depending on it.
    
    Fixes: 21d5c57b (PM / runtime: Use device links)
    Reported-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Reviewed-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Tested-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
    Cc: 4.10+ <stable@vger.kernel.org> # 4.10+
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    47e5abfb
core.c 79.9 KB