All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net] net: ethernet: microchip: lan743x: Fix skb allocation failure
@ 2021-10-27 18:23 Yuiko Oshino
  2021-10-28 13:50 ` patchwork-bot+netdevbpf
  0 siblings, 1 reply; 6+ messages in thread
From: Yuiko Oshino @ 2021-10-27 18:23 UTC (permalink / raw)
  To: davem, netdev; +Cc: bryan.whitehead, UNGLinuxDriver, Yuiko Oshino

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>
---
 drivers/net/ethernet/microchip/lan743x_main.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c
index 03d02403c19e..fd3e5331922c 100644
--- a/drivers/net/ethernet/microchip/lan743x_main.c
+++ b/drivers/net/ethernet/microchip/lan743x_main.c
@@ -1934,7 +1934,8 @@ static void lan743x_rx_update_tail(struct lan743x_rx *rx, int index)
 				  index);
 }
 
-static int lan743x_rx_init_ring_element(struct lan743x_rx *rx, int index)
+static int lan743x_rx_init_ring_element(struct lan743x_rx *rx, int index,
+					gfp_t gfp)
 {
 	struct net_device *netdev = rx->adapter->netdev;
 	struct device *dev = &rx->adapter->pdev->dev;
@@ -1948,7 +1949,7 @@ static int lan743x_rx_init_ring_element(struct lan743x_rx *rx, int index)
 
 	descriptor = &rx->ring_cpu_ptr[index];
 	buffer_info = &rx->buffer_info[index];
-	skb = __netdev_alloc_skb(netdev, buffer_length, GFP_ATOMIC | GFP_DMA);
+	skb = __netdev_alloc_skb(netdev, buffer_length, gfp);
 	if (!skb)
 		return -ENOMEM;
 	dma_ptr = dma_map_single(dev, skb->data, buffer_length, DMA_FROM_DEVICE);
@@ -2110,7 +2111,8 @@ 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)) {
+	if (lan743x_rx_init_ring_element(rx, rx->last_head,
+					 GFP_ATOMIC | GFP_DMA)) {
 		/* failed to allocate next skb.
 		 * Memory is very low.
 		 * Drop this packet and reuse buffer.
@@ -2315,13 +2317,16 @@ static int lan743x_rx_ring_init(struct lan743x_rx *rx)
 
 	rx->last_head = 0;
 	for (index = 0; index < rx->ring_size; index++) {
-		ret = lan743x_rx_init_ring_element(rx, index);
+		ret = lan743x_rx_init_ring_element(rx, index, GFP_KERNEL);
 		if (ret)
 			goto cleanup;
 	}
 	return 0;
 
 cleanup:
+	netif_warn(rx->adapter, ifup, rx->adapter->netdev,
+		   "Error allocating memory for LAN743x\n");
+
 	lan743x_rx_ring_cleanup(rx);
 	return ret;
 }
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net] net: ethernet: microchip: lan743x: Fix skb allocation failure
  2021-10-27 18:23 [PATCH net] net: ethernet: microchip: lan743x: Fix skb allocation failure Yuiko Oshino
@ 2021-10-28 13:50 ` patchwork-bot+netdevbpf
  0 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-10-28 13:50 UTC (permalink / raw)
  To: Yuiko Oshino; +Cc: davem, netdev, bryan.whitehead, UNGLinuxDriver

Hello:

This patch was applied to netdev/net.git (master)
by David S. Miller <davem@davemloft.net>:

On Wed, 27 Oct 2021 14:23:02 -0400 you wrote:
> 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>
> ---
>  drivers/net/ethernet/microchip/lan743x_main.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)

Here is the summary with links:
  - [net] net: ethernet: microchip: lan743x: Fix skb allocation failure
    https://git.kernel.org/netdev/net/c/e8684db191e4

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH net] net: ethernet: microchip: lan743x: Fix skb allocation failure
@ 2021-11-02 14:10 Yuiko Oshino
  0 siblings, 0 replies; 6+ messages in thread
From: Yuiko Oshino @ 2021-11-02 14:10 UTC (permalink / raw)
  To: yuiko.oshino; +Cc: stable

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)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net] net: ethernet: microchip: lan743x: Fix skb allocation failure
@ 2021-11-02 14:14 Yuiko Oshino
  2021-11-03  9:43 ` Greg KH
  0 siblings, 1 reply; 6+ messages in thread
From: Yuiko Oshino @ 2021-11-02 14:14 UTC (permalink / raw)
  To: stable; +Cc: Yuiko Oshino

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)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net] net: ethernet: microchip: lan743x: Fix skb allocation failure
  2021-11-02 14:14 Yuiko Oshino
@ 2021-11-03  9:43 ` Greg KH
  2021-11-03 11:28   ` Yuiko.Oshino
  0 siblings, 1 reply; 6+ messages in thread
From: Greg KH @ 2021-11-03  9:43 UTC (permalink / raw)
  To: Yuiko Oshino; +Cc: stable

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

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: [PATCH net] net: ethernet: microchip: lan743x: Fix skb allocation failure
  2021-11-03  9:43 ` Greg KH
@ 2021-11-03 11:28   ` Yuiko.Oshino
  0 siblings, 0 replies; 6+ messages in thread
From: Yuiko.Oshino @ 2021-11-03 11:28 UTC (permalink / raw)
  To: greg; +Cc: stable

>-----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

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-11-03 11:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-10-27 18:23 [PATCH net] net: ethernet: microchip: lan743x: Fix skb allocation failure Yuiko Oshino
2021-10-28 13:50 ` patchwork-bot+netdevbpf
  -- strict thread matches above, loose matches on Subject: below --
2021-11-02 14:10 Yuiko Oshino
2021-11-02 14:14 Yuiko Oshino
2021-11-03  9:43 ` Greg KH
2021-11-03 11:28   ` Yuiko.Oshino

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.