[all-commits] [llvm/llvm-project] 233386: [Libomptarget] Fix data mapping on dynamic loads (...

Joseph Huber via All-commits all-commits at lists.llvm.org
Sat Feb 3 13:28:31 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 2333865546cb6d4cda7b511ed07b8cb66a0d4eab
      https://github.com/llvm/llvm-project/commit/2333865546cb6d4cda7b511ed07b8cb66a0d4eab
  Author: Joseph Huber <huberjn at outlook.com>
  Date:   2024-02-03 (Sat, 03 Feb 2024)

  Changed paths:
    M openmp/libomptarget/include/device.h
    M openmp/libomptarget/src/omptarget.cpp
    M openmp/libomptarget/test/offloading/dynamic_module_load.c

  Log Message:
  -----------
  [Libomptarget] Fix data mapping on dynamic loads (#80559)

Summary:
The current logic tries to map target mapping tables to the current
device. Right now it assumes that data is only mapped a single time per
device. This is only true if we have a single instance of the runtime
running on a single program. However, in the case of dynamic library
loads or shared libraries, this may happen multiple times.

Given a case of a simple dynamic library load which has its own target
kernel instruction, the current logic had only the first call to
`__tgt_target_kernel` to the data mapping for that device. Then, when
the next dynamic library load got called, it would see that the global
were already mapped for that device and skip registering its own
entires, even though they were distinct. This resulted in none of the
mappings being done and hitting an assertion.

This patch simply gets rid of this per-device check. The check should
instead be on the host offloading entries. We already have logic that
calls `continue` if we already have entries for that pointer, so we can
simply rely on that instead.




More information about the All-commits mailing list