Message ID | CAOQPn8tpjo5Jwz8jGi0JfTQd-hF+VS7N90T=GJpjG3wj5x8UHw@mail.gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [RESEND] dmaengine: ptdma: check for null desc before calling pt_cmd_callback | expand |
On 09-02-23, 21:37, Eric Pilmore wrote: > From: Eric Pilmore <epilmore@gigaio.com> > > Resolves a panic that can occur on AMD systems, typically during host > shutdown, after the PTDMA driver had been exercised. The issue was > the pt_issue_pending() function is mistakenly assuming that there will > be at least one descriptor in the Submitted queue when the function > is called. However, it is possible that both the Submitted and Issued > queues could be empty, which could result in pt_cmd_callback() being > mistakenly called with a NULL pointer. > Ref: Bugzilla Bug 216856. > > Fixes: 6fa7e0e836e2 ("dmaengine: ptdma: fix concurrency issue with > multiple dma transfer") This should not be split two two lines! > Signed-off-by: Eric Pilmore <epilmore@gigaio.com> > --- > drivers/dma/ptdma/ptdma-dmaengine.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/dma/ptdma/ptdma-dmaengine.c > b/drivers/dma/ptdma/ptdma-dmaengine.c > index cc22d162ce25..1aa65e5de0f3 100644 > --- a/drivers/dma/ptdma/ptdma-dmaengine.c > +++ b/drivers/dma/ptdma/ptdma-dmaengine.c > @@ -254,7 +254,7 @@ static void pt_issue_pending(struct dma_chan *dma_chan) > spin_unlock_irqrestore(&chan->vc.lock, flags); > > /* If there was nothing active, start processing */ > - if (engine_is_idle) > + if (engine_is_idle && desc) Please run checkpatch before sending patches WARNING: please, no spaces at the start of a line #40: FILE: drivers/dma/ptdma/ptdma-dmaengine.c:257: + if (engine_is_idle && desc)$ WARNING: suspect code indent for conditional statements (7, 15) #40: FILE: drivers/dma/ptdma/ptdma-dmaengine.c:257: + if (engine_is_idle && desc) pt_cmd_callback(desc, 0); > pt_cmd_callback(desc, 0); > } > > -- > 2.38.1
diff --git a/drivers/dma/ptdma/ptdma-dmaengine.c b/drivers/dma/ptdma/ptdma-dmaengine.c index cc22d162ce25..1aa65e5de0f3 100644 --- a/drivers/dma/ptdma/ptdma-dmaengine.c +++ b/drivers/dma/ptdma/ptdma-dmaengine.c @@ -254,7 +254,7 @@ static void pt_issue_pending(struct dma_chan *dma_chan) spin_unlock_irqrestore(&chan->vc.lock, flags); /* If there was nothing active, start processing */ - if (engine_is_idle) + if (engine_is_idle && desc) pt_cmd_callback(desc, 0); }