aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/spider_net.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/drivers/net/spider_net.c b/drivers/net/spider_net.c
index 4c26b9a5683e..32a45859dfdd 100644
--- a/drivers/net/spider_net.c
+++ b/drivers/net/spider_net.c
@@ -911,12 +911,10 @@ spider_net_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
911 * @descr: descriptor to process 911 * @descr: descriptor to process
912 * @card: card structure 912 * @card: card structure
913 * 913 *
914 * returns 1 on success, 0 if no packet was passed to the stack
915 *
916 * Fills out skb structure and passes the data to the stack. 914 * Fills out skb structure and passes the data to the stack.
917 * The descriptor state is not changed. 915 * The descriptor state is not changed.
918 */ 916 */
919static int 917static void
920spider_net_pass_skb_up(struct spider_net_descr *descr, 918spider_net_pass_skb_up(struct spider_net_descr *descr,
921 struct spider_net_card *card) 919 struct spider_net_card *card)
922{ 920{
@@ -961,8 +959,6 @@ spider_net_pass_skb_up(struct spider_net_descr *descr,
961 /* update netdevice statistics */ 959 /* update netdevice statistics */
962 card->netdev_stats.rx_packets++; 960 card->netdev_stats.rx_packets++;
963 card->netdev_stats.rx_bytes += skb->len; 961 card->netdev_stats.rx_bytes += skb->len;
964
965 return 1;
966} 962}
967 963
968/** 964/**
@@ -981,7 +977,6 @@ spider_net_decode_one_descr(struct spider_net_card *card)
981 struct spider_net_descr_chain *chain = &card->rx_chain; 977 struct spider_net_descr_chain *chain = &card->rx_chain;
982 struct spider_net_descr *descr = chain->tail; 978 struct spider_net_descr *descr = chain->tail;
983 int status; 979 int status;
984 int result;
985 980
986 status = spider_net_get_descr_status(descr); 981 status = spider_net_get_descr_status(descr);
987 982
@@ -999,8 +994,6 @@ spider_net_decode_one_descr(struct spider_net_card *card)
999 /* descriptor definitively used -- move on tail */ 994 /* descriptor definitively used -- move on tail */
1000 chain->tail = descr->next; 995 chain->tail = descr->next;
1001 996
1002 result = 0;
1003
1004 /* unmap descriptor */ 997 /* unmap descriptor */
1005 pci_unmap_single(card->pdev, descr->buf_addr, 998 pci_unmap_single(card->pdev, descr->buf_addr,
1006 SPIDER_NET_MAX_FRAME, PCI_DMA_FROMDEVICE); 999 SPIDER_NET_MAX_FRAME, PCI_DMA_FROMDEVICE);
@@ -1012,8 +1005,7 @@ spider_net_decode_one_descr(struct spider_net_card *card)
1012 pr_err("%s: dropping RX descriptor with state %d\n", 1005 pr_err("%s: dropping RX descriptor with state %d\n",
1013 card->netdev->name, status); 1006 card->netdev->name, status);
1014 card->netdev_stats.rx_dropped++; 1007 card->netdev_stats.rx_dropped++;
1015 dev_kfree_skb_irq(descr->skb); 1008 goto bad_desc;
1016 goto refill;
1017 } 1009 }
1018 1010
1019 if ( (status != SPIDER_NET_DESCR_COMPLETE) && 1011 if ( (status != SPIDER_NET_DESCR_COMPLETE) &&
@@ -1022,8 +1014,7 @@ spider_net_decode_one_descr(struct spider_net_card *card)
1022 pr_err("%s: RX descriptor with unkown state %d\n", 1014 pr_err("%s: RX descriptor with unkown state %d\n",
1023 card->netdev->name, status); 1015 card->netdev->name, status);
1024 card->spider_stats.rx_desc_unk_state++; 1016 card->spider_stats.rx_desc_unk_state++;
1025 dev_kfree_skb_irq(descr->skb); 1017 goto bad_desc;
1026 goto refill;
1027 } 1018 }
1028 1019
1029 /* The cases we'll throw away the packet immediately */ 1020 /* The cases we'll throw away the packet immediately */
@@ -1033,17 +1024,18 @@ spider_net_decode_one_descr(struct spider_net_card *card)
1033 "data_status=x%08x, data_error=x%08x\n", 1024 "data_status=x%08x, data_error=x%08x\n",
1034 card->netdev->name, 1025 card->netdev->name,
1035 descr->data_status, descr->data_error); 1026 descr->data_status, descr->data_error);
1036 card->spider_stats.rx_desc_error++; 1027 goto bad_desc;
1037 dev_kfree_skb_irq(descr->skb);
1038 goto refill;
1039 } 1028 }
1040 1029
1041 /* ok, we've got a packet in descr */ 1030 /* Ok, we've got a packet in descr */
1042 result = spider_net_pass_skb_up(descr, card); 1031 spider_net_pass_skb_up(descr, card);
1043refill:
1044 /* change the descriptor state: */
1045 descr->dmac_cmd_status = SPIDER_NET_DESCR_NOT_IN_USE; 1032 descr->dmac_cmd_status = SPIDER_NET_DESCR_NOT_IN_USE;
1046 return result; 1033 return 1;
1034
1035bad_desc:
1036 dev_kfree_skb_irq(descr->skb);
1037 descr->dmac_cmd_status = SPIDER_NET_DESCR_NOT_IN_USE;
1038 return 0;
1047} 1039}
1048 1040
1049/** 1041/**