summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/gsp_sema_service.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index 52819da..91f1df9 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -7921,6 +7921,22 @@ static void svc_dstpend_note(u64 va)
return;
for (i = 0; i < svc_dstpend_n; i++) {
if (svc_dstpend[i].va_page == page) {
+ /*
+ * r553: the window is ABSOLUTE from the first failed
+ * attempt for this page, never re-freshened by the
+ * retries. The retried decode of a copy that cannot
+ * resolve re-notes its destination on every pass; with
+ * a sliding stamp the record never expired and the r541
+ * launch guard deferred the launch forever - r551 soak:
+ * victory_strided repeated "GR busy-defer timeout ->
+ * hold 8000 ms" every ~4 s for 427 s with the launch
+ * never forwarded (the copies' -ENOENT retries kept the
+ * note fresh). A record older than the window is
+ * refreshed only when a NEW failure episode starts.
+ */
+ if (time_before(jiffies, svc_dstpend[i].since +
+ msecs_to_jiffies(SVC_DSTPEND_MS)))
+ return;
svc_dstpend[i].since = jiffies;
return;
}