diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/sis190.c | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/drivers/net/sis190.c b/drivers/net/sis190.c index 20745fd4e973..0d6aa1fc9c68 100644 --- a/drivers/net/sis190.c +++ b/drivers/net/sis190.c | |||
@@ -480,30 +480,22 @@ static inline void sis190_make_unusable_by_asic(struct RxDesc *desc) | |||
480 | desc->status = 0x0; | 480 | desc->status = 0x0; |
481 | } | 481 | } |
482 | 482 | ||
483 | static int sis190_alloc_rx_skb(struct pci_dev *pdev, struct sk_buff **sk_buff, | 483 | static struct sk_buff *sis190_alloc_rx_skb(struct pci_dev *pdev, |
484 | struct RxDesc *desc, u32 rx_buf_sz) | 484 | struct RxDesc *desc, u32 rx_buf_sz) |
485 | { | 485 | { |
486 | struct sk_buff *skb; | 486 | struct sk_buff *skb; |
487 | dma_addr_t mapping; | ||
488 | int ret = 0; | ||
489 | 487 | ||
490 | skb = dev_alloc_skb(rx_buf_sz); | 488 | skb = dev_alloc_skb(rx_buf_sz); |
491 | if (!skb) | 489 | if (likely(skb)) { |
492 | goto err_out; | 490 | dma_addr_t mapping; |
493 | |||
494 | *sk_buff = skb; | ||
495 | |||
496 | mapping = pci_map_single(pdev, skb->data, rx_buf_sz, | ||
497 | PCI_DMA_FROMDEVICE); | ||
498 | 491 | ||
499 | sis190_map_to_asic(desc, mapping, rx_buf_sz); | 492 | mapping = pci_map_single(pdev, skb->data, rx_buf_sz, |
500 | out: | 493 | PCI_DMA_FROMDEVICE); |
501 | return ret; | 494 | sis190_map_to_asic(desc, mapping, rx_buf_sz); |
495 | } else | ||
496 | sis190_make_unusable_by_asic(desc); | ||
502 | 497 | ||
503 | err_out: | 498 | return skb; |
504 | ret = -ENOMEM; | ||
505 | sis190_make_unusable_by_asic(desc); | ||
506 | goto out; | ||
507 | } | 499 | } |
508 | 500 | ||
509 | static u32 sis190_rx_fill(struct sis190_private *tp, struct net_device *dev, | 501 | static u32 sis190_rx_fill(struct sis190_private *tp, struct net_device *dev, |
@@ -512,14 +504,15 @@ static u32 sis190_rx_fill(struct sis190_private *tp, struct net_device *dev, | |||
512 | u32 cur; | 504 | u32 cur; |
513 | 505 | ||
514 | for (cur = start; cur < end; cur++) { | 506 | for (cur = start; cur < end; cur++) { |
515 | int ret, i = cur % NUM_RX_DESC; | 507 | unsigned int i = cur % NUM_RX_DESC; |
516 | 508 | ||
517 | if (tp->Rx_skbuff[i]) | 509 | if (tp->Rx_skbuff[i]) |
518 | continue; | 510 | continue; |
519 | 511 | ||
520 | ret = sis190_alloc_rx_skb(tp->pci_dev, tp->Rx_skbuff + i, | 512 | tp->Rx_skbuff[i] = sis190_alloc_rx_skb(tp->pci_dev, |
521 | tp->RxDescRing + i, tp->rx_buf_sz); | 513 | tp->RxDescRing + i, |
522 | if (ret < 0) | 514 | tp->rx_buf_sz); |
515 | if (!tp->Rx_skbuff[i]) | ||
523 | break; | 516 | break; |
524 | } | 517 | } |
525 | return cur - start; | 518 | return cur - start; |