summaryrefslogtreecommitdiff
path: root/drivers/net/sis190.c
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@vyatta.com>2008-04-27 16:36:59 +0400
committerFrancois Romieu <romieu@fr.zoreil.com>2008-04-27 16:36:59 +0400
commit4709aa59ede5ff9902d60088d93d1c0e2e9d2247 (patch)
tree8317f78faec39ab664dd28250923aff647c0dfab /drivers/net/sis190.c
parentf946dffed6334f08da065a89ed65026ebf8b33b4 (diff)
downloadlinux-4709aa59ede5ff9902d60088d93d1c0e2e9d2247.tar.xz
sis190: use the allocated buffer as a status code in sis190_alloc_rx_skb
The local status code does not carry mory information. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Acked-by: Francois Romieu <romieu@fr.zoreil.com>
Diffstat (limited to 'drivers/net/sis190.c')
-rw-r--r--drivers/net/sis190.c37
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)
desc->status = 0x0;
}
-static int sis190_alloc_rx_skb(struct pci_dev *pdev, struct sk_buff **sk_buff,
- struct RxDesc *desc, u32 rx_buf_sz)
+static struct sk_buff *sis190_alloc_rx_skb(struct pci_dev *pdev,
+ struct RxDesc *desc, u32 rx_buf_sz)
{
struct sk_buff *skb;
- dma_addr_t mapping;
- int ret = 0;
skb = dev_alloc_skb(rx_buf_sz);
- if (!skb)
- goto err_out;
-
- *sk_buff = skb;
-
- mapping = pci_map_single(pdev, skb->data, rx_buf_sz,
- PCI_DMA_FROMDEVICE);
+ if (likely(skb)) {
+ dma_addr_t mapping;
- sis190_map_to_asic(desc, mapping, rx_buf_sz);
-out:
- return ret;
+ mapping = pci_map_single(pdev, skb->data, rx_buf_sz,
+ PCI_DMA_FROMDEVICE);
+ sis190_map_to_asic(desc, mapping, rx_buf_sz);
+ } else
+ sis190_make_unusable_by_asic(desc);
-err_out:
- ret = -ENOMEM;
- sis190_make_unusable_by_asic(desc);
- goto out;
+ return skb;
}
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,
u32 cur;
for (cur = start; cur < end; cur++) {
- int ret, i = cur % NUM_RX_DESC;
+ unsigned int i = cur % NUM_RX_DESC;
if (tp->Rx_skbuff[i])
continue;
- ret = sis190_alloc_rx_skb(tp->pci_dev, tp->Rx_skbuff + i,
- tp->RxDescRing + i, tp->rx_buf_sz);
- if (ret < 0)
+ tp->Rx_skbuff[i] = sis190_alloc_rx_skb(tp->pci_dev,
+ tp->RxDescRing + i,
+ tp->rx_buf_sz);
+ if (!tp->Rx_skbuff[i])
break;
}
return cur - start;