panfrost: Fix infinite loop spilling
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 19 Feb 2021 13:58:02 +0000 (08:58 -0500)
committerMarge Bot <eric+marge@anholt.net>
Mon, 22 Feb 2021 19:17:49 +0000 (19:17 +0000)
At least this way failed RA will crash (by having no spill node to pick)
instead? Seen in
dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.21 on
Bifrost.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9164>

src/panfrost/util/lcra.c

index d922972..4965282 100644 (file)
@@ -224,7 +224,9 @@ lcra_count_constraints(struct lcra_state *l, unsigned i)
 signed
 lcra_get_best_spill_node(struct lcra_state *l)
 {
-        float best_benefit = -1.0;
+        /* If there are no constraints on a node, do not pick it to spill under
+         * any circumstance, or else we would hang rather than fail RA */
+        float best_benefit = 0.0;
         signed best_node = -1;
 
         for (unsigned i = 0; i < l->node_count; ++i) {