• Chris Wilson's avatar
    drm/kms: Add a module parameter to disable polling · e58f637b
    Chris Wilson authored
    Polling for a VGA device on an old system can be quite expensive,
    causing latencies on the order of 600ms. As we hold the mode mutex for
    this time and also need the same mutex to move the cursor, we trigger a
    user-visible stall.
    
    The real solution would involve improving the granulatity of the
    locking and so perhaps performing some of the probing not under the lock
    or some other updates can be done under different locks. Also reducing the
    cost of probing for a non-existent monitor would be worthwhile. However,
    exposing a parameter to disable polling is a simple workaround in the
    meantime.
    
    In order to accommodate users turning polling on and off at runtime, the
    polling is potentially re-enabled on every probe. This is coupled to
    the user calling xrandr, which seems to be a vaild time to reset the
    polling timeout since the information on the connection has just been
    updated. (The presumption being that all connections are probed in a
    single xrandr pass, which is currently valid.)
    
    References:
    
      Bug 29536 - 2.6.35 causes ~600ms latency every 10s
      https://bugs.freedesktop.org/show_bug.cgi?id=29536
    
      Bug 16265 - Why is kslowd accumulating so much CPU time?
      https://bugzilla.kernel.org/show_bug.cgi?id=16265Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Reported-and-tested-by: default avatarBruno Prémont <bonbons@linux-vserver.org>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    e58f637b
drm_crtc_helper.c 25.6 KB