|
@@ -518,7 +518,7 @@ static void receive_buf(struct virtnet_info *vi, struct receive_queue *rq,
|
|
|
|
|
|
skb_mark_napi_id(skb, &rq->napi);
|
|
skb_mark_napi_id(skb, &rq->napi);
|
|
|
|
|
|
- netif_receive_skb(skb);
|
|
|
|
|
|
+ napi_gro_receive(&rq->napi, skb);
|
|
return;
|
|
return;
|
|
|
|
|
|
frame_err:
|
|
frame_err:
|
|
@@ -756,7 +756,7 @@ static int virtnet_poll(struct napi_struct *napi, int budget)
|
|
/* Out of packets? */
|
|
/* Out of packets? */
|
|
if (received < budget) {
|
|
if (received < budget) {
|
|
r = virtqueue_enable_cb_prepare(rq->vq);
|
|
r = virtqueue_enable_cb_prepare(rq->vq);
|
|
- napi_complete(napi);
|
|
|
|
|
|
+ napi_complete_done(napi, received);
|
|
if (unlikely(virtqueue_poll(rq->vq, r)) &&
|
|
if (unlikely(virtqueue_poll(rq->vq, r)) &&
|
|
napi_schedule_prep(napi)) {
|
|
napi_schedule_prep(napi)) {
|
|
virtqueue_disable_cb(rq->vq);
|
|
virtqueue_disable_cb(rq->vq);
|