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

Ben Widawsky ben at bwidawsk.net
Wed May 27 22:17:51 PDT 2015


I forgot to mention that the predecessor to this patch fixed around 70 BSW
failures on Jenkins. Note that our current Jenkins baseline for BSW is probably
not fully baked atm.

On Wed, May 27, 2015 at 10:16:04PM -0700, Ben Widawsky wrote:
> 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