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 <[email protected]>
---
drivers/scsi/wd719x.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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;
--
2.7.4
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.
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.