diff options
Diffstat (limited to 'drivers/net/ethernet/amd/pcnet32.c')
| -rw-r--r-- | drivers/net/ethernet/amd/pcnet32.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/drivers/net/ethernet/amd/pcnet32.c b/drivers/net/ethernet/amd/pcnet32.c index 9eaefa0f5e80..4f3076d4ea34 100644 --- a/drivers/net/ethernet/amd/pcnet32.c +++ b/drivers/net/ethernet/amd/pcnet32.c @@ -491,11 +491,11 @@ static void pcnet32_realloc_tx_ring(struct net_device *dev, if (!new_tx_ring) return; - new_dma_addr_list = kcalloc(entries, sizeof(dma_addr_t), GFP_ATOMIC); + new_dma_addr_list = kzalloc_objs(dma_addr_t, entries, GFP_ATOMIC); if (!new_dma_addr_list) goto free_new_tx_ring; - new_skb_list = kcalloc(entries, sizeof(struct sk_buff *), GFP_ATOMIC); + new_skb_list = kzalloc_objs(struct sk_buff *, entries, GFP_ATOMIC); if (!new_skb_list) goto free_new_lists; @@ -550,11 +550,11 @@ static void pcnet32_realloc_rx_ring(struct net_device *dev, if (!new_rx_ring) return; - new_dma_addr_list = kcalloc(entries, sizeof(dma_addr_t), GFP_ATOMIC); + new_dma_addr_list = kzalloc_objs(dma_addr_t, entries, GFP_ATOMIC); if (!new_dma_addr_list) goto free_new_rx_ring; - new_skb_list = kcalloc(entries, sizeof(struct sk_buff *), GFP_ATOMIC); + new_skb_list = kzalloc_objs(struct sk_buff *, entries, GFP_ATOMIC); if (!new_skb_list) goto free_new_lists; @@ -1407,8 +1407,10 @@ static int pcnet32_poll(struct napi_struct *napi, int budget) pcnet32_restart(dev, CSR0_START); netif_wake_queue(dev); } + spin_unlock_irqrestore(&lp->lock, flags); if (work_done < budget && napi_complete_done(napi, work_done)) { + spin_lock_irqsave(&lp->lock, flags); /* clear interrupt masks */ val = lp->a->read_csr(ioaddr, CSR3); val &= 0x00ff; @@ -1416,9 +1418,9 @@ static int pcnet32_poll(struct napi_struct *napi, int budget) /* Set interrupt enable. */ lp->a->write_csr(ioaddr, CSR0, CSR0_INTEN); + spin_unlock_irqrestore(&lp->lock, flags); } - spin_unlock_irqrestore(&lp->lock, flags); return work_done; } @@ -2035,23 +2037,19 @@ static int pcnet32_alloc_ring(struct net_device *dev, const char *name) return -ENOMEM; } - lp->tx_dma_addr = kcalloc(lp->tx_ring_size, sizeof(dma_addr_t), - GFP_KERNEL); + lp->tx_dma_addr = kzalloc_objs(dma_addr_t, lp->tx_ring_size); if (!lp->tx_dma_addr) return -ENOMEM; - lp->rx_dma_addr = kcalloc(lp->rx_ring_size, sizeof(dma_addr_t), - GFP_KERNEL); + lp->rx_dma_addr = kzalloc_objs(dma_addr_t, lp->rx_ring_size); if (!lp->rx_dma_addr) return -ENOMEM; - lp->tx_skbuff = kcalloc(lp->tx_ring_size, sizeof(struct sk_buff *), - GFP_KERNEL); + lp->tx_skbuff = kzalloc_objs(struct sk_buff *, lp->tx_ring_size); if (!lp->tx_skbuff) return -ENOMEM; - lp->rx_skbuff = kcalloc(lp->rx_ring_size, sizeof(struct sk_buff *), - GFP_KERNEL); + lp->rx_skbuff = kzalloc_objs(struct sk_buff *, lp->rx_ring_size); if (!lp->rx_skbuff) return -ENOMEM; |
