• Chris Wilson's avatar
    drm/i915: Avoid keeping waitboost active for signaling threads · 7b92c1bd
    Chris Wilson authored
    Once a client has requested a waitboost, we keep that waitboost active
    until all clients are no longer waiting. This is because we don't
    distinguish which waiter deserves the boost. However, with the advent of
    fence signaling, the signaler threads appear as waiters to the RPS
    interrupt handler. So instead of using a single boolean to track when to
    keep the waitboost active, use a counter of all outstanding waitboosted
    requests.
    
    At this point, I have removed all vestiges of the rate limiting on
    clients. Whilst this means that compositors should remain more fluid,
    it also means that boosts are more prevalent. See commit b29c19b6
    ("drm/i915: Boost RPS frequency for CPU stalls") for a longer discussion
    on the pros and cons of both approaches.
    
    A drawback of this implementation is that it requires constant request
    submission to keep the waitboost trimmed (as it is now cancelled when the
    request is completed). This will be fine for a busy system, but near
    idle the boosts may be kept for longer than desired (effectively tens of
    vblanks worstcase) and there is a reliance on rc6 instead.
    
    v2: Remove defunct rps.client_lock
    Reported-by: default avatarMichał Winiarski <michal.winiarski@intel.com>
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Michał Winiarski <michal.winiarski@intel.com>
    Reviewed-by: default avatarMichał Winiarski <michal.winiarski@intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/20170628123548.9236-1-chris@chris-wilson.co.uk
    7b92c1bd
intel_pm.c 261 KB