• Paulo Zanoni's avatar
    drm/i915: put runtime PM only when we actually release force_wake · 6d88064e
    Paulo Zanoni authored
    When we call gen6_gt_force_wake_put we don't actually put force_wake,
    we just schedule gen6_force_wake_work through mod_delayed_work, and
    that will eventually release force_wake.
    
    The problem is that we call intel_runtime_pm_put directly at
    gen6_gt_force_wake_put, so most of the times we put our runtime PM
    reference before the delayed work happens, so we may runtime suspend
    while force_wake is still supposed to be enabled if the graphics
    autosuspend_delay_ms is too small.
    
    Now the nice thing about the current code is that after it triggers
    the delayed work function it gets a refcount, and it only triggers the
    delayed work function if refcount is zero. This guarantees that when
    we schedule the funciton, it will run before we try to schedule it
    again, which simplifies the problem and allows for the current
    solution to work properly (hopefully!).
    
    v2: - Keep the VLV refcounts balanced (Jesse)
    Signed-off-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    Reviewed-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    6d88064e
intel_uncore.c 29.3 KB