<feed xmlns='http://www.w3.org/2005/Atom'>
<title>eglantine-cirakg/src/core/hle/kernel, branch nx2</title>
<subtitle>Mirror of github.com/cira0100/Eglantine-public nx2, a fork of Djihads80/Eglantine.</subtitle>
<id>https://git.cirakg.xyz/eglantine-cirakg/atom?h=nx2</id>
<link rel='self' href='https://git.cirakg.xyz/eglantine-cirakg/atom?h=nx2'/>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/'/>
<updated>2026-11-02T19:31:11+00:00</updated>
<entry>
<title>kernel: define thread-local state out of line for LTO</title>
<updated>2026-11-02T19:31:11+00:00</updated>
<author>
<name>snowstormxd</name>
<email>214507868+snowstormxd@users.noreply.github.com</email>
</author>
<published>2026-11-02T19:31:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=43490c0417f6ef07a5999c2f8cf1c18e4e4a8520'/>
<id>urn:sha1:43490c0417f6ef07a5999c2f8cf1c18e4e4a8520</id>
<content type='text'>
Give the implementation-local TLS object one definition so ThinLTO retains its dynamic initializer. The state and its lifetime are unchanged.

Assisted by Codex.
</content>
</entry>
<entry>
<title>core: skip empty bitmap ranges during cache and scheduler traversal</title>
<updated>2026-11-02T19:07:54+00:00</updated>
<author>
<name>snowstormxd</name>
<email>214507868+snowstormxd@users.noreply.github.com</email>
</author>
<published>2026-11-02T19:07:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=00285925faebcd9fce6f12b4ebfaccdab491203c'/>
<id>urn:sha1:00285925faebcd9fce6f12b4ebfaccdab491203c</id>
<content type='text'>
Adapted bitmap scans from sylvieistaken/selevet-eglantine performance build 4. Keep the wide-priority fallback and fix the first live slot after empty bitmap words. Include randomized lifecycle and ordering checks.

