From cbae3f8ab7cf64f0afa99588ae11f90a4c456458 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 16 May 2023 21:16:20 +1000 Subject: [PATCH] Fix scheduler's handling of yielded RSP tasks where the RDP completes --- src/lib/sched.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/lib/sched.c b/src/lib/sched.c index 8d94d13b5..9da882a61 100644 --- a/src/lib/sched.c +++ b/src/lib/sched.c @@ -117,7 +117,7 @@ static void __scExec(OSSched *sc, OSScTask *t) sc->curRSPTask = t; - if (t->list.t.type == M_GFXTASK) { + if (t->state & OS_SC_NEEDS_RDP) { sc->curRDPTask = t; } } @@ -129,7 +129,7 @@ static void __scTryDispatch(OSSched *sc) OSScTask *t = sc->nextAudTask; sc->nextAudTask = NULL; __scExec(sc, t); - } else if (sc->curRDPTask == NULL && sc->queuedFB == NULL) { + } else if ((sc->curRDPTask == NULL || sc->curRDPTask == sc->nextGfxTask) && sc->queuedFB == NULL) { OSScTask *t = sc->nextGfxTask; if (t) { @@ -270,7 +270,6 @@ static void __scHandleRSP(OSSched *sc) sc->nextGfxTask2 = sc->nextGfxTask; sc->nextGfxTask = t; - sc->curRDPTask = NULL; } else { t->state &= ~OS_SC_NEEDS_RSP;