dev->last_rx = jiffies; netif_receive_skb(skb);  ++work_done; 
++work_done; } else skge_rx_reuse(e, skge->rx_buf_size); 
static int skge_poll(struct net_device *dev, int *budget){	struct skge_port *skge = netdev_priv(dev);	struct skge_hw *hw = skge->hw;	struct skge_ring *ring = &skge->rx_ring;	struct skge_element *e;	unsigned int to_do = min(dev->quota, *budget);	unsigned int work_done = 0;	int done;	pr_debug("skge_poll\n");	for (e = ring->to_clean; e != ring->to_use && work_done < to_do;	     e = e->next) {		struct skge_rx_desc *rd = e->desc;		struct sk_buff *skb = e->skb;		u32 control, len, status;		rmb();		control = rd->control;		if (control & BMU_OWN)			break;		len = control & BMU_BBC;		e->skb = NULL;		pci_unmap_single(hw->pdev,				 pci_unmap_addr(e, mapaddr),				 pci_unmap_len(e, maplen),				 PCI_DMA_FROMDEVICE);		status = rd->status;		if ((control & (BMU_EOF|BMU_STF)) != (BMU_STF|BMU_EOF)		     || len > dev->mtu + VLAN_ETH_HLEN		     || bad_phy_status(hw, status)) {			skge_rx_error(skge, e - ring->start, control, status);			dev_kfree_skb(skb);			continue;		}		if (netif_msg_rx_status(skge))		    printk(KERN_DEBUG PFX "%s: rx slot %td status 0x%x len %d\n",			   dev->name, e - ring->start, rd->status, len);		skb_put(skb, len);		skb->protocol = eth_type_trans(skb, dev);		if (skge->rx_csum) {			skb->csum = le16_to_cpu(rd->csum2);			skb->ip_summed = CHECKSUM_HW;		}		dev->last_rx = jiffies;		netif_receive_skb(skb);		++work_done;	}	ring->to_clean = e;	*budget -= work_done;	dev->quota -= work_done;	done = work_done < to_do;	if (skge_rx_fill(skge))		done = 0;	/* restart receiver */	wmb();	skge_write8(hw, Q_ADDR(rxqaddr[skge->port], Q_CSR),		    CSR_START | CSR_IRQ_CL_F);	if (done) {		local_irq_disable();		__netif_rx_complete(dev);		hw->intr_mask |= portirqmask[skge->port];		skge_write32(hw, B0_IMSK, hw->intr_mask);		local_irq_enable();	}	return !done;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/19a33d4e6be2b627487676a69638e189e833675f/skge.c/clean/drivers/net/skge.c