• Matthew Brost's avatar
    drm/xe: Make bind engines safe · fd84041d
    Matthew Brost authored
    We currently have a race between bind engines which can result in
    corrupted page tables leading to faults.
    
    A simple example:
    bind A 0x0000-0x1000, engine A, has unsatisfied in-fence
    bind B 0x1000-0x2000, engine B, no in-fences
    exec A uses 0x1000-0x2000
    
    Bind B will pass bind A and exec A will fault. This occurs as bind A
    programs the root of the page table in a bind job which is held up by an
    in-fence. Bind B in this case just programs a leaf entry of the
    structure.
    
    To fix use range-fence utility to track cross bind engine conflicts. In
    the above example bind A would insert an dependency into the range-fence
    tree with a key of 0x0-0x7fffffffff, bind B would find that dependency
    and its bind job would scheduled behind the unsatisfied in-fence and
    bind A's job.
    
    Reviewed-by: Maarten Lankhorst<maarten.lankhorst@linux.intel.com>
    Co-developed-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
    Signed-off-by: default avatarMatthew Brost <matthew.brost@intel.com>
    Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    fd84041d
xe_pt.c 50.9 KB