mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-13 22:25:03 +00:00
net: ethernet: microchip: lan743x: Fix skb allocation failure
commite8684db191
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:23f0703c12
("lan743x: Add main source files for new lan743x driver") Signed-off-by: Yuiko Oshino <yuiko.oshino@microchip.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e02fdd7db4
commit
21fc2bb836
1 changed files with 6 additions and 4 deletions
|
@ -1898,13 +1898,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)
|
||||
|
@ -2077,7 +2077,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.
|
||||
|
@ -2314,7 +2315,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)
|
||||
|
|
Loading…
Reference in a new issue