Skip to contentSkip to conversation

Patch "drm/i915: Always convert incoming exec offsets to non-canonical" has been added to the 4.9-stable tree

PATCH [email protected] 1 participant 1 message Feb 10, 2017

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

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 6e7eb1783be7f19eb071c96ddda0bbf22279ff46 Mon 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.

Fixes a5f0edf63bdf ("drm/i915: Avoid writing relocs with addresses in non-canonical form")
Cc Chris Wilson <[email protected]>
Cc Michel Thierry <[email protected]>
(cherry picked from commit 038c95a313e4ca954ee5ab8a0c7559a646b0f462)
---
 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 *de
 			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;
 

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