Assisted by Codex.
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/fix/memory-skip-zero-clears' into test/linux-all-prs-plus</title>
<updated>2026-11-01T20:13:56+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-11-01T20:13:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=76812d0bd86c3dfbef473ad6236a68045ad3d4b5'/>
<id>urn:sha1:76812d0bd86c3dfbef473ad6236a68045ad3d4b5</id>
<content type='text'>
# Conflicts:
#	src/common/host_memory.h
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/fix/nx2-svc-trace-wait-names' into test/linux-all-prs</title>
<updated>2026-11-01T18:26:12+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-11-01T18:26:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=f50b3e2b9d27fd6612dbc72893f6a37c06d77ed1'/>
<id>urn:sha1:f50b3e2b9d27fd6612dbc72893f6a37c06d77ed1</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/fix/nx2-graphics-pool-2gib' into test/linux-all-prs</title>
<updated>2026-11-01T18:26:03+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-11-01T18:26:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=7c9870b0e17b36240df0a8015421fc4c8067dd3b'/>
<id>urn:sha1:7c9870b0e17b36240df0a8015421fc4c8067dd3b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>boot Pokopia past audio init (Switch 2 heap limits, aud:u 1, stpl:u) (#77)</title>
<updated>2026-10-31T14:54:52+00:00</updated>
<author>
<name>Alex</name>
<email>78863999+Sssnowyyy@users.noreply.github.com</email>
</author>
<published>2026-10-31T14:54:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=ee2d55ee497c9467c8df82515165a21eac13fff5'/>
<id>urn:sha1:ee2d55ee497c9467c8df82515165a21eac13fff5</id>
<content type='text'>
* game_list: don't free the worker while it is processing events

OnPopulatingCompleted runs a nested event loop from inside
GameListWorker::ProcessEvents. If the directory watcher fires there, the
repopulate destroys the worker while ProcessEvents is still on the stack
and the next lock hits a freed mutex. Stop the worker synchronously but
free it with deleteLater, and stop ProcessEvents once it has been
replaced.

Assisted-by: Claude Opus 5.5 (code changes, debugging and commit message)

* Fix Switch 2 heap limits and game list reloads during emulation

- SetHeapSize rejected heaps of 8 GiB or more (Switch 1's MainMemorySizeMax),
  so Switch 2 titles that size their heap from the 12 GiB layout (Pokopia
  asks for 9.5 GiB) got ResultInvalidSize and aborted with 2001-0101. Allow
  up to the memory the active layout provides.
- Grow the 39-bit heap region from 8 to 16 GiB so such a heap fits.
- Skip watcher-driven game list reloads while a game runs: Repopulate calls
  CreateFactories, which replaces content providers the running game reads
  (segfault in ContentProviderUnion::GetEntry). Stopping emulation already
  repopulates the list.

Assisted-by: Claude Opus 5.5 (code changes, debugging and commit message)

* nx2: answer aud:u 1 with an IAudioOutManager

nn::audio::OpenAudioOut gets its manager from aud:u command 1 and calls
OpenAudioOut through slot 1 of the returned object. The auto stub
returned no object, so Pokopia jumped through a null vtable 5 s into boot
and never got past its first frame.

Assisted-by: Claude Opus 5.5 (code changes, debugging and commit message)

* nx2: add a stpl:u (stream play) stub with a user service

nn::streamplay::detail::GetUserService opens a session with stpl:u 0
and attaches a system event to the handle command 300 returns. The
generic missing-service stub returned no session, so Pokopia's first
nn::streamplay call jumped through null right after audio setup.

Assisted-by: Claude Opus 5.5 (code changes, debugging and commit message)</content>
</entry>
<entry>
<title>nx2: shrink the graphics server pool to 2 GiB</title>
<updated>2026-10-31T07:57:31+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-10-31T07:57:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=7d82146663c0960cc8d7acece8642c7c4c944e3f'/>
<id>urn:sha1:7d82146663c0960cc8d7acece8642c7c4c944e3f</id>
<content type='text'>
The 12 GB layout added 8 GiB of DRAM for memory the Switch 2 graphics
server keeps, and the whole emulated DRAM is committed at boot, so Switch
2 games needed 20 GB of free commit ("Failed to allocate 20480 MiB of
backing memory" on PCs with 16 GB). With GPU-only regions backed as they
are written and sparse regions taking tiles from the game's memory, Mario
Kart World keeps ~1.1 GiB of the pool (texture pools it fills at boot,
flat afterwards) and Splatoon Raiders none. 2 GiB leaves room and brings
the commit to 14 GB. A title that runs the pool dry loses GPU writes
into its unbacked blocks and logs it once.
</content>
</entry>
<entry>
<title>svc: name the handles a traced WaitSynchronization waits on</title>
<updated>2026-10-30T16:29:40+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-10-30T16:29:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=36d9276b1ae582b2a941659b35ad684d0907a189'/>
<id>urn:sha1:36d9276b1ae582b2a941659b35ad684d0907a189</id>
<content type='text'>
With EDEN_NX2_SVC_TRACE, WaitSynchronization now logs its handles and,
for events services created, the names they gave them (a title that
never draws usually polls one: Minecraft waits on AM's message event).
</content>
</entry>
<entry>
<title>memory: skip clearing guest memory that is still zero</title>
<updated>2026-10-30T08:40:24+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-10-30T08:39:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=f260bcb5a26a6b6b9675b41969a273858f024c55'/>
<id>urn:sha1:f260bcb5a26a6b6b9675b41969a273858f024c55</id>
<content type='text'>
The kernel clears every page it hands out, and the backing memory is a
page-file section the host only gives RAM to once a page is touched. So
the clears themselves made every page of a game's heap resident: Mario
Kart World (12 GB layout) had a 12.5 GB working set 20 s after boot.

HostMemory keeps two bits per 64 KiB of backing: used (handed out by the
kernel at least once) and dirty (may hold data). Pages returned to the
kernel mark their granules dirty, and a zero clear only touches dirty
granules; a granule cleared in full is clean again. A new kernel on the
same memory marks everything a previous one used dirty, so leaked
processes can't leak data into the next game. KMemoryManager's
optimized-process fill and KSharedMemory's clear go through the same
path.

Mario Kart World, title screen and attract demo, 180 s: working set 20 s
in 4.7-6.4 GB instead of 12.5 GB, peak 14-17.6 GB instead of 20.1 GB.
</content>
</entry>
<entry>
<title>kernel: clear the fastmem arena when the application process is closed</title>
<updated>2026-10-30T04:54:37+00:00</updated>
<author>
<name>Takoroka</name>
<email>137927095+Takoroka@users.noreply.github.com</email>
</author>
<published>2026-10-30T04:54:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=d22a03efcd0aeddaa7d0d2ca47bd345f6ecf7752'/>
<id>urn:sha1:d22a03efcd0aeddaa7d0d2ca47bd345f6ecf7752</id>
<content type='text'>
Loading a Switch 2 game after another one in the same window hung or
crashed it at boot. The first game's process still had 55-60 references
at kernel shutdown, so it was never finalized and its memory stayed
mapped in the fastmem arena. The next game's mappings at the same
addresses then failed ("Failed to split placeholder" / "Failed to map
placeholder"), and it ran on the first game's memory: Mario Kart World
loaded after another Switch 2 game jumped to a garbage address from
rtld, or hung.

Detach the closed process from the arena (a late finalize must not
unmap the next game's memory), unmap the whole arena, and log when the
process was still referenced.
</content>
</entry>
</feed>
