[Mesa-dev] [PATCH 1/2] i965: Stop restoring the default L3 configuration on Kernel 4.16+.
Francisco Jerez
currojerez at riseup.net
Sat Feb 17 00:49:18 UTC 2018
Kenneth Graunke <kenneth at whitecape.org> writes:
> 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.
> ---
> src/mesa/drivers/dri/i965/intel_batchbuffer.c | 5 +++--
> src/mesa/drivers/dri/i965/intel_screen.c | 3 +++
> src/mesa/drivers/dri/i965/intel_screen.h | 1 +
> 3 files changed, 7 insertions(+), 2 deletions(-)
>
> I tested this locally with Piglit and KHR-GLES31.*compute* running
> concurrently, on 4.16-rc1. It seemed to work fine. I verified that
> there were no regressions in the CI, but the CI doesn't run 4.16+, so
> I wouldn't expect much to show up there.
>
I doubt that running Piglit and CTS alone would have caught much,
because they shouldn't ever have been particularly sensitive to L3 state
leaks since they don't use MI_RESTORE_INHIBIT. That said this seems
like the right thing to do to me:
Reviewed-by: Francisco Jerez <currojerez at riseup.net>
> 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 cc9b3486743..d275b28a4b9 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -2654,6 +2654,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;
>
> --
> 2.16.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 227 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180216/25e7536c/attachment.sig>
More information about the mesa-dev
mailing list