diff options
-rw-r--r-- | drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 7 | ||||
-rw-r--r-- | drivers/net/ethernet/aquantia/atlantic/aq_ring.h | 5 | ||||
-rw-r--r-- | drivers/net/ethernet/aquantia/atlantic/aq_vec.c | 1 |
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)) |
137 | int aq_ring_rx_clean(struct aq_ring_s *self, int *work_done, int budget) | 137 | int 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); | |||
148 | void aq_ring_rx_deinit(struct aq_ring_s *self); | 148 | void aq_ring_rx_deinit(struct aq_ring_s *self); |
149 | void aq_ring_free(struct aq_ring_s *self); | 149 | void aq_ring_free(struct aq_ring_s *self); |
150 | void aq_ring_tx_clean(struct aq_ring_s *self); | 150 | void aq_ring_tx_clean(struct aq_ring_s *self); |
151 | int aq_ring_rx_clean(struct aq_ring_s *self, int *work_done, int budget); | 151 | int aq_ring_rx_clean(struct aq_ring_s *self, |
152 | struct napi_struct *napi, | ||
153 | int *work_done, | ||
154 | int budget); | ||
152 | int aq_ring_rx_fill(struct aq_ring_s *self); | 155 | int 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) |