Mesa (master): clover: Check for executables before enqueueing a kernel

Francisco Jerez currojerez at kemper.freedesktop.org
Thu Jan 12 00:44:27 UTC 2017


Module: Mesa
Branch: master
Commit: 4e0d171d7eb6accbf8f381530eedbc9ff86b54fb
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4e0d171d7eb6accbf8f381530eedbc9ff86b54fb

Author: Pierre Moreau <pierre.morrow at free.fr>
Date:   Fri Dec 30 00:29:20 2016 +0100

clover: Check for executables before enqueueing a kernel

Without this check, the kernel::bind() method would fail with a
std::out_of_range exception, letting an exception escape from the
library into the client, rather than returning the corresponding error
code CL_INVALID_PROGRAM_EXECUTABLE.

Signed-off-by: Pierre Moreau <pierre.morrow at free.fr>
Reviewed-by: Francisco Jerez <currojerez at riseup.net>

---

 src/gallium/state_trackers/clover/api/kernel.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/clover/api/kernel.cpp b/src/gallium/state_trackers/clover/api/kernel.cpp
index 73ba34a..b665773 100644
--- a/src/gallium/state_trackers/clover/api/kernel.cpp
+++ b/src/gallium/state_trackers/clover/api/kernel.cpp
@@ -215,7 +215,10 @@ namespace {
             }, kern.args()))
          throw error(CL_INVALID_KERNEL_ARGS);
 
-      if (!count(q.device(), kern.program().devices()))
+      // If the command queue's device is not associated to the program, we get
+      // a module, with no sections, which will also fail the following test.
+      auto &m = kern.program().build(q.device()).binary;
+      if (!any_of(type_equals(module::section::text_executable), m.secs))
          throw error(CL_INVALID_PROGRAM_EXECUTABLE);
    }
 




More information about the mesa-commit mailing list