drm/i915: Always convert incoming exec offsets to non-canonical
We're using non-canonical addresses in drm_mm, and we're making sure that userspace is using canonical addressing - both in case of softpin (verifying incoming offset) and when relocating (converting to canonical when updating offset returned to userspace). Unfortunately when considering the need for relocations, we're comparing offset from userspace (in canonical form) with drm_mm node (in non-canonical form), and as a result, we end up always relocating if our offsets are in the "problematic" range. Let's always convert the offsets to avoid the performance impact of relocations. Fixes:a5f0edf63b
("drm/i915: Avoid writing relocs with addresses in non-canonical form") Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Michel Thierry <michel.thierry@intel.com> Reported-by: Michał Pyrzowski <michal.pyrzowski@intel.com> Signed-off-by: Michał Winiarski <michal.winiarski@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170207195559.18798-1-michal.winiarski@intel.com Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> (cherry picked from commit038c95a313
) Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
83bf6d55c1
commit
6e7eb1783b
@ -1181,14 +1181,14 @@ validate_exec_list(struct drm_device *dev,
|
||||
if (exec[i].offset !=
|
||||
gen8_canonical_addr(exec[i].offset & PAGE_MASK))
|
||||
return -EINVAL;
|
||||
|
||||
/* From drm_mm perspective address space is continuous,
|
||||
* so from this point we're always using non-canonical
|
||||
* form internally.
|
||||
*/
|
||||
exec[i].offset = gen8_noncanonical_addr(exec[i].offset);
|
||||
}
|
||||
|
||||
/* From drm_mm perspective address space is continuous,
|
||||
* so from this point we're always using non-canonical
|
||||
* form internally.
|
||||
*/
|
||||
exec[i].offset = gen8_noncanonical_addr(exec[i].offset);
|
||||
|
||||
if (exec[i].alignment && !is_power_of_2(exec[i].alignment))
|
||||
return -EINVAL;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user