diff mbox series

wd719x: pass GFP_ATOMIC instead of GFP_KERNEL

Message ID 20190529013540.GA20273@hari-Inspiron-1545 (mailing list archive)
State Superseded
Headers show
Series wd719x: pass GFP_ATOMIC instead of GFP_KERNEL | expand

Commit Message

Hariprasad Kelam May 29, 2019, 1:35 a.m. UTC
wd719x_chip_init is getting called in interrupt disabled
mode(spin_lock_irqsave) , so we need to GFP_ATOMIC instead
of GFP_KERNEL.

Issue identified by coccicheck

Signed-off-by: Hariprasad Kelam <hariprasad.kelam@gmail.com>
---
 drivers/scsi/wd719x.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Christoph Hellwig May 29, 2019, 6:23 a.m. UTC | #1
On Wed, May 29, 2019 at 07:05:40AM +0530, Hariprasad Kelam wrote:
> wd719x_chip_init is getting called in interrupt disabled
> mode(spin_lock_irqsave) , so we need to GFP_ATOMIC instead
> of GFP_KERNEL.
> 
> Issue identified by coccicheck

I don't think request_firmware is any more happy being called under
a spinlock.  The right fix is to not hold a spinlock over the board
initialization.
David Rientjes May 29, 2019, 9:11 p.m. UTC | #2
On Tue, 28 May 2019, Christoph Hellwig wrote:

> > wd719x_chip_init is getting called in interrupt disabled
> > mode(spin_lock_irqsave) , so we need to GFP_ATOMIC instead
> > of GFP_KERNEL.
> > 
> > Issue identified by coccicheck
> 
> I don't think request_firmware is any more happy being called under
> a spinlock.  The right fix is to not hold a spinlock over the board
> initialization.
> 

Right, and not even wd719x_chip_init() is always called in this context 
otherwise wd719x_board_found() would also need the same change.
diff mbox series

Patch

diff --git a/drivers/scsi/wd719x.c b/drivers/scsi/wd719x.c
index c2f4006..f300fd7 100644
--- a/drivers/scsi/wd719x.c
+++ b/drivers/scsi/wd719x.c
@@ -319,7 +319,7 @@  static int wd719x_chip_init(struct wd719x *wd)
 
 	if (!wd->fw_virt)
 		wd->fw_virt = dma_alloc_coherent(&wd->pdev->dev, wd->fw_size,
-						 &wd->fw_phys, GFP_KERNEL);
+						 &wd->fw_phys, GFP_ATOMIC);
 	if (!wd->fw_virt) {
 		ret = -ENOMEM;
 		goto wd719x_init_end;