OSDN Git Service

net: vxge: Remove in_interrupt() conditionals
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Tue, 29 Sep 2020 20:25:28 +0000 (22:25 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 29 Sep 2020 21:02:54 +0000 (14:02 -0700)
vxge_os_dma_malloc() and vxge_os_dma_malloc_async() are both called from
callchains which use GFP_KERNEL allocations unconditionally or have other
requirements to be called from fully preemptible task context..

vxge_os_dma_malloc():
  1)  __vxge_hw_blockpool_create() <- GFP_KERNEL

  2)  __vxge_hw_mempool_grow() <- vzalloc()
        __vxge_hw_blockpool_malloc()

vxge_os_dma_malloc_async():
  1  __vxge_hw_mempool_grow() <- vzalloc()
      __vxge_hw_blockpool_malloc()
__vxge_hw_blockpool_blocks_add()

  2)  vxge_hw_vpath_open() <- vzalloc()
__vxge_hw_blockpool_block_allocate()

That means neither of these functions needs a conditional allocation mode.

Remove the in_interrupt() conditional and use GFP_KERNEL.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/neterion/vxge/vxge-config.c
drivers/net/ethernet/neterion/vxge/vxge-config.h

index 6aba267..f5d48d7 100644 (file)
@@ -2306,16 +2306,9 @@ exit:
 static inline void
 vxge_os_dma_malloc_async(struct pci_dev *pdev, void *devh, unsigned long size)
 {
-       gfp_t flags;
        void *vaddr;
 
-       if (in_interrupt())
-               flags = GFP_ATOMIC | GFP_DMA;
-       else
-               flags = GFP_KERNEL | GFP_DMA;
-
-       vaddr = kmalloc((size), flags);
-
+       vaddr = kmalloc(size, GFP_KERNEL | GFP_DMA);
        vxge_hw_blockpool_block_add(devh, vaddr, size, pdev, pdev);
 }
 
index 3731651..0cd0750 100644 (file)
@@ -1899,18 +1899,13 @@ static inline void *vxge_os_dma_malloc(struct pci_dev *pdev,
                        struct pci_dev **p_dmah,
                        struct pci_dev **p_dma_acch)
 {
-       gfp_t flags;
        void *vaddr;
        unsigned long misaligned = 0;
        int realloc_flag = 0;
        *p_dma_acch = *p_dmah = NULL;
 
-       if (in_interrupt())
-               flags = GFP_ATOMIC | GFP_DMA;
-       else
-               flags = GFP_KERNEL | GFP_DMA;
 realloc:
-       vaddr = kmalloc((size), flags);
+       vaddr = kmalloc(size, GFP_KERNEL | GFP_DMA);
        if (vaddr == NULL)
                return vaddr;
        misaligned = (unsigned long)VXGE_ALIGN((unsigned long)vaddr,