Patch "drm/i915: Always convert incoming exec offsets to non-canonical" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
drm/i915: Always convert incoming exec offsets to non-canonical
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drm-i915-always-convert-incoming-exec-offsets-to-non-canonical.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6e7eb1783be7f19eb071c96ddda0bbf22279ff46Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Winiarski?= <[email protected]>
Date: Tue, 7 Feb 2017 20:55:59 +0100
Subject: drm/i915: Always convert incoming exec offsets to non-canonical
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Michał Winiarski <[email protected]>
commit 6e7eb1783be7f19eb071c96ddda0bbf22279ff46 upstream.
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.
--- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/gpu/drm/i915/i915_gem_execbuffer.c +6 -6
@@ -1215,14 +1215,14 @@ validate_exec_list(struct drm_device *deif (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 ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/drm-i915-always-convert-incoming-exec-offsets-to-non-canonical.patch