[Mesa-dev] [PATCH] radeon/llvm: Allocate space for kernel metadata operands

Tom Stellard tom at stellard.net
Thu Jul 3 09:29:36 PDT 2014


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.stellard at amd.com>

I forgot to mention we should CC stable on this patch.
> 
> > Signed-off-by: Aaron Watry <awatry at gmail.com>
> > CC: Tom Stellard <thomas.stellard at 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 at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list