• Daniel Vetter's avatar
    drm/i915/eb: Fix pagefault disabling in the first slowpath · ca319ee9
    Daniel Vetter authored
    In
    
    commit ebc0808f
    Author: Chris Wilson <chris@chris-wilson.co.uk>
    Date:   Tue Oct 18 13:02:51 2016 +0100
    
        drm/i915: Restrict pagefault disabling to just around copy_from_user()
    
    we entirely missed that there's a slow path call to eb_relocate_entry
    (or i915_gem_execbuffer_relocate_entry as it was called back then)
    which was left fully wrapped by pagefault_disable/enable() calls.
    Previously any issues with blocking calls where handled by the
    following code:
    
    	/* we can't wait for rendering with pagefaults disabled */
    	if (pagefault_disabled() && !object_is_idle(obj))
    		return -EFAULT;
    
    Now at this point the prefaulting was still around, which means in
    normal applications it was very hard to hit this bug. No idea why the
    regressions in igts weren't caught.
    
    Now this all changed big time with 2 patches merged closely together.
    
    First
    
    commit 2889caa9
    Author: Chris Wilson <chris@chris-wilson.co.uk>
    Date:   Fri Jun 16 15:05:19 2017 +0100
    
        drm/i915: Eliminate lots of iterations over the execobjects array
    
    removes the prefaulting from the first relocation path, pushing it into
    the first slowpath (of which this patch added a total of 3 escalation
    levels). This would have really quickly uncovered the above bug, were
    it not for immediate adding a duct-tape on top with
    
    commit 7dd4f672
    Author: Chris Wilson <chris@chris-wilson.co.uk>
    Date:   Fri Jun 16 15:05:24 2017 +0100
    
        drm/i915: Async GPU relocation processing
    
    by pushing all all the relocation patching to the gpu if the buffer
    was busy, which avoided all the possible blocking calls.
    
    The entire slowpath was then furthermore ditched in
    
    commit 7dc8f114
    Author: Chris Wilson <chris@chris-wilson.co.uk>
    Date:   Wed Mar 11 16:03:10 2020 +0000
    
            drm/i915/gem: Drop relocation slowpath
    
    and resurrected in
    
    commit fd1500fc
    
    
    Author: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Date:   Wed Aug 19 16:08:43 2020 +0200
    
            Revert "drm/i915/gem: Drop relocation slowpath".
    
    but this did not further impact what's going on.
    
    Since pagefault_disable/enable is an atomic section, any sleeping in
    there is prohibited, and we definitely do that without gpu relocations
    since we have to wait for the gpu usage to finish before we can patch
    up the relocations.
    Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
    Reviewed-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    Cc: Jon Bloomfield <jon.bloomfield@intel.com>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
    Cc: Matthew Auld <matthew.auld@intel.com>
    Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
    Cc: Dave Airlie <airlied@redhat.com>
    Cc: Jason Ekstrand <jason@jlekstrand.net>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210618214503.1773805-1-daniel.vetter@ffwll.ch
    ca319ee9
i915_gem_execbuffer.c 92.2 KB