Commit cfbdab951369f15de890597530076bf0119361be
Committed by
Michael S. Tsirkin
1 parent
fcc042a280
Exists in
master
and in
20 other branches
vhost-net: check the support of mergeable buffer outside the receive loop
No need to check the support of mergeable buffer inside the recevie loop as the whole handle_rx()_xx is in the read critical region. So this patch move it ahead of the receiving loop. Signed-off-by: Jason Wang <jasowang@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Showing 1 changed file with 3 additions and 2 deletions Side-by-side Diff
drivers/vhost/net.c
... | ... | @@ -411,7 +411,7 @@ |
411 | 411 | .hdr.gso_type = VIRTIO_NET_HDR_GSO_NONE |
412 | 412 | }; |
413 | 413 | size_t total_len = 0; |
414 | - int err, headcount; | |
414 | + int err, headcount, mergeable; | |
415 | 415 | size_t vhost_hlen, sock_hlen; |
416 | 416 | size_t vhost_len, sock_len; |
417 | 417 | /* TODO: check that we are running from vhost_worker? */ |
... | ... | @@ -427,6 +427,7 @@ |
427 | 427 | |
428 | 428 | vq_log = unlikely(vhost_has_feature(&net->dev, VHOST_F_LOG_ALL)) ? |
429 | 429 | vq->log : NULL; |
430 | + mergeable = vhost_has_feature(&net->dev, VIRTIO_NET_F_MRG_RXBUF); | |
430 | 431 | |
431 | 432 | while ((sock_len = peek_head_len(sock->sk))) { |
432 | 433 | sock_len += sock_hlen; |
... | ... | @@ -476,7 +477,7 @@ |
476 | 477 | break; |
477 | 478 | } |
478 | 479 | /* TODO: Should check and handle checksum. */ |
479 | - if (vhost_has_feature(&net->dev, VIRTIO_NET_F_MRG_RXBUF) && | |
480 | + if (likely(mergeable) && | |
480 | 481 | memcpy_toiovecend(vq->hdr, (unsigned char *)&headcount, |
481 | 482 | offsetof(typeof(hdr), num_buffers), |
482 | 483 | sizeof hdr.num_buffers)) { |