On Thu, Jul 3, 2014 at 11:29 AM, Tom Stellard <t...@stellard.net> wrote: > On Thu, Jul 03, 2014 at 10:56:24AM -0400, Tom Stellard wrote: >> On Wed, Jul 02, 2014 at 04:34:24PM -0500, Aaron Watry wrote: >> > Previously, we were assuming that kernel metadata nodes only had 1 operand. >> > >> > Kernels which have attributes can have more than 1, e.g.: >> > !0 = metadata !{void (i32 addrspace(1)*)* @testKernel, metadata !1} >> > !1 = metadata !{metadata !"work_group_size_hint", i32 4, i32 1, i32 1} >> > >> > Attempting to get the kernel without the correct number of attributes led >> > to memory corruption and luxrays crashing out. >> > >> > Fixes the cl/program/execute/attributes.cl piglit test. >> > >> >> Thanks for tracking this down. >> >> Reviewed-by: Tom Stellard <thomas.stell...@amd.com> > > I forgot to mention we should CC stable on this patch.
I'll add it in the commit message before I push. --Aaron >> >> > Signed-off-by: Aaron Watry <awa...@gmail.com> >> > CC: Tom Stellard <thomas.stell...@amd.com> >> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=76223 >> > --- >> > src/gallium/drivers/radeon/radeon_llvm_util.c | 10 +++++++--- >> > 1 file changed, 7 insertions(+), 3 deletions(-) >> > >> > diff --git a/src/gallium/drivers/radeon/radeon_llvm_util.c >> > b/src/gallium/drivers/radeon/radeon_llvm_util.c >> > index 2ace91f..ec11559 100644 >> > --- a/src/gallium/drivers/radeon/radeon_llvm_util.c >> > +++ b/src/gallium/drivers/radeon/radeon_llvm_util.c >> > @@ -100,13 +100,17 @@ LLVMModuleRef >> > radeon_llvm_get_kernel_module(LLVMContextRef ctx, unsigned index, >> > kernel_metadata = MALLOC(num_kernels * sizeof(LLVMValueRef)); >> > LLVMGetNamedMetadataOperands(mod, "opencl.kernels", kernel_metadata); >> > for (i = 0; i < num_kernels; i++) { >> > - LLVMValueRef kernel_signature, kernel_function; >> > + LLVMValueRef kernel_signature, *kernel_function; >> > + unsigned num_kernel_md_operands; >> > if (i == index) { >> > continue; >> > } >> > kernel_signature = kernel_metadata[i]; >> > - LLVMGetMDNodeOperands(kernel_signature, &kernel_function); >> > - LLVMDeleteFunction(kernel_function); >> > + num_kernel_md_operands = >> > LLVMGetMDNodeNumOperands(kernel_signature); >> > + kernel_function = MALLOC(num_kernel_md_operands * sizeof >> > (LLVMValueRef)); >> > + LLVMGetMDNodeOperands(kernel_signature, kernel_function); >> > + LLVMDeleteFunction(*kernel_function); >> > + FREE(kernel_function); >> > } >> > FREE(kernel_metadata); >> > radeon_llvm_optimize(mod); >> > -- >> > 1.9.1 >> > >> > _______________________________________________ >> > mesa-dev mailing list >> > mesa-dev@lists.freedesktop.org >> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev