starkernel: TimeTrustState.ticks -- mark volatile, fixing the one hazard 4.5a found
Written directly in ISR context on all three architectures (heartbeat_tick(), heartbeat.c:163) and read directly by mainline (heartbeat_ticks(), including the busy-wait at kernel_main.c:880) without being volatile -- worked by accident at -O0, would be a real bug once the kernel builds with optimization (item 4.5). Every other field in this struct is mainline-only (heartbeat_service()'s deferred window/variance/ trust processing), so only this one field needed the qualifier. Punch list item 4.5b complete. Three-arch acceptance boot clean at unchanged -O0 (no behavior change intended yet -- this is prep for enabling optimization, not the switch itself). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
8f4348ec18
commit
5cbb04c60a
@@ -87,7 +87,14 @@ typedef struct time_window {
|
||||
*/
|
||||
typedef struct time_trust_state {
|
||||
/* Core counters */
|
||||
uint64_t ticks; /* TIME-TICKS: monotonic heartbeat count */
|
||||
volatile uint64_t ticks; /* TIME-TICKS: monotonic heartbeat count --
|
||||
* written directly in ISR context
|
||||
* (heartbeat_tick(), all three archs) and
|
||||
* read directly by mainline
|
||||
* (heartbeat_ticks()); genuinely
|
||||
* concurrent, unlike every other field in
|
||||
* this struct (FABRIC.md item 4.5a/4.5b,
|
||||
* 2026-08-11). */
|
||||
uint64_t last_tsc; /* TSC at last heartbeat */
|
||||
uint64_t expected_delta; /* Expected TSC ticks per heartbeat */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user