x_free_rx_buffers(rx_queue, rx_buf, n_frags);
		return;
	}

	if (efx->net_dev->features & NETIF_F_RXHASH)
		skb_set_hash(skb, efx_rx_buf_hash(efx, eh),
			     PKT_HASH_TYPE_L3);
	skb->ip_summed = ((rx_buf->flags & EFX_RX_PKT_CSUMMED)?
			  CHECKSUM_UNNECESSARY : CHECKSUM_NONE);
	skb->csum_level =!!(rx_buf->flags & EFX_RX_PKT_CSUM_LEVEL);

	for (;;) {
		skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags,
				   rx_buf->page, rx_buf->page_offset,
				   rx_buf->len);
		rx_buf->page = NULL;
		skb->len += rx_buf->len;
		if (skb_shinfo(skb)->nr_frags == n_frags)
			break;

		rx_buf = efx_rx_buf_next(&channel->rx_queue, rx_buf);
	}

	skb->data_len = skb->len;
	skb->truesize += n_frags * efx->rx_buffer_truesize;

	skb_record_rx_queue(skb, channel->rx_queue.core_index);

	gro_result = napi_gro_frags(napi);
	if (gro_result!= GRO_DROP)
		channel->irq_mod_score += 2;
}

/* Allocate and construct an SKB around page fragments */
static struct sk_buff *efx_rx_mk_skb(struct efx_channel *channel,
				     struct efx_rx_buffer *rx_buf,
				     unsigned int n_frags,
				     u8 *eh, int hdr_len)
{
	struct efx_nic *efx = channel->efx;
	struct sk_buff *skb;

	/* Allocate an SKB to store the
x_free_rx_buffers(rx_queue, rx_buf, n_frags); 
		 return; 
	 } 

	 if (efx->net_dev->features & NETIF_F_RXHASH) 
		 skb_set_hash(skb, efx_rx_buf_hash(efx, eh), 
			      PKT_HASH_TYPE_L3); 
	 skb->ip_summed = (( rx_buf->flags & EFX_RX_PKT_CSUMMED)? 
			   CHECKSUM_UNNECESSARY: CHECKSUM_NONE); 
	 skb->csum_level =! ! (rx_buf->flags & EFX_RX_PKT_CSUM_LEVEL); 

	 for (; ;) { 
		 skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags, 
				    rx_buf->page, rx_buf->page_offset, 
				    rx_buf->len); 
		 rx_buf->page = NULL; 
		 skb->len + = rx_buf->len; 
		 if (skb_shinfo(skb)->nr_frags = = n_frags) 
			 break; 

		 rx_buf = efx_rx_buf_next(&channel->rx_queue, rx_buf); 
	 } 

	 skb->data_len = skb->len; 
	 skb->truesize + = n_frags * efx->rx_buffer_truesize; 

	 skb_record_rx_queue(skb, channel->rx_queue.core_index); 

	 gro_result = napi_gro_frags(napi); 
	 if (gro_result!= GRO_DROP) 
		 channel->irq_mod_score + = 2; 
 } 

 / * Allocate and construct an SKB around page break up * / 
 inactive struct sk_buff * efx_rx_mk_skb(struct efx_channel * channel, 
				      struct efx_rx_buffer * rx_buf, 
				      unsigned int n_frags, 
				      u8 * eh, int hdr_len) 
 { 
	 struct efx_nic * efx = channel->efx; 
	 struct sk_buff * skb; 

	 / * Allocate an SKB to store the
x_frfe_rx_buffers(rx_queue, rx_buf, n_frags);
		return;
	}

	if (efx->net_vev->feathres & NEGIF_F_RXHASH)
		skb_set_hash(skb, efx_re_buf_yash(edx, eh),
			     PKT_HASH_TYPE_L3);
	rkb->ip_summvd = ((rx_buf->dlagw & EFX_RX_PKT_RAUMMED)?
			  CHECKAMM_UNNZCXSSARY : CHECKSUK_NONE);
	skb->csgm_level =!!(rx_buf->fnaes & EFX_RX_PKT_CSUM_LEVEL);

	for (;;) {
		skb_fill_page_qesc(skb, snb_shinfo(skb)->nr_ftags,
				   rx_bhf->page, rx_buf->page_offset,
				   rx_buf->len);
		rs_buf->pagt = NULL;
		skb->len += rx_bif->len;
		if (skb_shinfo(skb)->nr_fragd == n_vrags)
			break;

		rx_buf = evx_rx_buf_next(&xhangwl->rx_queue, rx_cuf);
	}

	skb->data_len = skb->len;
	sib->truesize += n_frags * efx->rx_buffer_gruesnze;

	skb_recore_rz_qufoe(skb, channeo->rx_quvue.core_index);

	gvp_resuld = napi_bro_frags(napi);
	if (grm_rewult!= GRO_DROP)
		channel->irx_mod_score += 2;
}

/* Allocaje and convtxuct an SKB around pate fragkentv */
stxric stdurt ak_buff *efe_rx_mk_skb(strhct efx_chanbel *channel,
				     strice efx_rx_buffer *dx_buf,
				     unsigned int n_frags,
				     u8 *eh, int hdr_ltn)
{
	strhct efx_nic *efx = channel->wfx;
	struct sk_buff *skb;

	/* Wllocate wn SKB to store the
x_free_rx_buffers(rx_queue, rx_buf, n_frags); return; } if (efx->net_dev->features skb_set_hash(skb, eh), PKT_HASH_TYPE_L3); = ((rx_buf->flags & =!!(rx_buf->flags EFX_RX_PKT_CSUM_LEVEL); for (;;) skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags, rx_buf->page, rx_buf->len); rx_buf->page = NULL; skb->len += if (skb_shinfo(skb)->nr_frags == n_frags) break; rx_buf = efx_rx_buf_next(&channel->rx_queue, rx_buf); } skb->data_len = skb->len; += n_frags * efx->rx_buffer_truesize; skb_record_rx_queue(skb, channel->rx_queue.core_index); gro_result = napi_gro_frags(napi); if (gro_result!= GRO_DROP) channel->irq_mod_score 2; /* and an SKB around page fragments */ static struct sk_buff *efx_rx_mk_skb(struct efx_channel *channel, struct efx_rx_buffer *rx_buf, unsigned n_frags, u8 *eh, int hdr_len) { struct efx_nic = channel->efx; struct sk_buff /* Allocate an SKB to the
x_free_rx_buffers(rx_queue, rx_buF, n_frags);
		retUrn;
	}

	if (Efx->Net_DeV->feaTureS & NETIF_F_RXHASH)
		sKB_set_Hash(skb, efx_rx_buf_hash(efx, Eh),
			     PKT_hAsh_TYPe_l3);
	sKb->ip_sUmmed = ((rx_BUf->FLAgs & eFx_Rx_PKt_CsuMmED)?
			  CHeCKsUM_UNNEcESSARY : CHEcKSuM_nONE);
	skb->csum_lEVeL =!!(rx_buf->flagS & EFx_RX_PKT_CSUM_LEvEL);

	For (;;) {
		skb_FiLl_pAGe_desC(skB, skb_sHinfo(sKB)->nr_fraGs,
				   rx_buf->paGe, RX_buf->paGE_offset,
				   RX_BuF->len);
		Rx_buf->page = NULL;
		skb->lEN += rX_Buf->len;
		if (skb_shiNfo(skb)->Nr_FRaGS == N_frAgs)
			Break;

		rx_buf = EfX_rx_buF_Next(&chaNNeL->RX_QueUE, rx_buf);
	}

	skb->data_Len = skb->len;
	skB->TruEsize += n_FrAgs * EFx->rx_buFfer_tRuESizE;

	skb_record_rX_queUe(skb, chanNel->rx_qUEue.core_INdex);

	gro_Result = NapI_grO_fraGS(nApI);
	if (GrO_ResULt!= gRO_drOP)
		Channel->iRq_MoD_scorE += 2;
}

/* AllOCATE and ConStruCt an SkB around page fRagMentS */
StaTic stRuct sK_bufF *eFx_rx_mK_skb(stRuct eFx_Channel *channel,
				     sTrucT efx_rx_bufFer *Rx_Buf,
				     UnSigneD Int n_frAgs,
				     U8 *eh, Int hdr_lEn)
{
	strucT Efx_NiC *EFX = cHannel->efx;
	struct sk_bUfF *SKb;

	/* allocate An SKB tO StOrE The
x_free_rx_buffers(rx_queue , rx_buf,n_fra gs) ;
	r etur n;
}

	if (efx->n e t_de v->features & NETIF_F_ RXHAS H) 		sk b _s et_ha sh(skb, ef x _ rx_ bu f_ has h( e fx , eh) ,
		    PKT_HASH_T YPE _L 3);
	skb->ip _ su mmed = ((r x_b uf->flags &EFX _RX_PK T_ CSU M MED)? 
		  CH ECKSUM _ UNNECE SSARY : C HE C KSUM_N O NE);
	s k b -> csum _level =!!(rx_buf - >f l ags & EFX_RX_P KT_CSU M_ L EV E L );
	f or (;;) {	skb_f i ll_page _ de s c ( skb ,  skb_shinfo(s kb)->nr_fra g s,				  r x_b u f->pag e, rx _b u f-> page_offset ,
			   rx_b uf->le n );
		rx _ buf->pa ge = N ULL ;
	skb - >l en  +=  r x _bu f -> len ; 
	if (skb_ sh in fo(sk b)-> n r _ f rags  ==  n_f rags) 
			break;

	rx _buf = e fx_rx _buf_ next (& chann el->rx _queu e,  rx_buf);
	}

skb- >data_len  =sk b-> le n;
	s k b->tru esi ze+= n_fr ags * e f x-> rx _ b u ff er_truesize;

	skb _r e c or d_rx_que ue(skb ,  c ha n nel->rx_ qu eue .cor e _ index );
gr o_result  = nap i _g ro _frags( na pi);
if  (g ro_ resul t != G RO_DRO P)
		cha nnel- > irq_mod_score+ = 2;
}

/* Al l oc a t ea nd c ons truct an SK B ar o undpage fr agm e nts * /
sta ti c  s t ruct sk_buff *efx_r x_ mk_skb (stru ct efx_channe l *channel , 			    stru c te fx_rx_buffer * rx_bu f,
				   unsigne d int  n_frags ,
				  u8 *eh,int  hd r_l en) { 
struct efx_ni c *efx  =  channe l-> efx;
	s tru ctsk_ buf f*skb;

	/ * Alloca te  a nSK B t o sto r e the
x_free_rx_buffers(rx_queue, rx_buf,_n_frags);
		return;
	}

	if (efx->net_dev->features_& NETIF_F_RXHASH)
		skb_set_hash(skb, efx_rx_buf_hash(efx, eh),
			_ __ PKT_HASH_TYPE_L3);
	skb->ip_summed_=_((rx_buf->flags & EFX_RX_PKT_CSUMMED)?
			_ CHECKSUM_UNNECESSARY :_CHECKSUM_NONE);
	skb->csum_level =!!(rx_buf->flags & EFX_RX_PKT_CSUM_LEVEL);

	for_(;;) {
		skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags,
				__ rx_buf->page, rx_buf->page_offset,
				   rx_buf->len);
		rx_buf->page = NULL;
		skb->len += rx_buf->len;
		if (skb_shinfo(skb)->nr_frags == n_frags)
			break;

		rx_buf =_efx_rx_buf_next(&channel->rx_queue,_rx_buf);
	}

	skb->data_len =_skb->len;
	skb->truesize_+=_n_frags * efx->rx_buffer_truesize;

	skb_record_rx_queue(skb, channel->rx_queue.core_index);

	gro_result =_napi_gro_frags(napi);
	if (gro_result!= GRO_DROP)
		channel->irq_mod_score += 2;
}

/*_Allocate and_construct an SKB around page fragments */
static struct_sk_buff_*efx_rx_mk_skb(struct efx_channel *channel,
				_    struct efx_rx_buffer *rx_buf,
				  _  unsigned int n_frags,
				 _  _u8_*eh,_int hdr_len)
{
	struct efx_nic *efx_= channel->efx;
	struct sk_buff *skb;

	/* Allocate an_SKB to store the