AcquireFrontend built the frontend's SwappcInfo with a wave size of 0, while the
driver's LinkUserDataCallees passes the dispatch's wave size. A wave64 v_cmp_e64
that reuses a call's link pair after the return, followed by a v_cndmask_b32_e64
that reads it, was refused as escaping the call/return model. The frontend now
receives the dispatch's wave size, and a frontend built for one wave size is not
reused for another.
The file read poll called sceKernelFstat and sceKernelLseek while
holding m_mutex, and on Windows lseek waits for the descriptor's position
lock, so a long read or write on that descriptor blocked every operation
on the equeue. Each file read event now keeps its measurement in its own
state object; a wait copies the descriptors to measure, releases
m_mutex, runs fstat and lseek, then stores the results under m_mutex
before polling. A descriptor closed and reused in that window gets a new
state object, so the old measurement is never reported for it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A wait polling a regular-file event holds the equeue mutex and calls
sceKernelLseek, which takes the descriptor's position lock on Windows.
sceKernelClose and close took that lock first and then the equeue mutex
in EqueueDescriptorClosed, so a close racing such a wait deadlocked. Both
now remove the descriptor's events before taking the position lock, as
dup2 already does.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Both threw for a regular file. They now follow FreeBSD 11.4's
filt_vfsread and filt_vfswrite: a read event reports the file size less
the descriptor's offset and fires while that is not 0; a write event
always fires with data 0. A wait holding such an event polls it again
every millisecond, as no host call reports every file change. A size
above 1 and other vnode types still throw.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The console rejects a copy only when the written range intersects the read range; this call writes indices 3-4 and reads 1-2, so the console copies and returns 0 (oneandonlydean, reading libc.prx). Main returns 22, and the row would have pinned that.
Co-Authored-By: Claude <[email protected]>
A context that never wrote DB_Z_INFO or DB_STENCIL_INFO had neither
register, so a draw testing depth or stencil without a depth target was
refused (PPSA24040, DB_DEPTH_CONTROL 0x777), and a depth or stencil plane
whose other register was never written stopped on a missing register.
Both now start at 0, FORMAT INVALID, initially and after CLEAR_STATE.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Some titles wait for a chord on their title screen: RollerCoaster Tycoon
Adventures Deluxe (PPSA17330) asks for L1 + R1. The command file already
carries a button bit field, but the helper accepted one name. Names joined
by '+' are now combined into one command; unknown names, duplicates and
release in a chord are rejected without touching the command file.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
FreeBSD 11 localtime.c initializes tzname to WILDABBR (" ") and settzname()
resets both entries to it before filling them from the zone's types, so a
zone with no daylight saving type keeps " " in tzname[1]. Windows left it
empty and Linux repeated tzname[0].
FreeBSD 11 fopen opens the path with _open, and vn_open_vnode refuses a
directory only for FWRITE or O_TRUNC, so fopen of a directory in a read
mode succeeds; Linux hosts already open it. On Windows CreateFileW
without FILE_FLAG_BACKUP_SEMANTICS refused it with EACCES.
fopen now opens such a path as a libkernel directory descriptor, which
libkernel registers in libc when it loads, and fclose and freopen remove
it from libkernel's table. Reads on the stream fail with EISDIR and set
the error indicator, as on a Linux host and FreeBSD's tmpfs: the Windows
CRT fails them already but reports EINVAL. Writes fail with EBADF, and
fseek, ftell and ungetc work, as on any read-only stream.
A PS5 (firmware 13.60) allocates with any flag value, zero-fills only for
flag 2 and returns 64-byte aligned blocks. Record the measured behaviour of
sceNetGetIfName, sceNetGetRandom, sceNetGetSystemTime, sceNetMemoryFree and
sceNetUsleep, which already match the console, and keep only their open gaps.
Co-Authored-By: Claude Opus 5.5 <[email protected]>