veth_error("missing EOF frag in event " "eofmask=0x%x startchunk=%d\n", (unsigned) senddata->eofmask, startchunk); 
veth_error("Missing EOF fragment in event " "eofmask = 0x%x startchunk = %d\n", (unsigned)senddata->eofmask, startchunk); 
static void veth_receive(struct veth_lpar_connection *cnx,			 struct VethLpEvent *event){	struct VethFramesData *senddata = &event->u.frames_data;	int startchunk = 0;	int nchunks;	unsigned long flags;	HvLpDma_Rc rc;	do {		u16 length = 0;		struct sk_buff *skb;		struct dma_chunk local_list[VETH_MAX_PAGES_PER_FRAME];		struct dma_chunk remote_list[VETH_MAX_FRAMES_PER_MSG];		u64 dest;		HvLpVirtualLanIndex vlan;		struct net_device *dev;		struct veth_port *port;		/* FIXME: do we need this? */		memset(local_list, 0, sizeof(local_list));		memset(remote_list, 0, sizeof(VETH_MAX_FRAMES_PER_MSG));		/* a 0 address marks the end of the valid entries */		if (senddata->addr[startchunk] == 0)			break;		/* make sure that we have at least 1 EOF entry in the		 * remaining entries */		if (! (senddata->eofmask >> (startchunk + VETH_EOF_SHIFT))) {			veth_error("missing EOF frag in event "				   "eofmask=0x%x startchunk=%d\n",				   (unsigned) senddata->eofmask, startchunk);			break;		}		/* build list of chunks in this frame */		nchunks = 0;		do {			remote_list[nchunks].addr =				(u64) senddata->addr[startchunk+nchunks] << 32;			remote_list[nchunks].size =				senddata->len[startchunk+nchunks];			length += remote_list[nchunks].size;		} while (! (senddata->eofmask &			    (1 << (VETH_EOF_SHIFT + startchunk + nchunks++))));		/* length == total length of all chunks */		/* nchunks == # of chunks in this frame */		if ((length - ETH_HLEN) > VETH_MAX_MTU) {			veth_error("Received oversize frame from lpar %d "				   "(length=%d)\n", cnx->remote_lp, length);			continue;		}		skb = alloc_skb(length, GFP_ATOMIC);		if (!skb)			continue;		veth_build_dma_list(local_list, skb->data, length);		rc = HvCallEvent_dmaBufList(HvLpEvent_Type_VirtualLan,					    event->base_event.xSourceLp,					    HvLpDma_Direction_RemoteToLocal,					    cnx->src_inst,					    cnx->dst_inst,					    HvLpDma_AddressType_RealAddress,					    HvLpDma_AddressType_TceIndex,					    ISERIES_HV_ADDR(&local_list),					    ISERIES_HV_ADDR(&remote_list),					    length);		if (rc != HvLpDma_Rc_Good) {			dev_kfree_skb_irq(skb);			continue;		}		vlan = skb->data[9];		dev = veth_dev[vlan];		if (! dev) {			/*			 * Some earlier versions of the driver sent			 * broadcasts down all connections, even to lpars			 * that weren't on the relevant vlan. So ignore			 * packets belonging to a vlan we're not on.			 * We can also be here if we receive packets while			 * the driver is going down, because then dev is NULL.			 */			dev_kfree_skb_irq(skb);			continue;		}		port = (struct veth_port *)dev->priv;		dest = *((u64 *) skb->data) & 0xFFFFFFFFFFFF0000;		if ((vlan > HVMAXARCHITECTEDVIRTUALLANS) || !port) {			dev_kfree_skb_irq(skb);			continue;		}		if (! veth_frame_wanted(port, dest)) {			dev_kfree_skb_irq(skb);			continue;		}		skb_put(skb, length);		skb->dev = dev;		skb->protocol = eth_type_trans(skb, dev);		skb->ip_summed = CHECKSUM_NONE;		netif_rx(skb);	/* send it up */		port->stats.rx_packets++;		port->stats.rx_bytes += length;	} while (startchunk += nchunks, startchunk < VETH_MAX_FRAMES_PER_MSG);	/* Ack it */	spin_lock_irqsave(&cnx->lock, flags);	BUG_ON(cnx->num_pending_acks > VETH_MAX_ACKS_PER_MSG);	cnx->pending_acks[cnx->num_pending_acks++] =		event->base_event.xCorrelationToken;	if ( (cnx->num_pending_acks >= cnx->remote_caps.ack_threshold)	     || (cnx->num_pending_acks >= VETH_MAX_ACKS_PER_MSG) )		veth_flush_acks(cnx);	spin_unlock_irqrestore(&cnx->lock, flags);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/61a3c6966158dfd9b1279c10ea8eeb3bc7acdef4/iseries_veth.c/buggy/drivers/net/iseries_veth.c