u32 control, len, status; 
u32 control; 
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;	for (e = ring->to_clean; work_done < to_do; e = e->next) {		struct skge_rx_desc *rd = e->desc;		struct sk_buff *skb;		u32 control, len, status;		rmb();		control = rd->control;		if (control & BMU_OWN)			break;		len = control & BMU_BBC;		status = rd->status;		if (unlikely((control & (BMU_EOF|BMU_STF)) != (BMU_STF|BMU_EOF)			     || bad_phy_status(hw, status))) {			skge_rx_error(skge, e - ring->start, control, status);			skge_rx_reuse(e, skge->rx_buf_size);			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 = skge_rx_get(skge, e, len);		if (likely(skb)) {			skb_put(skb, len);			skb->protocol = eth_type_trans(skb, dev);			dev->last_rx = jiffies;			netif_receive_skb(skb);			++work_done;		} else			skge_rx_reuse(e, skge->rx_buf_size);	}	ring->to_clean = e;	/* restart receiver */	wmb();	skge_write8(hw, Q_ADDR(rxqaddr[skge->port], Q_CSR),		    CSR_START | CSR_IRQ_CL_F);	*budget -= work_done;	dev->quota -= work_done;	if (work_done >=  to_do)		return 1; /* not 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 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/383181ac7e59542ff47e2b81f7e4c40aba39b30b/skge.c/buggy/drivers/net/skge.c