Commit 7f7223b8 authored by Linas Vepstas's avatar Linas Vepstas Committed by Jeff Garzik

Spidernet Cleanup return codes

Simplify the somewhat convoluted use of return codes
in the rx buffer handling.
Signed-off-by: default avatarLinas Vepstas <linas@austin.ibm.com>
Cc: James K Lewis <jklewis@us.ibm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 366684bd
...@@ -911,12 +911,10 @@ spider_net_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) ...@@ -911,12 +911,10 @@ spider_net_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
* @descr: descriptor to process * @descr: descriptor to process
* @card: card structure * @card: card structure
* *
* returns 1 on success, 0 if no packet was passed to the stack
*
* Fills out skb structure and passes the data to the stack. * Fills out skb structure and passes the data to the stack.
* The descriptor state is not changed. * The descriptor state is not changed.
*/ */
static int static void
spider_net_pass_skb_up(struct spider_net_descr *descr, spider_net_pass_skb_up(struct spider_net_descr *descr,
struct spider_net_card *card) struct spider_net_card *card)
{ {
...@@ -961,8 +959,6 @@ spider_net_pass_skb_up(struct spider_net_descr *descr, ...@@ -961,8 +959,6 @@ spider_net_pass_skb_up(struct spider_net_descr *descr,
/* update netdevice statistics */ /* update netdevice statistics */
card->netdev_stats.rx_packets++; card->netdev_stats.rx_packets++;
card->netdev_stats.rx_bytes += skb->len; card->netdev_stats.rx_bytes += skb->len;
return 1;
} }
/** /**
...@@ -981,7 +977,6 @@ spider_net_decode_one_descr(struct spider_net_card *card) ...@@ -981,7 +977,6 @@ spider_net_decode_one_descr(struct spider_net_card *card)
struct spider_net_descr_chain *chain = &card->rx_chain; struct spider_net_descr_chain *chain = &card->rx_chain;
struct spider_net_descr *descr = chain->tail; struct spider_net_descr *descr = chain->tail;
int status; int status;
int result;
status = spider_net_get_descr_status(descr); status = spider_net_get_descr_status(descr);
...@@ -999,8 +994,6 @@ spider_net_decode_one_descr(struct spider_net_card *card) ...@@ -999,8 +994,6 @@ spider_net_decode_one_descr(struct spider_net_card *card)
/* descriptor definitively used -- move on tail */ /* descriptor definitively used -- move on tail */
chain->tail = descr->next; chain->tail = descr->next;
result = 0;
/* unmap descriptor */ /* unmap descriptor */
pci_unmap_single(card->pdev, descr->buf_addr, pci_unmap_single(card->pdev, descr->buf_addr,
SPIDER_NET_MAX_FRAME, PCI_DMA_FROMDEVICE); SPIDER_NET_MAX_FRAME, PCI_DMA_FROMDEVICE);
...@@ -1012,8 +1005,7 @@ spider_net_decode_one_descr(struct spider_net_card *card) ...@@ -1012,8 +1005,7 @@ spider_net_decode_one_descr(struct spider_net_card *card)
pr_err("%s: dropping RX descriptor with state %d\n", pr_err("%s: dropping RX descriptor with state %d\n",
card->netdev->name, status); card->netdev->name, status);
card->netdev_stats.rx_dropped++; card->netdev_stats.rx_dropped++;
dev_kfree_skb_irq(descr->skb); goto bad_desc;
goto refill;
} }
if ( (status != SPIDER_NET_DESCR_COMPLETE) && if ( (status != SPIDER_NET_DESCR_COMPLETE) &&
...@@ -1022,8 +1014,7 @@ spider_net_decode_one_descr(struct spider_net_card *card) ...@@ -1022,8 +1014,7 @@ spider_net_decode_one_descr(struct spider_net_card *card)
pr_err("%s: RX descriptor with unkown state %d\n", pr_err("%s: RX descriptor with unkown state %d\n",
card->netdev->name, status); card->netdev->name, status);
card->spider_stats.rx_desc_unk_state++; card->spider_stats.rx_desc_unk_state++;
dev_kfree_skb_irq(descr->skb); goto bad_desc;
goto refill;
} }
/* The cases we'll throw away the packet immediately */ /* The cases we'll throw away the packet immediately */
...@@ -1033,17 +1024,18 @@ spider_net_decode_one_descr(struct spider_net_card *card) ...@@ -1033,17 +1024,18 @@ spider_net_decode_one_descr(struct spider_net_card *card)
"data_status=x%08x, data_error=x%08x\n", "data_status=x%08x, data_error=x%08x\n",
card->netdev->name, card->netdev->name,
descr->data_status, descr->data_error); descr->data_status, descr->data_error);
card->spider_stats.rx_desc_error++; goto bad_desc;
dev_kfree_skb_irq(descr->skb);
goto refill;
} }
/* ok, we've got a packet in descr */ /* Ok, we've got a packet in descr */
result = spider_net_pass_skb_up(descr, card); spider_net_pass_skb_up(descr, card);
refill:
/* change the descriptor state: */
descr->dmac_cmd_status = SPIDER_NET_DESCR_NOT_IN_USE; descr->dmac_cmd_status = SPIDER_NET_DESCR_NOT_IN_USE;
return result; return 1;
bad_desc:
dev_kfree_skb_irq(descr->skb);
descr->dmac_cmd_status = SPIDER_NET_DESCR_NOT_IN_USE;
return 0;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment