for (e = ring->to_clean; work_done < to_do; e = e->next) { 
for (e = ring->to_clean; prefetch(e->next), work_done < to_do; e = e->next) { 
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;		rmb();		control = rd->control;		if (control & BMU_OWN)			break; 		skb = skge_rx_get(skge, e, control, rd->status, 				  le16_to_cpu(rd->csum2));		if (likely(skb)) {			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;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1631aef15193ef8a199982fa3d45db4d07786d7f/skge.c/buggy/drivers/net/skge.c