• Thomas Hellström's avatar
    drm/xe: Use NULL PTEs as scratch PTEs · 06951c2e
    Thomas Hellström authored
    Currently scratch PTEs are write-enabled and points to a single scratch
    page. This has the side effect that buggy applications with out-of-bounds
    memory accesses may not notice the bad access since what's written may
    be read back.
    
    Instead use NULL PTEs as scratch PTEs. These always return 0 when reading,
    and writing has no effect. As a slight benefit, we can also use huge NULL
    PTEs.
    
    One drawback pointed out is that debugging may be hampered since previously
    when inspecting the content of the scratch page, it might be possible to
    detect writes to out-of-bound addresses and possibly also
    from where the out-of-bounds address originated. However since the scratch
    page-table structure is kept, it will be easy to add back the single
    RW-enabled scratch page under a debug define if needed.
    
    Also update the kerneldoc accordingly and move the function to create the
    scratch page-tables from xe_pt.c to xe_pt.h since it is accessing
    vm structure internals and this also makes it possible to make it static.
    
    v2:
    - Don't try to encode scratch PTEs larger than 1GiB.
    - Move xe_pt_create_scratch(), Update kerneldoc.
    v3:
    - Rebase.
    
    Cc: Brian Welty <brian.welty@intel.com>
    Cc: Matt Roper <matthew.d.roper@intel.com>
    Signed-off-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
    Acked-by: Lucas De Marchi <lucas.demarchi@intel.com> #for general direction.
    Reviewed-by: default avatarBrian Welty <brian.welty@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20231209151843.7903-3-thomas.hellstrom@linux.intel.comSigned-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    06951c2e
xe_vm.c 79.1 KB