chrg6
a8d18ef474
Ask an armed region's page state under the freeze lock when a fault finds its range gone, so that a late write is not taken for a frozen page's and a read is not passed on past an arm.
...
The review found two windows in memory.c lazy_fault, where a fault holding frz_lock and lz_lock finds its address
neither armed nor in flight. It returned 0 there, and access_fault then asked for the page's state without a lock.
A write whose range a flight gave back while the write waited for frz_lock went on to thaw_fault, whose thaw released
every armed range of the 2 MiB region (lazy_drop_region_locked), each fetched under the lock. And after a release
that sets no hold (mem_lazy_skip's give-back of another buffer's range), the completion thread could arm the page
again between that 0 and access_fault's query, so a read saw an inaccessible page and went to the crash handler; that
one predates the ranges in flight.
Now a fault that finds a flight there waits for it as before. Otherwise it releases lz_lock, asks for the page's state
while it still holds frz_lock, under which no arm runs, and runs the access again when the page allows it: a read on
a readable page, a write on a read-write one. A write to a frozen page still goes on to thaw_fault, and an address
that is not ours to the crash handler.
The new late_write scenario of tests/lazy_fetch_check.py has a thread write a range whose release starts and ends
while the write waits for frz_lock: the write runs again and the region's other range stays armed. With the old
return of 0 it fails, the other range released. The read's window has no check: the arm would have to land between
two instructions. Not reproduced in the game before the change; lazy_fetch_check passed in all its scenarios.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-13 20:12:50 -05:00
..
2026-11-08 15:51:48 -05:00
2026-11-10 23:16:17 -05:00
2026-11-10 23:16:17 -05:00
2026-11-13 18:41:40 -05:00
2026-11-13 18:41:40 -05:00
2026-11-10 22:59:02 -05:00
2026-11-09 08:19:19 -05:00
2026-11-13 18:41:46 -05:00
2026-11-12 15:17:48 -05:00
2026-11-12 22:24:22 -05:00
2026-11-12 20:03:12 -05:00
2026-11-11 04:42:07 -05:00
2026-11-11 04:42:07 -05:00
2026-11-13 18:41:45 -05:00
2026-11-13 18:41:46 -05:00
2026-11-13 18:41:45 -05:00
2026-11-13 18:41:39 -05:00
2026-11-13 18:41:39 -05:00
2026-11-13 18:42:34 -05:00
2026-11-13 18:42:34 -05:00
2026-11-13 18:42:10 -05:00
2026-11-13 18:43:30 -05:00
2026-11-13 18:43:30 -05:00
2026-11-13 18:41:45 -05:00
2026-11-13 18:41:45 -05:00
2026-11-13 07:55:56 -05:00
2026-11-13 18:41:46 -05:00
2026-11-13 18:43:23 -05:00
2026-11-13 18:43:23 -05:00
2026-11-11 04:35:30 -05:00
2026-11-13 20:12:49 -05:00
2026-11-13 20:12:26 -05:00
2026-11-13 20:12:50 -05:00
2026-11-09 08:21:07 -05:00
2026-11-09 08:21:07 -05:00
2026-11-13 18:41:40 -05:00
2026-11-13 18:41:40 -05:00
2026-11-13 18:41:45 -05:00
2026-11-12 14:57:13 -05:00
2026-11-13 18:46:50 -05:00
2026-11-13 18:43:23 -05:00
2026-11-13 18:43:23 -05:00
2026-11-13 20:12:25 -05:00
2026-11-13 20:12:25 -05:00
2026-11-11 05:22:56 -05:00
2026-11-12 12:07:19 -05:00
2026-11-12 12:07:19 -05:00
2026-11-07 05:04:38 -05:00
2026-11-07 05:04:38 -05:00
2026-11-12 15:16:30 -05:00
2026-11-12 15:16:30 -05:00
2026-11-13 18:43:23 -05:00
2026-11-13 20:12:26 -05:00
2026-11-13 07:08:49 -05:00
2026-11-13 15:57:52 -05:00
2026-11-13 15:57:52 -05:00
2026-11-13 18:43:23 -05:00
2026-11-11 19:38:18 -05:00
2026-11-13 20:12:50 -05:00
2026-11-13 20:12:50 -05:00
2026-11-13 20:12:50 -05:00
2026-11-12 23:21:17 -05:00
2026-11-10 02:25:14 -05:00
2026-11-13 18:41:39 -05:00
2026-11-13 18:41:39 -05:00
2026-11-13 18:42:34 -05:00
2026-11-13 18:43:24 -05:00
2026-11-13 18:41:40 -05:00
2026-11-13 18:41:40 -05:00
2026-11-09 20:51:08 -05:00
2026-11-13 08:36:46 -05:00
2026-11-13 08:36:46 -05:00
2026-11-07 05:04:38 -05:00
2026-11-07 05:04:38 -05:00
2026-11-08 15:51:48 -05:00
2026-11-13 18:41:46 -05:00
2026-11-13 18:41:46 -05:00
2026-11-07 05:04:40 -05:00
2026-11-13 18:43:30 -05:00
2026-11-13 20:12:50 -05:00
2026-11-13 20:12:50 -05:00
2026-11-13 18:43:23 -05:00
2026-11-13 18:43:23 -05:00
2026-11-12 15:12:51 -05:00
2026-11-07 05:04:40 -05:00
2026-11-09 08:09:26 -05:00
2026-11-13 07:55:56 -05:00
2026-11-13 07:55:56 -05:00
2026-11-13 06:46:31 -05:00
2026-11-13 06:46:31 -05:00
2026-11-11 04:48:36 -05:00
2026-11-11 04:48:36 -05:00
2026-11-13 12:54:24 -05:00
2026-11-13 12:54:24 -05:00
2026-11-07 05:04:38 -05:00
2026-11-11 08:23:56 -05:00
2026-11-10 12:48:50 -05:00
2026-11-10 12:48:50 -05:00
2026-11-13 18:41:46 -05:00
2026-11-13 18:41:45 -05:00
2026-11-07 05:04:38 -05:00
2026-11-13 08:36:46 -05:00
2026-11-13 08:36:46 -05:00
2026-11-07 05:04:38 -05:00
2026-11-11 19:38:18 -05:00
2026-11-12 22:34:22 -05:00
2026-11-12 22:34:22 -05:00
2026-11-13 18:41:45 -05:00
2026-11-13 18:41:39 -05:00
2026-11-12 22:30:46 -05:00
2026-11-11 04:29:31 -05:00
2026-11-11 04:29:31 -05:00
2026-11-12 08:25:42 -05:00
2026-11-10 06:31:27 -05:00
2026-11-12 15:00:27 -05:00
2026-11-10 12:49:10 -05:00
2026-11-12 22:53:00 -05:00
2026-11-11 04:36:33 -05:00
2026-11-11 04:36:33 -05:00
2026-11-09 14:16:19 -05:00
2026-11-10 01:55:30 -05:00
2026-11-07 05:04:40 -05:00
2026-11-13 18:41:39 -05:00
2026-11-13 20:12:26 -05:00
2026-11-13 20:12:25 -05:00
2026-11-13 20:12:26 -05:00
2026-11-12 22:28:36 -05:00
2026-11-12 22:28:36 -05:00
2026-11-11 05:25:38 -05:00
2026-11-11 05:25:38 -05:00
2026-11-13 09:08:40 -05:00
2026-11-11 00:11:41 -05:00
2026-11-09 13:13:43 -05:00
2026-11-09 13:13:43 -05:00
2026-11-12 23:21:17 -05:00
2026-11-12 23:21:17 -05:00
2026-11-12 20:03:45 -05:00
2026-11-12 20:03:45 -05:00
2026-11-07 05:04:40 -05:00
2026-11-12 22:57:56 -05:00
2026-11-12 22:54:58 -05:00
2026-11-13 07:55:56 -05:00
2026-11-13 07:55:56 -05:00
2026-11-13 18:43:23 -05:00
2026-11-13 08:23:11 -05:00
2026-11-13 18:41:39 -05:00
2026-11-13 12:54:24 -05:00
2026-11-13 12:54:24 -05:00
2026-11-12 15:18:25 -05:00
2026-11-11 00:11:41 -05:00
2026-11-13 18:41:46 -05:00
2026-11-13 18:41:46 -05:00
2026-11-10 12:14:29 -05:00
2026-11-10 12:02:12 -05:00
2026-11-09 08:09:26 -05:00
2026-11-12 22:33:29 -05:00
2026-11-12 22:33:29 -05:00
2026-11-13 08:35:42 -05:00
2026-11-13 08:35:42 -05:00
2026-11-13 15:57:52 -05:00
2026-11-13 00:12:31 -05:00
2026-11-13 00:53:22 -05:00
2026-11-13 00:53:22 -05:00
2026-11-12 15:18:25 -05:00
2026-11-12 15:18:25 -05:00
2026-11-11 05:29:06 -05:00
2026-11-13 18:41:46 -05:00
2026-11-10 09:13:35 -05:00
2026-11-10 09:13:35 -05:00
2026-11-12 07:55:57 -05:00
2026-11-10 15:20:47 -05:00
2026-11-10 15:15:34 -05:00
2026-11-07 05:04:38 -05:00
2026-11-13 18:41:45 -05:00