Bernard Zhao
2021-Apr-02 08:55 UTC
[Nouveau] [PATCH] drm/nouveau: fix potential abnormal lock/unlock
Fix coccicheck warning: drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c:115:3-9: preceding lock on line 109 drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c:98:2-8: preceding lock on line 95 As we see, function nvkm_fifo_chan_inst & nvkm_fifo_chan_chid both use spin_lock_irqsave, but no spin_unlock_irqrestore in if/return branch, seems like a potential bug? Signed-off-by: Bernard Zhao <bernard at vivo.com> --- drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c index 2ed4ff05d207..e3f624d97644 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c @@ -95,6 +95,7 @@ nvkm_fifo_chan_inst(struct nvkm_fifo *fifo, u64 inst, unsigned long *rflags) spin_lock_irqsave(&fifo->lock, flags); if ((chan = nvkm_fifo_chan_inst_locked(fifo, inst))) { *rflags = flags; + spin_unlock_irqrestore(&fifo->lock, flags); return chan; } spin_unlock_irqrestore(&fifo->lock, flags); @@ -112,6 +113,7 @@ nvkm_fifo_chan_chid(struct nvkm_fifo *fifo, int chid, unsigned long *rflags) list_del(&chan->head); list_add(&chan->head, &fifo->chan); *rflags = flags; + spin_unlock_irqrestore(&fifo->lock, flags); return chan; } } -- 2.31.0