amd-xgbe: Use napi_alloc_skb when allocating skb in softirq
authorLendacky, Thomas <Thomas.Lendacky@amd.com>
Fri, 20 Mar 2015 16:50:41 +0000 (11:50 -0500)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Mar 2015 20:33:57 +0000 (16:33 -0400)
Use the napi_alloc_skb function to allocate an skb when running within
the softirq context to avoid calls to local_irq_save/restore.

Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/amd/xgbe/xgbe-drv.c

index fc362be5472b774bbaf2ba6ca851c3884fc12eac..347fe2419a18a0514b7ea3f29350a0c1e33deae4 100644 (file)
@@ -1821,16 +1821,15 @@ static void xgbe_rx_refresh(struct xgbe_channel *channel)
                          lower_32_bits(rdata->rdesc_dma));
 }
 
-static struct sk_buff *xgbe_create_skb(struct xgbe_prv_data *pdata,
+static struct sk_buff *xgbe_create_skb(struct napi_struct *napi,
                                       struct xgbe_ring_data *rdata,
                                       unsigned int *len)
 {
-       struct net_device *netdev = pdata->netdev;
        struct sk_buff *skb;
        u8 *packet;
        unsigned int copy_len;
 
-       skb = netdev_alloc_skb_ip_align(netdev, rdata->rx.hdr.dma_len);
+       skb = napi_alloc_skb(napi, rdata->rx.hdr.dma_len);
        if (!skb)
                return NULL;
 
@@ -2000,7 +1999,7 @@ read_again:
                                                        rdata->rx.hdr.dma_len,
                                                        DMA_FROM_DEVICE);
 
-                               skb = xgbe_create_skb(pdata, rdata, &put_len);
+                               skb = xgbe_create_skb(napi, rdata, &put_len);
                                if (!skb) {
                                        error = 1;
                                        goto skip_data;