le16_to_cpu(rx_desc->wb.middle.vlan & E1000_RXD_SPC_VLAN_MASK)); 
le16_to_cpu(rx_desc->wb.middle.vlan) & E1000_RXD_SPC_VLAN_MASK); 
e1000_clean_rx_irq_ps(struct e1000_adapter *adapter)#endif{	struct e1000_desc_ring *rx_ring = &adapter->rx_ring;	union e1000_rx_desc_packet_split *rx_desc;	struct net_device *netdev = adapter->netdev;	struct pci_dev *pdev = adapter->pdev;	struct e1000_buffer *buffer_info;	struct e1000_ps_page *ps_page;	struct e1000_ps_page_dma *ps_page_dma;	struct sk_buff *skb;	unsigned int i, j;	uint32_t length, staterr;	boolean_t cleaned = FALSE;	i = rx_ring->next_to_clean;	rx_desc = E1000_RX_DESC_PS(*rx_ring, i);	staterr = rx_desc->wb.middle.status_error;	while(staterr & E1000_RXD_STAT_DD) {		buffer_info = &rx_ring->buffer_info[i];		ps_page = &rx_ring->ps_page[i];		ps_page_dma = &rx_ring->ps_page_dma[i];#ifdef CONFIG_E1000_NAPI		if(unlikely(*work_done >= work_to_do))			break;		(*work_done)++;#endif		cleaned = TRUE;		pci_unmap_single(pdev, buffer_info->dma,				 buffer_info->length,				 PCI_DMA_FROMDEVICE);		skb = buffer_info->skb;		if(unlikely(!(staterr & E1000_RXD_STAT_EOP))) {			E1000_DBG("%s: Packet Split buffers didn't pick up"				  " the full packet\n", netdev->name);			dev_kfree_skb_irq(skb);			goto next_desc;		}		if(unlikely(staterr & E1000_RXDEXT_ERR_FRAME_ERR_MASK)) {			dev_kfree_skb_irq(skb);			goto next_desc;		}		length = le16_to_cpu(rx_desc->wb.middle.length0);		if(unlikely(!length)) {			E1000_DBG("%s: Last part of the packet spanning"				  " multiple descriptors\n", netdev->name);			dev_kfree_skb_irq(skb);			goto next_desc;		}		/* Good Receive */		skb_put(skb, length);		for(j = 0; j < PS_PAGE_BUFFERS; j++) {			if(!(length = le16_to_cpu(rx_desc->wb.upper.length[j])))				break;			pci_unmap_page(pdev, ps_page_dma->ps_page_dma[j],					PAGE_SIZE, PCI_DMA_FROMDEVICE);			ps_page_dma->ps_page_dma[j] = 0;			skb_shinfo(skb)->frags[j].page =				ps_page->ps_page[j];			ps_page->ps_page[j] = NULL;			skb_shinfo(skb)->frags[j].page_offset = 0;			skb_shinfo(skb)->frags[j].size = length;			skb_shinfo(skb)->nr_frags++;			skb->len += length;			skb->data_len += length;		}		e1000_rx_checksum(adapter, staterr,				  rx_desc->wb.lower.hi_dword.csum_ip.csum, skb);		skb->protocol = eth_type_trans(skb, netdev);#ifdef HAVE_RX_ZERO_COPY		if(likely(rx_desc->wb.upper.header_status &			  E1000_RXDPS_HDRSTAT_HDRSP))			skb_shinfo(skb)->zero_copy = TRUE;#endif#ifdef CONFIG_E1000_NAPI		if(unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) {			vlan_hwaccel_receive_skb(skb, adapter->vlgrp,				le16_to_cpu(rx_desc->wb.middle.vlan &					E1000_RXD_SPC_VLAN_MASK));		} else {			netif_receive_skb(skb);		}#else /* CONFIG_E1000_NAPI */		if(unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) {			vlan_hwaccel_rx(skb, adapter->vlgrp,				le16_to_cpu(rx_desc->wb.middle.vlan &					E1000_RXD_SPC_VLAN_MASK));		} else {			netif_rx(skb);		}#endif /* CONFIG_E1000_NAPI */		netdev->last_rx = jiffies;next_desc:		rx_desc->wb.middle.status_error &= ~0xFF;		buffer_info->skb = NULL;		if(unlikely(++i == rx_ring->count)) i = 0;		rx_desc = E1000_RX_DESC_PS(*rx_ring, i);		staterr = rx_desc->wb.middle.status_error;	}	rx_ring->next_to_clean = i;	adapter->alloc_rx_buf(adapter);	return cleaned;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/683a38f374d65128c8dd392a724513f9b8818bf7/e1000_main.c/buggy/drivers/net/e1000/e1000_main.c