From 8ee4396b4c1f308d2b1f82e01b4a49b6019c2bb0 Mon Sep 17 00:00:00 2001 From: SarahW Date: Sat, 15 Aug 2020 15:56:32 +0100 Subject: [PATCH] Fix race condition in Voodoo FIFO code that could cause an 'Unknown fifo entry' error --- src/vid_voodoo_fifo.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/vid_voodoo_fifo.c b/src/vid_voodoo_fifo.c index 393137e..c5ca5a9 100644 --- a/src/vid_voodoo_fifo.c +++ b/src/vid_voodoo_fifo.c @@ -173,6 +173,8 @@ void voodoo_fifo_thread(void *param) voodoo_reg_writel(fifo->addr_type & FIFO_ADDR, fifo->val, voodoo); fifo->addr_type = FIFO_INVALID; voodoo->fifo_read_idx++; + if (FIFO_EMPTY) + break; fifo = &voodoo->fifo[voodoo->fifo_read_idx & FIFO_MASK]; } break; @@ -183,6 +185,8 @@ void voodoo_fifo_thread(void *param) voodoo_fb_writew(fifo->addr_type & FIFO_ADDR, fifo->val, voodoo); fifo->addr_type = FIFO_INVALID; voodoo->fifo_read_idx++; + if (FIFO_EMPTY) + break; fifo = &voodoo->fifo[voodoo->fifo_read_idx & FIFO_MASK]; } break; @@ -193,6 +197,8 @@ void voodoo_fifo_thread(void *param) voodoo_fb_writel(fifo->addr_type & FIFO_ADDR, fifo->val, voodoo); fifo->addr_type = FIFO_INVALID; voodoo->fifo_read_idx++; + if (FIFO_EMPTY) + break; fifo = &voodoo->fifo[voodoo->fifo_read_idx & FIFO_MASK]; } break; @@ -203,6 +209,8 @@ void voodoo_fifo_thread(void *param) voodoo_tex_writel(fifo->addr_type & FIFO_ADDR, fifo->val, voodoo); fifo->addr_type = FIFO_INVALID; voodoo->fifo_read_idx++; + if (FIFO_EMPTY) + break; fifo = &voodoo->fifo[voodoo->fifo_read_idx & FIFO_MASK]; } break; @@ -212,6 +220,8 @@ void voodoo_fifo_thread(void *param) voodoo_2d_reg_writel(voodoo, fifo->addr_type & FIFO_ADDR, fifo->val); fifo->addr_type = FIFO_INVALID; voodoo->fifo_read_idx++; + if (FIFO_EMPTY) + break; fifo = &voodoo->fifo[voodoo->fifo_read_idx & FIFO_MASK]; } break;