lkml.org 
[lkml]   [2017]   [Dec]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 66/74] drm/i915: Flush pending GTT writes before unbinding
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Chris Wilson <chris@chris-wilson.co.uk>

    commit 2797c4a11f373b2545c2398ccb02e362ee66a142 upstream.

    >From the shrinker paths, we want to relinquish the GPU and GGTT access to
    the object, releasing the backing storage back to the system for
    swapout. As a part of that process we would unpin the pages, marking
    them for access by the CPU (for the swapout/swapin). However, if that
    process was interrupted after unbind the vma, we missed a flush of the
    inflight GGTT writes before we made that GTT space available again for
    reuse, with the prospect that we would redirect them to another page.

    The bug dates back to the introduction of multiple GGTT vma, but the
    code itself dates to commit 02bef8f98d26 ("drm/i915: Unbind closed vma
    for i915_gem_object_unbind()").

    Fixes: 02bef8f98d26 ("drm/i915: Unbind closed vma for i915_gem_object_unbind()")
    Fixes: c5ad54cf7dd8 ("drm/i915: Use partial view in mmap fault handler")
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20171204132513.7303-1-chris@chris-wilson.co.uk
    (cherry picked from commit 5888fc9eac3c2ff96e76aeeb865fdb46ab2d711e)
    Signed-off-by: Jani Nikula <jani.nikula@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpu/drm/i915/i915_gem.c | 9 +--------
    1 file changed, 1 insertion(+), 8 deletions(-)

    --- a/drivers/gpu/drm/i915/i915_gem.c
    +++ b/drivers/gpu/drm/i915/i915_gem.c
    @@ -325,17 +325,10 @@ int i915_gem_object_unbind(struct drm_i9
    * must wait for all rendering to complete to the object (as unbinding
    * must anyway), and retire the requests.
    */
    - ret = i915_gem_object_wait(obj,
    - I915_WAIT_INTERRUPTIBLE |
    - I915_WAIT_LOCKED |
    - I915_WAIT_ALL,
    - MAX_SCHEDULE_TIMEOUT,
    - NULL);
    + ret = i915_gem_object_set_to_cpu_domain(obj, false);
    if (ret)
    return ret;

    - i915_gem_retire_requests(to_i915(obj->base.dev));
    -
    while ((vma = list_first_entry_or_null(&obj->vma_list,
    struct i915_vma,
    obj_link))) {

    \
     
     \ /
      Last update: 2017-12-27 17:54    [W:2.225 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site