HomeFreeBSD

Merge commit 5300a6731e98 from llvm-project (by Jonathan Peyton):

Description

Merge commit 5300a6731e98 from llvm-project (by Jonathan Peyton):

[OpenMP] Fix re-locking hang found in issue 86684 (#88539)

This was initially reported here (including stacktraces):
https://stackoverflow.com/questions/78183545/does-compiling-imagick-with-openmp-enabled-in-freebsd-13-2-cause-sched-yield

If `__kmp_register_library_startup()` detects that another instance of
the library is present, `__kmp_is_address_mapped()` is eventually
called. which uses `kmpc_alloc()` to allocate memory. This function
calls `__kmp_entry_thread()` to access the thread-local memory pool,
which is a bad idea during initialization. This macro internally calls
`__kmp_get_global_thread_id_reg()` which sets the bootstrap lock at the
beginning (before calling `__kmp_register_library_startup()`).

The fix is to use `KMP_INTERNAL_MALLOC()`/`KMP_INTERNAL_FREE()` instead
of `kmpc_malloc()`/`kmpc_free()`. `KMP_INTERNAL_MALLOC` and
`KMP_INTERNAL_FREE` do not use any bootstrap locks. They just translate
to `malloc()`/`free()` and are meant to be used during library
initialization before other library-specific allocators have been
initialized.

Fixes: #86684

This should fix OpenMP processes sometimes getting locked with 100% CPU
usage, endlessly calling sched_yield(2).

PR: 278845
Reported by: Cassidy B. Larson <cbl@cbl.us>
MFC after: 3 days

(cherry picked from commit da15ed2e982180198f77a0fa26628e6d414cb10e)

Details

Provenance
dimAuthored on Wed, May 8, 4:55 PM
Parents
rG85e63d952d5d: nfsd: Fix Link conformance with RFC8881 for delegations
Branches
Unknown
Tags
Unknown