• Ben Widawsky's avatar
    drm/i915: Defer request freeing · e2078043
    Ben Widawsky authored
    With context destruction, we always want to be able to tear down the
    underlying address space. This is invoked on the last unreference to the
    context which could happen before we've moved all objects to the
    inactive list. To enable a clean tear down the address space, make sure
    to process the request free lastly.
    
    Without this change, we cannot guarantee to we don't still have active
    objects in the VM.
    
    As an example of a failing case:
    CTX-A is created, count=1
    CTX-A is used during execbuf
    	does a context switch count = 2
    	and add_request count = 3
    CTX B runs, switches, CTX-A count = 2
    CTX-A is destroyed, count = 1
    retire requests is called
    	free_request from CTX-A, count = 0 <--- free context with active object
    
    As mentioned above, by doing the free request after processing the
    active list, we can avoid this case.
    Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    e2078043
i915_gem.c 127 KB