[Mesa-dev] [Mesa-stable] [PATCH 3/3] amd: Apply elf relocations and allow code with relocations

Jan Vesely jan.vesely at rutgers.edu
Fri Jun 14 06:13:31 UTC 2019


On Thu, 2019-06-13 at 21:20 +0200, Dieter Nützel wrote:
> Am 13.06.2019 07:10, schrieb Marek Olšák:
> > FYI, I just pushed the new linker.
> > 
> > Marek
> 
> Thank you very much Marek and _Nicolai_ for this GREAT stuff.
> It brings back some speed after 1/8 drop with glmark2, lately.
> Maybe my amd-staging-drm-next tree (5.2-rc1) didn't honor the kernel 
> mitigation parameter right.
> 
> @Jan
> Go ahead with your nice relocation and image work.
> Send me what you have in the works.

The relocation work is no longer needed as the new linker handles
things.
The corruption is caused either by (still faulty) conversion builtins,
or incorrect buffer coherence handling. Both need fixing, but I'm not
sure which one is to blame in this case.

> 
> Latest Mesa git (with Nicolai's new linker) let all 3 luxmark versions 
> run.
> Only 'Hotel lobby' (with v3.0 and v3.1) show some corruption but do NOT 
> crash any longer. Numbers for 'Neumann TLM-102 SE' (medium) show ~43000K 
> (!!!).
> 
> https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.phoronix.com%2Fforums%2Fforum%2Fphoronix%2Flatest-phoronix-articles%2F1106085-linux-kernel-set-to-expose-hidden-nvidia-hda-controllers-helping-laptop-users%3Fp%3D1106199%23post1106199&data=02%7C01%7Cjan.vesely%40cs.rutgers.edu%7Cae4545df023e4910433c08d6f03438a8%7Cb92d2b234d35447093ff69aca6632ffe%7C1%7C0%7C636960504419864592&sdata=xSOotxsWyJDb2J14lNk1NV4bK2nRK3%2FzWoxNyRj6IqU%3D&reserved=0
> 
> Blender crash as expected ;-)
> 
> /home/dieter> trying to save userpref at 
> /home/dieter/.config/blender/2.79/config/userpref.blend ok
> Read blend: /data/Blender/barbershop_interior_gpu.blend
> scripts disabled for "/data/Blender/barbershop_interior_gpu.blend", 
> skipping 'generate_customprops.py'
> skipping driver 'var', automatic scripts are disabled
> skipping driver 'var', automatic scripts are disabled
> skipping driver 'var', automatic scripts are disabled
> skipping driver 'var', automatic scripts are disabled
> skipping driver 'var', automatic scripts are disabled
> skipping driver 'var', automatic scripts are disabled
> skipping driver 'var', automatic scripts are disabled
> skipping driver 'var', automatic scripts are disabled
> skipping driver 'var', automatic scripts are disabled
> Device init success
> Compiling OpenCL program split
> Kernel compilation of split finished in 8.41s.
> 
> Compiling OpenCL program base
> Kernel compilation of base finished in 4.55s.
> 
> Compiling OpenCL program denoising
> Kernel compilation of denoising finished in 2.08s.
> 
> blender: ../src/gallium/drivers/radeonsi/si_compute.c:319: 
> si_set_global_binding: Assertion `first + n <= MAX_GLOBAL_BUFFERS' 
> failed.
> 
> [1]    Abbruch                       blender (core dumped)

The number of max global buffers was bumped in 06bf56725d to fix
similar crash in luxmark. I guess it needs another bump.

Jan

> 
> Gretings,
> Dieter
> 
> > On Mon, Jun 3, 2019 at 10:39 PM Jan Vesely <jan.vesely at rutgers.edu>
> > wrote:
> > 
> > > Fixes piglits:
> > > call.cl [1]
> > > calls-larget-struct.cl [2]
> > > calls-struct.cl [3]
> > > calls-workitem-id.cl [4]
> > > realign-stack.cl [5]
> > > tail-calls.cl [6]
> > > 
> > > Cc: mesa-stable at lists.freedesktop.org
> > > Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
> > > ---
> > > The piglit test now pass using llvm-7,8,git.
> > > ImageMagick works on my raven, but some test still fail on
> > > carrizo/iceland.
> > > Other workloads (like shoc) that used function calls also work ok.
> > > ocltoys work after removing static keyword from .cl files.
> > > src/amd/common/ac_binary.c                | 30
> > > +++++++++++++++++++++++
> > > src/gallium/drivers/radeonsi/si_compute.c |  6 -----
> > > 2 files changed, 30 insertions(+), 6 deletions(-)
> > > 
> > > diff --git a/src/amd/common/ac_binary.c b/src/amd/common/ac_binary.c
> > > index 18dc72c61f0..4d152fcf1be 100644
> > > --- a/src/amd/common/ac_binary.c
> > > +++ b/src/amd/common/ac_binary.c
> > > @@ -178,6 +178,36 @@ bool ac_elf_read(const char *elf_data, unsigned
> > > elf_size,
> > > 
> > > parse_relocs(elf, relocs, symbols, symbol_sh_link, binary);
> > > 
> > > +       // Apply relocations
> > > +       for (int i = 0; i < binary->reloc_count; ++i) {
> > > +               struct ac_shader_reloc *r = &binary->relocs[i];
> > > +               uint32_t *loc = (uint32_t*)(binary->code +
> > > r->offset);
> > > +               /* Section target relocations store symbol offsets
> > > as
> > > +                * values in reloc location. We're expected to
> > > adjust it for
> > > +                * start of the section. However, R_AMDGPU_REL32 are
> > > +                * PC relative relocations, so we need to recompute
> > > the
> > > +                * delta between reloc locatin and the target
> > > adress.
> > > +                */
> > > +               if (r->target_type == 0x3) { // section relocation
> > > +                       uint32_t target_offset = *loc; // already
> > > adjusted
> > > +                       int64_t diff = target_offset - r->offset;
> > > +                       if (r->type == 0xa) { // R_AMDGPU_REL32_LO
> > > +                               // address of the 'lo' instruction
> > > is 4B below
> > > +                               // the relocation point, but the
> > > target has
> > > +                               // alredy been adjusted.
> > > +                               *loc = (diff & 0xffffffff);
> > > +                       } else if (r->type == 0xb) { //
> > > R_AMDGPU_REL32_HI
> > > +                               // 'hi' relocation is 8B above 'lo'
> > > relocation
> > > +                               *loc = ((diff - 8) >> 32);
> > > +                       } else {
> > > +                               success = false;
> > > +                               fprintf(stderr, "Unsupported section
> > > relocation: type: %d, offset: %lx, value: %x\n",
> > > +                                               r->type, r->offset,
> > > *loc);
> > > +                       }
> > > +               } else
> > > +                       success = false;
> > > +       }
> > > +
> > > if (elf){
> > > elf_end(elf);
> > > }
> > > diff --git a/src/gallium/drivers/radeonsi/si_compute.c
> > > b/src/gallium/drivers/radeonsi/si_compute.c
> > > index b9cea00eeeb..88631369a62 100644
> > > --- a/src/gallium/drivers/radeonsi/si_compute.c
> > > +++ b/src/gallium/drivers/radeonsi/si_compute.c
> > > @@ -246,12 +246,6 @@ static void *si_create_compute_state(
> > > const amd_kernel_code_t *code_object =
> > > si_compute_get_code_object(program,
> > > 0);
> > > code_object_to_config(code_object,
> > > &program->shader.config);
> > > -                       if (program->shader.binary.reloc_count != 0)
> > > {
> > > -                               fprintf(stderr, "Error: %d
> > > unsupported relocations\n",
> > > -
> > > program->shader.binary.reloc_count);
> > > -                               FREE(program);
> > > -                               return NULL;
> > > -                       }
> > > } else {
> > > 
> > > si_shader_binary_read_config(&program->shader.binary,
> > > &program->shader.config, 0);
> > > --
> > > 2.21.0
> > > 
> > > _______________________________________________
> > > mesa-stable mailing list
> > > mesa-stable at lists.freedesktop.org
> > > https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Fmesa-stable&data=02%7C01%7Cjan.vesely%40cs.rutgers.edu%7Cae4545df023e4910433c08d6f03438a8%7Cb92d2b234d35447093ff69aca6632ffe%7C1%7C0%7C636960504419864592&sdata=1FJdNkGa5TxyqB1sHmfAwrlY0%2F4vS5qX8oQER7ftwz4%3D&reserved=0
> > 
> > Links:
> > ------
> > [1] https://nam02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcall.cl&data=02%7C01%7Cjan.vesely%40cs.rutgers.edu%7Cae4545df023e4910433c08d6f03438a8%7Cb92d2b234d35447093ff69aca6632ffe%7C1%7C0%7C636960504419864592&sdata=Dlr6cx1WZBWSJF9%2BcYXtr2%2F3cwGcTd%2BC9DH7Bz9SH%2FI%3D&reserved=0
> > [2] https://nam02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcalls-larget-struct.cl&data=02%7C01%7Cjan.vesely%40cs.rutgers.edu%7Cae4545df023e4910433c08d6f03438a8%7Cb92d2b234d35447093ff69aca6632ffe%7C1%7C0%7C636960504419864592&sdata=IPYn3IxZ4Dd5Jz6a%2BdkvDQNsr9Arl4fd%2FZ4QhoiDJSg%3D&reserved=0
> > [3] https://nam02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcalls-struct.cl&data=02%7C01%7Cjan.vesely%40cs.rutgers.edu%7Cae4545df023e4910433c08d6f03438a8%7Cb92d2b234d35447093ff69aca6632ffe%7C1%7C0%7C636960504419864592&sdata=DJp7b4KrEONv8njsGepMCikwY0xdppzgEjfHqtDpppI%3D&reserved=0
> > [4] https://nam02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcalls-workitem-id.cl&data=02%7C01%7Cjan.vesely%40cs.rutgers.edu%7Cae4545df023e4910433c08d6f03438a8%7Cb92d2b234d35447093ff69aca6632ffe%7C1%7C0%7C636960504419864592&sdata=dOq3Hf4u%2F1W5rCnuM3cEjcjs%2B96hzJAEZDZAKjAZbso%3D&reserved=0
> > [5] https://nam02.safelinks.protection.outlook.com/?url=http%3A%2F%2Frealign-stack.cl&data=02%7C01%7Cjan.vesely%40cs.rutgers.edu%7Cae4545df023e4910433c08d6f03438a8%7Cb92d2b234d35447093ff69aca6632ffe%7C1%7C0%7C636960504419864592&sdata=u8wkGaETXx49%2F0%2BoSiPlDH0YMU9Up%2BtESH7tD0g0Y64%3D&reserved=0
> > [6] https://nam02.safelinks.protection.outlook.com/?url=http%3A%2F%2Ftail-calls.cl&data=02%7C01%7Cjan.vesely%40cs.rutgers.edu%7Cae4545df023e4910433c08d6f03438a8%7Cb92d2b234d35447093ff69aca6632ffe%7C1%7C0%7C636960504419864592&sdata=M%2FwOVtaI%2Frs%2F9ufxj%2F5Y5jP2k1f9L0ERqMeUWWABqrs%3D&reserved=0
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Fmesa-dev&data=02%7C01%7Cjan.vesely%40cs.rutgers.edu%7Cae4545df023e4910433c08d6f03438a8%7Cb92d2b234d35447093ff69aca6632ffe%7C1%7C0%7C636960504419864592&sdata=vp5v%2FbxMtM67yCAkCAC%2F5m%2BHMCVz80XqvDdKHpFZ%2FFU%3D&reserved=0

-- 
Jan Vesely <jan.vesely at rutgers.edu>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190614/e0a7d08e/attachment.sig>


More information about the mesa-dev mailing list