[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