summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/gsp_phys_booter.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c
index 734ebf2..82c88dc 100644
--- a/kernel/gsp_phys_booter.c
+++ b/kernel/gsp_phys_booter.c
@@ -152,9 +152,19 @@ static inline bool gsp_phys_gr_copywit_enabled(void)
* "ENGINE STILL WRITING" proves the copy-out shipped before the stores
* landed (the fix is a longer settle window); "stable" proves the engine
* genuinely stopped, which needs a different treatment.
- * - gsp_phys_gr_settle_ms (default 300): the content-stable window the
+ * - gsp_phys_gr_settle_ms (default 100): the content-stable window the
* partial-changed rule requires before it declares the stores settled.
* Raise it to give a still-writing engine its time (A/B in one cycle).
+ *
+ * r552 (2026-10-23): measured A/B on real boots. Every launch with a
+ * partial changed-page count (read-mostly kernels: 1..64 of 1000+ pages
+ * written, so the changed>=n_all shortcut can never fire) paid the full
+ * window plus scan overhead: 683-901 ms per launch at 300 ms. At 100 ms
+ * the same boots measured 231-247 ms of retire wait and the launch
+ * latency p50 dropped 1119 ms -> 651 ms (n=22 launches; baseline 684 ms)
+ * with the battery unchanged (12/15, 0 hangs) and a green 2-round soak
+ * on the next boot. The content-stability hash still gates the verdict;
+ * only the minimum stable duration shrank.
*/
static bool gsp_phys_gr_late_probe_param;
module_param_named(gsp_phys_gr_late_probe, gsp_phys_gr_late_probe_param,
@@ -162,11 +172,11 @@ module_param_named(gsp_phys_gr_late_probe, gsp_phys_gr_late_probe_param,
MODULE_PARM_DESC(gsp_phys_gr_late_probe,
"Diagnostic: after the GR retire wait, re-scan the tracked pages +500 ms later and log whether the engine is still writing (default 0)");
-static int gsp_phys_gr_settle_ms_param = 300;
+static int gsp_phys_gr_settle_ms_param = 100;
module_param_named(gsp_phys_gr_settle_ms, gsp_phys_gr_settle_ms_param,
int, 0644);
MODULE_PARM_DESC(gsp_phys_gr_settle_ms,
- "GR retire wait: content-stable window (ms) required before a partial changed-page count counts as settled (default 300)");
+ "GR retire wait: content-stable window (ms) required before a partial changed-page count counts as settled (default 100; 300 was the pre-r552 value)");
static inline u32 gsp_phys_gr_settle_iters(void)
{