• Chris Wilson's avatar
    drm/i915/gem: Try an alternate engine for relocations · 6f576d62
    Chris Wilson authored
    If at first we don't succeed, try try again.
    
    Not all engines may support the MI ops we need to perform asynchronous
    relocation patching, and so we end up falling back to a synchronous
    operation that has a liability of blocking. However, Tvrtko pointed out
    we don't need to use the same engine to perform the relocations as we
    are planning to execute the execbuf on, and so if we switch over to a
    working engine, we can perform the relocation asynchronously. The user
    execbuf will be queued after the relocations by virtue of fencing.
    
    This patch creates a new context per execbuf requiring asynchronous
    relocations on an unusable engines. This is perhaps a bit excessive and
    can be ameliorated by a small context cache, but for the moment we only
    need it for working around a little used engine on Sandybridge, and only
    if relocations are actually required to an active batch buffer.
    
    Now we just need to teach the relocation code to handle physical
    addressing for gen2/3, and we should then have universal support!
    Suggested-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Testcase: igt/gem_exec_reloc/basic-spin # snb
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200501192945.22215-3-chris@chris-wilson.co.uk
    6f576d62
i915_gem_execbuffer.c 78.4 KB