• Ben Widawsky's avatar
    drm/i915: forcewake fix after reset · 25732821
    Ben Widawsky authored
    The failure is as follows:
    
    1. Userspace gets forcewake lock, lock count >=1
    2. GPU hang/reset occurs (forcewake bit is reset)
    3. count is now incorrect
    
    The failure can only occur when using the forcewake userspace lock.
    
    This has the unfortunate consequence of messing up the driver as well as
    userspace, unless userspace closes the debugfs file, the kernel will
    never end up waking the GT since the refcount will be > 1.
    
    The solution is to try to recover the correct forcewake state based on
    the refcount. There is a period of time where userspace reads/writes may
    occur after the reset, before the GT has been forcewaked. The interface
    was never designed to be a perfect solution for userspace reads/writes,
    and the kernel portion is fixed by this patch.
    Suggested-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
    Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
    25732821
i915_drv.c 23.5 KB