Repository navigation
docs: the image's HSA runtime registers a device — the 2026-10-31 arm pointed at a lone file - #964
Conversation
…that cannot register a device
`docs/hrx.md` and `app/hrx_runtime.h` said the release-shipped libhsa-runtime64.so.1 "does
not register HRX0 for a dev build". Measured, that is a property of the directory the arm
used, not of the runtime:
* the image installs the full 10-file flat kit (the runtime plus its eight
librocm_sysdeps_* siblings and librocprofiler-register.so.0); with that closure the
4,957,049 B / f6ef689d163b42de... runtime exports all 121 HSA entry points the driver
resolves by name, and libhrx's hrx_cts_device passes 7/7 device cases on it;
* the same bytes as a lone file cannot be dlopen'ed at all
(librocm_sysdeps_elf.so.1: cannot open shared object file) - which is what the
2026-10-31 A/B arm pointed IREE_HAL_AMDGPU_LIBHSA_PATH at, so its "no HRX0" outcome was
a closure gap, not a runtime-build difference;
* a distro ROCr genuinely cannot work: 1.18.0 lacks hsa_amd_queue_create, one of the 121,
so a process that falls back to the bare soname gets no device.
Also record the trap that follows: an explicit runtime path that cannot be loaded does not
fail loudly - the loader appends that error, keeps searching, and the error a run prints is
attributed to the distro copy it fell through to.
docs/releases.md gains the image copy beside the pin (a release check's identity row reports
the image's digest, a dev build logs the pin), so each digest can be matched to its own row.
|
#964 ready for review at cd615e6 — docs-only (3 files, +43/-12): Self-checks: |
PR Reviewer Guide 🔍(Review updated until commit e102be2)Here are some key observations to aid the review process:
|
|
#964 ready for review at cd615e6 — all checks green: The earlier |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at cd615e663. Docs only, and the numbers in it check out against the files on this box.
Both digests and both sizes are exactly right:
4,957,049 B f6ef689d163b42de… …/rootfs-skeleton/opt/rocm-therock/lib/libhsa-runtime64.so.1 (the image's copy)
5,141,585 B 21a6682452e159cf… …/_rocm_sdk_core/lib/libhsa-runtime64.so.1 (the dev pin)
and the same image copy appears in ~/wt/os3i/sfs-c16/opt/rocm-therock/lib/, i.e. it really is what a built SFS carries.
The "1.22 adds five" claim holds arithmetically against the exported symbol sets: the image's 1.21.0 exports 279 hsa* symbols and the pin's 1.22.0 exports 284 — five more, exactly as the text says. (The "121" is the driver's resolved set, not total exports, so the two numbers are not in conflict.)
The two corrections are the kind this doc needed: "the arm pointed at a single-file extract" is a defect of the measurement, not of the runtime, and saying so stops the next person from concluding from that table that the image's ROCr is broken. Same for the fall-through caveat — a runtime that cannot be dlopened does not fail loudly, and the error then names the distro copy rather than the path you passed, which is the trap I hit myself in an earlier session on this box.
One nit: app/hrx_runtime.h's comment now says "several libhsa-runtime64.so.1 copies exist on a box", and docs/hrx.md around line 955 still says "Three libhsa-runtime64.so.1 exist on a box" in the paragraph just below the one this PR rewrites. Three is still true for this box, so it is not wrong — just note that the header no longer says a number and the doc still does.
|
Persistent review updated to latest commit e4a1037 |
|
Persistent review updated to latest commit 40520fe |
|
Persistent review updated to latest commit e5f20d9 |
|
Persistent review updated to latest commit 43256d5 |
|
Persistent review updated to latest commit 8d81e99 |
|
Persistent review updated to latest commit 824bbca |
|
Persistent review updated to latest commit 402f615 |
|
Persistent review updated to latest commit c7c8acc |
|
Persistent review updated to latest commit e102be2 |
Root cause
docs/hrx.md(the 2026-10-31 SVM A/B table and "The HSA runtime" bullet), and the comment inapp/hrx_runtime.h,all say the release-shipped
libhsa-runtime64.so.1"does not registerHRX0for a dev build" and that a distrocopy is simply "untested". The A/B's release arm is
REL=$HOME/wt/engine-c18/libhsa-release/libhsa-runtime64.so.1(
~/lb/tattn-hsa-ab.sh:20) — a directory that holds that one file and nothing else — while the image installs thefull 10-file flat kit (the runtime plus its eight
librocm_sysdeps_*siblings andlibrocprofiler-register.so.0).ROCr 1.21.0's build has those as
NEEDED, so the lone file cannot bedlopened at all:The "no HRX0" row measured the directory, not the runtime.
Measured after (this box, one
gpu-holdticket,hrx-system@82804197b, no-SVM trio,HRX_CTS_DEVICE=gpu:0)Probe = libhrx's own
hrx_cts_device(7 Catch2 cases, all device-bound). Each arm's runtime is confirmed from itsown
openattrace:ldconfig)5b113248…hsa_amd_queue_createnot found)IREE_HAL_AMDGPU_LIBHSA_PATH= the pin21a66824…LD_LIBRARY_PATH= the image's 10-file kitf6ef689d…Symbol check (
util/libhsa_tables.h→ 121 entry points the driver resolves by name): the pin and the image copy exportall 121; 1.22 adds five the driver never resolves and 1.21 adds none over it, so the two builds are interchangeable
by symbol set.
1.18.0misses exactlyhsa_amd_queue_create.What the patch does
docs/hrx.md: keeps the dated A/B table, and adds the two corrections under it (the arm's directory, and the closuremeasurement), plus the diagnostic trap: a runtime path that cannot be
dlopened does not fail loudly — the loaderappends that error, keeps searching, falls through to the bare soname, and the error printed names the distro copy
(
runtime/…/amdgpu/util/libhsa.c:252-278,:349-400,:410-424). "Missing symbol in the system library" usuallymeans the runtime you named could not be loaded.
docs/hrx.md"The runtime is named at init" bullet: the reason to name it is a missing entry point in an old ROCr anda missing closure, not "the release copy can't register a device".
app/hrx_runtime.h: the same sentence in the comment over theHRX: HSA runtime <path> sha256 <hex>line (commentonly, no behaviour change).
docs/releases.md: the image's runtime row beside the pin, with build ids (1.22.0-local-build-430d3d8fclang 24 vs1.21.0-local-build-d134b782clang 23), so a release check'sidentitydigest (f6ef689d…, unchanged on the c17,c19 and c20 board boots) matches a row instead of nothing.
No
closes #: this is the doc half of engine#713's criterion 5 (a docs fix, nothing to close).tools/copyright.py --checkclean; the only code touched is a comment, so no behaviour changes (CI'sbuildjob still runs it).