• Chris Wilson's avatar
    drm/i915: Keep the forcewake timer alive for 1ms past the most recent use · c9e0c6da
    Chris Wilson authored
    Currently the timer is armed for 1ms after the first use and is killed
    immediately, dropping the forcewake as early as possible. However, for
    very frequent operations the forcewake dance has a large impact on
    latency and keeping the timer alive until we are idle is preferred. To
    achieve this, if we call intel_uncore_forcewake_get whilst the timer is
    alive (repeated use), then set a flag to restart the timer on expiry
    rather than drop the forcewake usage count. The timer is racy, the
    consequence of the race is to expire the timer earlier than is now
    desired but does not impact on correct behaviour. The offset the race
    slightly, we set the active flag again on intel_uncore_forcewake_put.
    
    The effect should be to reduce the jitter of reacquiring the fw every
    1ms on a busy system. However, the cost is to keep the timer alive for
    an extra 1ms on a nearly idle system. We chose to incur the jitter
    previously to keep the timer off for as much as possible.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Mika Kuoppala <mika.kuoppala@intel.com>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/20170526132209.14640-1-chris@chris-wilson.co.uk
    c9e0c6da
intel_uncore.c 54.6 KB