Message ID | 20250314070227.24423-1-thangaraj.s@microchip.com (mailing list archive) |
---|---|
State | New |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] net: ethernet: microchip: lan743x: Fix memory allocation failure | expand |
On 14.03.25 08:02, Thangaraj Samynathan wrote: > The driver allocates ring elements using GFP_ATOMIC and GFP_DMA > flags. The allocation is not done in atomic context and there is > no dependency from LAN743x hardware on memory allocation should be > in DMA_ZONE. Hence modifying the flags to use only GFP_KERNEL. > > Signed-off-by: Thangaraj Samynathan <thangaraj.s@microchip.com> > --- > drivers/net/ethernet/microchip/lan743x_main.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c > index 23760b613d3e..c10b0131d5fb 100644 > --- a/drivers/net/ethernet/microchip/lan743x_main.c > +++ b/drivers/net/ethernet/microchip/lan743x_main.c > @@ -2495,8 +2495,7 @@ static int lan743x_rx_process_buffer(struct lan743x_rx *rx) > > /* save existing skb, allocate new skb and map to dma */ > skb = buffer_info->skb; > - if (lan743x_rx_init_ring_element(rx, rx->last_head, > - GFP_ATOMIC | GFP_DMA)) { > + if (lan743x_rx_init_ring_element(rx, rx->last_head, GFP_KERNEL)) { I agree with removing GFP_DMA. If it would be needed, then everywhere and not only here in NAPI context as it is intended for hardware limitations. I'm not sure if GFP_ATOMIC can be removed. Isn't NAPI an atomic context? For example napi_alloc_skb() and page_pool_dev_alloc_pages() use GFP_ATOMIC. Gerhard
diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c index 23760b613d3e..c10b0131d5fb 100644 --- a/drivers/net/ethernet/microchip/lan743x_main.c +++ b/drivers/net/ethernet/microchip/lan743x_main.c @@ -2495,8 +2495,7 @@ static int lan743x_rx_process_buffer(struct lan743x_rx *rx) /* save existing skb, allocate new skb and map to dma */ skb = buffer_info->skb; - if (lan743x_rx_init_ring_element(rx, rx->last_head, - GFP_ATOMIC | GFP_DMA)) { + if (lan743x_rx_init_ring_element(rx, rx->last_head, GFP_KERNEL)) { /* failed to allocate next skb. * Memory is very low. * Drop this packet and reuse buffer.
The driver allocates ring elements using GFP_ATOMIC and GFP_DMA flags. The allocation is not done in atomic context and there is no dependency from LAN743x hardware on memory allocation should be in DMA_ZONE. Hence modifying the flags to use only GFP_KERNEL. Signed-off-by: Thangaraj Samynathan <thangaraj.s@microchip.com> --- drivers/net/ethernet/microchip/lan743x_main.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)