From 8a5ef4411b8cb8589d5b5939afaf196d93f762e8 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Tue, 16 Jul 2024 17:27:05 +0200 Subject: [PATCH] rusticl/queue: properly check all dependencies for an error status Cc: mesa-stable Reviewed-by: @LingMan Part-of: --- src/gallium/frontends/rusticl/core/queue.rs | 22 +++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/gallium/frontends/rusticl/core/queue.rs b/src/gallium/frontends/rusticl/core/queue.rs index 35dd589f64f..3760aca34ae 100644 --- a/src/gallium/frontends/rusticl/core/queue.rs +++ b/src/gallium/frontends/rusticl/core/queue.rs @@ -9,6 +9,7 @@ use mesa_rust::pipe::context::PipeContext; use mesa_rust_util::properties::*; use rusticl_opencl_gen::*; +use std::cmp; use std::mem; use std::ops::Deref; use std::sync::mpsc; @@ -133,15 +134,20 @@ impl Queue { flush_events(&mut flushed, &ctx); } - // We have to wait on user events or events from other queues. - let err = e - .deps - .iter() - .filter(|ev| ev.is_user() || ev.queue != e.queue) - .map(|e| e.wait()) - .find(|s| *s < 0); + // check if any dependency has an error + let mut err = CL_SUCCESS as cl_int; + for dep in &e.deps { + // We have to wait on user events or events from other queues. + let dep_err = if dep.is_user() || dep.queue != e.queue { + dep.wait() + } else { + dep.status() + }; - if let Some(err) = err { + err = cmp::min(err, dep_err); + } + + if err < 0 { // If a dependency failed, fail this event as well. e.set_user_status(err); continue;