commit e8684db191e4164f3f5f3ad7dec04a6734c25f1c upstream.
The driver allocates skb during ndo_open with GFP_ATOMIC which has high chance of failure when there are multiple instances. GFP_KERNEL is enough while open and use GFP_ATOMIC only from interrupt context.
Fixes: 23f0703c125b ("lan743x: Add main source files for new lan743x driver") Signed-off-by: Yuiko Oshino yuiko.oshino@microchip.com cc: stable@vger.kernel.org # 5.4.x --- drivers/net/ethernet/microchip/lan743x_main.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c index dfa0ded169ee..d335fad34dd3 100644 --- a/drivers/net/ethernet/microchip/lan743x_main.c +++ b/drivers/net/ethernet/microchip/lan743x_main.c @@ -1888,13 +1888,13 @@ static int lan743x_rx_next_index(struct lan743x_rx *rx, int index) return ((++index) % rx->ring_size); }
-static struct sk_buff *lan743x_rx_allocate_skb(struct lan743x_rx *rx) +static struct sk_buff *lan743x_rx_allocate_skb(struct lan743x_rx *rx, gfp_t gfp) { int length = 0;
length = (LAN743X_MAX_FRAME_SIZE + ETH_HLEN + 4 + RX_HEAD_PADDING); return __netdev_alloc_skb(rx->adapter->netdev, - length, GFP_ATOMIC | GFP_DMA); + length, gfp); }
static void lan743x_rx_update_tail(struct lan743x_rx *rx, int index) @@ -2067,7 +2067,8 @@ static int lan743x_rx_process_packet(struct lan743x_rx *rx) struct sk_buff *new_skb = NULL; int packet_length;
- new_skb = lan743x_rx_allocate_skb(rx); + new_skb = lan743x_rx_allocate_skb(rx, + GFP_ATOMIC | GFP_DMA); if (!new_skb) { /* failed to allocate next skb. * Memory is very low. @@ -2294,7 +2295,8 @@ static int lan743x_rx_ring_init(struct lan743x_rx *rx)
rx->last_head = 0; for (index = 0; index < rx->ring_size; index++) { - struct sk_buff *new_skb = lan743x_rx_allocate_skb(rx); + struct sk_buff *new_skb = lan743x_rx_allocate_skb(rx, + GFP_KERNEL);
ret = lan743x_rx_init_ring_element(rx, index, new_skb); if (ret)
On Tue, Nov 02, 2021 at 10:14:27AM -0400, Yuiko Oshino wrote:
commit e8684db191e4164f3f5f3ad7dec04a6734c25f1c upstream.
The driver allocates skb during ndo_open with GFP_ATOMIC which has high chance of failure when there are multiple instances. GFP_KERNEL is enough while open and use GFP_ATOMIC only from interrupt context.
Fixes: 23f0703c125b ("lan743x: Add main source files for new lan743x driver") Signed-off-by: Yuiko Oshino yuiko.oshino@microchip.com cc: stable@vger.kernel.org # 5.4.x
Now queued up, thanks.
greg k-h
-----Original Message----- From: Greg KH greg@kroah.com Sent: Wednesday, November 3, 2021 5:44 AM To: Yuiko Oshino - C18177 Yuiko.Oshino@microchip.com Cc: stable@vger.kernel.org Subject: Re: [PATCH net] net: ethernet: microchip: lan743x: Fix skb allocation failure
[You don't often get email from greg@kroah.com. Learn why this is important at http://aka.ms/LearnAboutSenderIdentification.]
EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
On Tue, Nov 02, 2021 at 10:14:27AM -0400, Yuiko Oshino wrote:
commit e8684db191e4164f3f5f3ad7dec04a6734c25f1c upstream.
The driver allocates skb during ndo_open with GFP_ATOMIC which has high
chance of failure when there are multiple instances.
GFP_KERNEL is enough while open and use GFP_ATOMIC only from interrupt
context.
Fixes: 23f0703c125b ("lan743x: Add main source files for new lan743x driver") Signed-off-by: Yuiko Oshino yuiko.oshino@microchip.com cc: stable@vger.kernel.org # 5.4.x
Now queued up, thanks.
greg k-h
Thank you, Greg!
Yuiko
linux-stable-mirror@lists.linaro.org