summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2018-02-16 11:03:58 -0800
committerKenneth Graunke <[email protected]>2018-02-17 11:26:18 -0800
commita63c74be851e3d9ddc3bc6ae162346463b1daef3 (patch)
treeadd2d7229fc4a46439943f8270f88a504c01fcab
parent5a1606c51f6619c5bd865c0a39276531bb1ee464 (diff)
i965: Stop restoring the default L3 configuration on Kernel 4.16+.
Kernel 4.16 has proper context isolation, which means we can change the L3 configuration without worrying about that leaking to other newly created contexts, breaking the assumptions of other userspace. So, disable our workaround to reprogram it back to the default. Reviewed-by: Francisco Jerez <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/intel_batchbuffer.c5
-rw-r--r--src/mesa/drivers/dri/i965/intel_screen.c3
-rw-r--r--src/mesa/drivers/dri/i965/intel_screen.h1
3 files changed, 7 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index 8a2b4218608..d0999bb3caa 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -739,9 +739,10 @@ brw_finish_batch(struct brw_context *brw)
if (brw->batch.ring == RENDER_RING) {
/* Work around L3 state leaks into contexts set MI_RESTORE_INHIBIT which
* assume that the L3 cache is configured according to the hardware
- * defaults.
+ * defaults. On Kernel 4.16+, we no longer need to do this.
*/
- if (devinfo->gen >= 7)
+ if (devinfo->gen >= 7 &&
+ !(brw->screen->kernel_features & KERNEL_ALLOWS_CONTEXT_ISOLATION))
gen7_restore_default_l3_config(brw);
if (devinfo->is_haswell) {
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index 768634d92e0..f9e799f9a35 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -2660,6 +2660,9 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen)
if (devinfo->gen >= 8 || screen->cmd_parser_version >= 5)
screen->kernel_features |= KERNEL_ALLOWS_COMPUTE_DISPATCH;
+ if (intel_get_boolean(screen, I915_PARAM_HAS_CONTEXT_ISOLATION))
+ screen->kernel_features |= KERNEL_ALLOWS_CONTEXT_ISOLATION;
+
const char *force_msaa = getenv("INTEL_FORCE_MSAA");
if (force_msaa) {
screen->winsys_msaa_samples_override =
diff --git a/src/mesa/drivers/dri/i965/intel_screen.h b/src/mesa/drivers/dri/i965/intel_screen.h
index ef2d08974ed..a2bce921449 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.h
+++ b/src/mesa/drivers/dri/i965/intel_screen.h
@@ -81,6 +81,7 @@ struct intel_screen
#define KERNEL_ALLOWS_COMPUTE_DISPATCH (1<<4)
#define KERNEL_ALLOWS_EXEC_CAPTURE (1<<5)
#define KERNEL_ALLOWS_EXEC_BATCH_FIRST (1<<6)
+#define KERNEL_ALLOWS_CONTEXT_ISOLATION (1<<7)
struct brw_bufmgr *bufmgr;