Repository navigation
Conversation
|
Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.
Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.
|
jotitadev
left a comment
There was a problem hiding this comment.
Linux run, since the description lists Linux as not built.
Ubuntu 26.04, Intel i7-8700, GCC 15.2, Ninja, Release, BUILD_TESTING=ON, full build. main 31cbb55 with head 46d1178 merged on top.
- With the PR:
guest_memorypasses 3 runs of 3 (0.6 s each). - Test kept,
core/libs/prx/libc/src/GuestAllocations.cppreverted tomain:guest_memoryaborts with the same failure as on Windows:It fails in about 2 s, so the new[gpu] leased allocation 0x200d68000+0x8000 still pinned after 8 recorder syncs Guest memory check failed at core/libs/tests/GuestMemory.cpp:1497setenv("APS5_PIN_WAIT_MS", "1000", 1)for non-Windows hosts is what keeps it short. - Non-GPU suite (
ctest -E "^agc|gpu|vulkan|video_out" -j8): 648/650, same asmainon this machine. The 2 failures (file_writer_binary,file_writer_text) also fail onmainhere.
Written with AI assistance (Claude Code). I ran the builds and tests above on my machine.
|
@adriadam10 a short request for review of this PR. Head AI-assisted (Claude Code). |
|
Rebase handoff — rebased onto current Verified on Linux (CachyOS, kernel 7.2.9, GCC 16.2.1, Ninja, Release,
To pick it up: Head is |
46d1178 to
95fabdb
Compare
|
Rebased onto Tested on AI-assisted (Claude Code). |
95fabdb to
b2dbb48
Compare
|
Rebased onto Tested on AI-assisted (Claude Code). |
RequireUnpinned waits for the GPU work that leases a range through the driver's waiter, but GuestAllocationsAcquireAll and Acquire copy every registered range into each new lease, so a driver worker that starts an address-based build between the waiter's return and the re-lock pins the range again. A title that draws every frame keeps replacing the lease, and the free fails after APS5_PIN_WAIT_MS. A mutation that finds a pinned range now records it as retiring until the wait ends; Acquire and AcquireAll leave retiring ranges out and do not cache the lease while one is recorded. guest_memory gains a check that replaces the lease from the waiter the way a worker does: without the change the unmap fails with "still pinned after 8 recorder syncs". Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
b2dbb48 to
b10615d
Compare
|
Rebased again onto Tested on AI-assisted (Claude Code). |
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Pushed AI-assisted (Claude Code). |
What
Brigandine Abyss (PPSA27752) aborts 5 to 6 minutes after start with
(
PPSA27752_rH/run_210801.errlines 132 and 135;run_211614.errlines 131 and 136 show it for0x11a6000000+0x1a00000, after[gpu] storage image …: memory no longer registered; 1 pending ranges dropped. Storage images listed at lines 124-128 of the first run lie inside the pinned allocation.)GuestAllocationsRequireUnpinnedwaits for the GPU work that leases a range through the driver's waiter.GuestAllocationsAcquireAllandGuestAllocationsAcquirecopy every registered range into each new lease, including the range that is being released. A driver worker that starts an address-based build between the waiter's return and the re-lock therefore pins the range again; the comment inRequireUnpinneddescribes this as rare. A title that draws every frame repeats it each round, and afterAPS5_PIN_WAIT_MSthe free fails.AcquireandAcquireAllleave retiring ranges out and do not cache the lease while one is recorded; the caches are cleared when the record is removed.guest_memorygainsCheckPinnedRangeIsLeftOutOfNewLeases: a pin waiter replaces the lease with a newAcquireAlllease the way a worker does, and the range is unmapped. Without the change the unmap fails with the line above (still pinned after 8 recorder syncs,GuestMemory.cpp:1622); with it the unmap succeeds, the old lease no longer holds the range, and a laterAcquireAlllease holds a new mapping.This shows the mechanism, not that Brigandine hangs this way: a diagnostic run of the title (
PPSA27752_rD1/run_215729.err) ended earlier in a different stop (the engine's 120 s watchdog on the render thread) and did not reach the pin, so the lease source in the title is not measured.Tested
Windows 10 (19045), MinGW-w64 GCC 15.2.0, Release, on
main324e0e48e+ this commit:ctest -R ^guest_memory$: passes with the change; fails without it (the source file reverted, test kept):Guest memory check failed at core/libs/tests/GuestMemory.cpp:1622, exit code0xc0000409.python tools/check_conventions.py --base upstream/mainpasses.GuestAllocations.cppL40-L47 (the overlap bot lists it); the topics are different, whichever lands second needs a rebase. perf(memory): restrict registry work to affected ranges #1324 also changescore/libs/prx/libc/src/GuestAllocations.cppandinclude/GuestAllocations.hpp(registry work per range); the two are unrelated topics, whichever lands second needs a rebase.Checklist
main; no other open PR implements the same changeNotImplemented_nid_no_patch); silent stubs are listed in TechnicalDebt (docs/dev/debt/libc.md).mdfiles or images added to the repositoryAI-assisted (Claude Code).
🤖 Generated with Claude Code