[Mesa-dev] [PATCH] i965: Disable compaction for EOT send messages

Mark Janes mark.a.janes at intel.com
Thu May 28 17:01:10 PDT 2015

This patch allows us to enable our Braswell in our continuous
integration pool.  Without it, gpu hangs prevent piglit from

Getting Braswell enabled in the pool will help us prevent future
regressions on the platform.

Tested-by: Mark Janes <mark.a.janes at intel.com>

Ben Widawsky <benjamin.widawsky at intel.com> writes:

> AFAICT, there is no real way to make sure a send message with EOT is properly
> ignored from compact, nor can I see a way to actually encode EOT while
> compacting. Before the single send optimization we'd always bail because we hit
> the is_immediate && !is_compactable_immediate case. However, with single send,
> is_immediate is not true, and so we end up trying to compact the un-compactible.
> Without this, any compacting single send instruction will hang because the EOT
> isn't there. I am not sure how I didn't hit this when I originally enabled the
> optimization.  I didn't check if some surrounding code changed.
> NOTE: This needs another piglit run or two before merge.
> I know Neil and Matt were both looking into this. I did a quick search and
> didn't see any patches out there to handle this. Please ignore if this has
> already been sent by someone. (Direct me to it and I will review it).
> Cc: Matt Turner <mattst88 at gmail.com>
> Cc: Neil Roberts <neil at linux.intel.com>
> Cc: Mark Janes <mark.a.janes at intel.com>
> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> ---
>  src/mesa/drivers/dri/i965/brw_eu_compact.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> diff --git a/src/mesa/drivers/dri/i965/brw_eu_compact.c b/src/mesa/drivers/dri/i965/brw_eu_compact.c
> index 69cb114..67f0b45 100644
> --- a/src/mesa/drivers/dri/i965/brw_eu_compact.c
> +++ b/src/mesa/drivers/dri/i965/brw_eu_compact.c
> @@ -849,6 +849,12 @@ set_3src_source_index(const struct brw_device_info *devinfo,
>  static bool
>  has_unmapped_bits(const struct brw_device_info *devinfo, brw_inst *src)
>  {
> +   /* EOT can only be mapped on a send if the src1 is an immediate */
> +   if ((brw_inst_opcode(devinfo, src) == BRW_OPCODE_SENDC ||
> +        brw_inst_opcode(devinfo, src) == BRW_OPCODE_SEND) &&
> +       brw_inst_eot(devinfo, src))
> +      return true;
> +
>     /* Check for instruction bits that don't map to any of the fields of the
>      * compacted instruction.  The instruction cannot be compacted if any of
>      * them are set.  They overlap with:
> -- 
> 2.4.1

More information about the mesa-dev mailing list