Messages in this thread Patch in this message | | | From | Jia-Ju Bai <> | Subject | [PATCH] netxen: Fix a sleep-in-atomic bug in netxen_nic_pci_mem_access_direct | Date | Mon, 19 Jun 2017 10:48:53 +0800 |
| |
The driver may sleep under a spin lock, and the function call path is: netxen_nic_pci_mem_access_direct (acquire the lock by spin_lock) ioremap --> may sleep
To fix it, the lock is released before "ioremap", and the lock is acquired again after this function.
Signed-off-by: Jia-Ju Bai <baijiaju1990@163.com> --- drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c index a996801..5ea553e 100644 --- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c +++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c @@ -1419,7 +1419,9 @@ static u32 netxen_nic_io_read_2M(struct netxen_adapter *adapter, mem_base = pci_resource_start(adapter->pdev, 0) + (start & PAGE_MASK); + spin_unlock(&adapter->ahw.mem_lock); mem_ptr = ioremap(mem_base, PAGE_SIZE); + spin_lock(&adapter->ahw.mem_lock); if (mem_ptr == NULL) { ret = -EIO; goto unlock; -- 1.7.9.5
| |