Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4099e012 authored by David S. Miller's avatar David S. Miller
Browse files

niu: Add GRO support.

parent 129dd967
Loading
Loading
Loading
Loading
+7 −5
Original line number Original line Diff line number Diff line
@@ -3441,7 +3441,8 @@ static int niu_rx_pkt_ignore(struct niu *np, struct rx_ring_info *rp)
	return num_rcr;
	return num_rcr;
}
}


static int niu_process_rx_pkt(struct niu *np, struct rx_ring_info *rp)
static int niu_process_rx_pkt(struct napi_struct *napi, struct niu *np,
			      struct rx_ring_info *rp)
{
{
	unsigned int index = rp->rcr_index;
	unsigned int index = rp->rcr_index;
	struct sk_buff *skb;
	struct sk_buff *skb;
@@ -3518,7 +3519,7 @@ static int niu_process_rx_pkt(struct niu *np, struct rx_ring_info *rp)


	skb->protocol = eth_type_trans(skb, np->dev);
	skb->protocol = eth_type_trans(skb, np->dev);
	skb_record_rx_queue(skb, rp->rx_channel);
	skb_record_rx_queue(skb, rp->rx_channel);
	netif_receive_skb(skb);
	napi_gro_receive(napi, skb);


	return num_rcr;
	return num_rcr;
}
}
@@ -3706,7 +3707,8 @@ static inline void niu_sync_rx_discard_stats(struct niu *np,
	}
	}
}
}


static int niu_rx_work(struct niu *np, struct rx_ring_info *rp, int budget)
static int niu_rx_work(struct napi_struct *napi, struct niu *np,
		       struct rx_ring_info *rp, int budget)
{
{
	int qlen, rcr_done = 0, work_done = 0;
	int qlen, rcr_done = 0, work_done = 0;
	struct rxdma_mailbox *mbox = rp->mbox;
	struct rxdma_mailbox *mbox = rp->mbox;
@@ -3728,7 +3730,7 @@ static int niu_rx_work(struct niu *np, struct rx_ring_info *rp, int budget)
	rcr_done = work_done = 0;
	rcr_done = work_done = 0;
	qlen = min(qlen, budget);
	qlen = min(qlen, budget);
	while (work_done < qlen) {
	while (work_done < qlen) {
		rcr_done += niu_process_rx_pkt(np, rp);
		rcr_done += niu_process_rx_pkt(napi, np, rp);
		work_done++;
		work_done++;
	}
	}


@@ -3776,7 +3778,7 @@ static int niu_poll_core(struct niu *np, struct niu_ldg *lp, int budget)
		if (rx_vec & (1 << rp->rx_channel)) {
		if (rx_vec & (1 << rp->rx_channel)) {
			int this_work_done;
			int this_work_done;


			this_work_done = niu_rx_work(np, rp,
			this_work_done = niu_rx_work(&lp->napi, np, rp,
						     budget);
						     budget);


			budget -= this_work_done;
			budget -= this_work_done;