diff options
Diffstat (limited to 'kernel/gsp_sema_service.c')
| -rw-r--r-- | kernel/gsp_sema_service.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index 4655e77..6cb7034 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -27987,7 +27987,7 @@ static void svc_ddx_head_decode(struct nv_vgpu_device *vgpu, ring_ap, ent, sizeof(ent))) { reason = "unreadable"; head_unreadable = true; - break; + continue; } memcpy(&e0, ent, 4); memcpy(&e1, ent + 4, 4); @@ -28017,17 +28017,20 @@ static void svc_ddx_head_decode(struct nv_vgpu_device *vgpu, if (svc_read_va_push(vgpu, ch, va, buf, len)) { reason = "unreadable"; head_unreadable = true; - break; + continue; } if (!memchr_inv(buf, 0, len)) { /* * The push read succeeded but answered an all-zero * page (a stale/zero translation): there is no - * release to decode and no value to apply. + * release to decode and no value to apply. c746: + * the ring head is a zero dummy entry and the real + * C36F release sits at a later slot, so scan past + * it (bounded) instead of stopping the pass. */ reason = "zero-payload"; head_unreadable = true; - break; + continue; } mark = svc_rel_count; /* |
