From b571fef9e2efacb63854d17e2c8486fc90c0668b Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Tue, 10 Nov 2020 11:50:29 +0100 Subject: [PATCH] ir3: Fix list corruption in legalize_block() We forgot to remove the instruction under consideration from instr_list before inserting it into the block's list, which caused instr_list to become corrupted. This happened to work but caused further corruption in some rare scenarios. Fixes: adf1659 ("freedreno/ir3: use standard list implementation") Part-of: (cherry picked from commit 8e11f0560e80e6057d1149bca0b40c7e88a4d981) --- .pick_status.json | 2 +- src/freedreno/ir3/ir3_legalize.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index d3169815b4d..906b50b2d30 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -985,7 +985,7 @@ "description": "ir3: Fix list corruption in legalize_block()", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "adf1659ff5f07d907eca552be3b566e408c8601e" }, diff --git a/src/freedreno/ir3/ir3_legalize.c b/src/freedreno/ir3/ir3_legalize.c index 262a9c3ab3c..fa193b5791e 100644 --- a/src/freedreno/ir3/ir3_legalize.c +++ b/src/freedreno/ir3/ir3_legalize.c @@ -243,6 +243,7 @@ legalize_block(struct ir3_legalize_ctx *ctx, struct ir3_block *block) samgp->flags |= IR3_INSTR_SY; } } else { + list_delinit(&n->node); list_addtail(&n->node, &block->instr_list); }