aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_ring.c7
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_ring.h5
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_vec.c1
3 files changed, 10 insertions, 3 deletions
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
index 9a0817938eca..4b445750b93e 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
@@ -134,7 +134,10 @@ static inline unsigned int aq_ring_dx_in_range(unsigned int h, unsigned int i,
134} 134}
135 135
136#define AQ_SKB_ALIGN SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) 136#define AQ_SKB_ALIGN SKB_DATA_ALIGN(sizeof(struct skb_shared_info))
137int aq_ring_rx_clean(struct aq_ring_s *self, int *work_done, int budget) 137int aq_ring_rx_clean(struct aq_ring_s *self,
138 struct napi_struct *napi,
139 int *work_done,
140 int budget)
138{ 141{
139 struct net_device *ndev = aq_nic_get_ndev(self->aq_nic); 142 struct net_device *ndev = aq_nic_get_ndev(self->aq_nic);
140 int err = 0; 143 int err = 0;
@@ -240,7 +243,7 @@ int aq_ring_rx_clean(struct aq_ring_s *self, int *work_done, int budget)
240 243
241 skb_record_rx_queue(skb, self->idx); 244 skb_record_rx_queue(skb, self->idx);
242 245
243 netif_receive_skb(skb); 246 napi_gro_receive(napi, skb);
244 247
245 ++self->stats.rx.packets; 248 ++self->stats.rx.packets;
246 self->stats.rx.bytes += skb->len; 249 self->stats.rx.bytes += skb->len;
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.h b/drivers/net/ethernet/aquantia/atlantic/aq_ring.h
index eecd6d1c4d73..782176c5f4f8 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.h
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.h
@@ -148,7 +148,10 @@ int aq_ring_init(struct aq_ring_s *self);
148void aq_ring_rx_deinit(struct aq_ring_s *self); 148void aq_ring_rx_deinit(struct aq_ring_s *self);
149void aq_ring_free(struct aq_ring_s *self); 149void aq_ring_free(struct aq_ring_s *self);
150void aq_ring_tx_clean(struct aq_ring_s *self); 150void aq_ring_tx_clean(struct aq_ring_s *self);
151int aq_ring_rx_clean(struct aq_ring_s *self, int *work_done, int budget); 151int aq_ring_rx_clean(struct aq_ring_s *self,
152 struct napi_struct *napi,
153 int *work_done,
154 int budget);
152int aq_ring_rx_fill(struct aq_ring_s *self); 155int aq_ring_rx_fill(struct aq_ring_s *self);
153 156
154#endif /* AQ_RING_H */ 157#endif /* AQ_RING_H */
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_vec.c b/drivers/net/ethernet/aquantia/atlantic/aq_vec.c
index ad5b4d4dac7f..ec390c5eed35 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_vec.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_vec.c
@@ -78,6 +78,7 @@ __acquires(&self->lock)
78 if (ring[AQ_VEC_RX_ID].sw_head != 78 if (ring[AQ_VEC_RX_ID].sw_head !=
79 ring[AQ_VEC_RX_ID].hw_head) { 79 ring[AQ_VEC_RX_ID].hw_head) {
80 err = aq_ring_rx_clean(&ring[AQ_VEC_RX_ID], 80 err = aq_ring_rx_clean(&ring[AQ_VEC_RX_ID],
81 napi,
81 &work_done, 82 &work_done,
82 budget - work_done); 83 budget - work_done);
83 if (err < 0) 84 if (err < 0)