mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 23:13:01 +02:00
vhost/net: Set num_buffers for virtio 1.0
The specification says the device MUST set num_buffers to 1 if
VIRTIO_NET_F_MRG_RXBUF has not been negotiated.
Fixes: 41e3e42108 ("vhost/net: enable virtio 1.0")
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240915-v1-v1-1-f10d2cb5e759@daynix.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
5abfb2208b
commit
a3b9c053d8
|
|
@ -1107,6 +1107,7 @@ static void handle_rx(struct vhost_net *net)
|
|||
size_t vhost_hlen, sock_hlen;
|
||||
size_t vhost_len, sock_len;
|
||||
bool busyloop_intr = false;
|
||||
bool set_num_buffers;
|
||||
struct socket *sock;
|
||||
struct iov_iter fixup;
|
||||
__virtio16 num_buffers;
|
||||
|
|
@ -1129,6 +1130,8 @@ static void handle_rx(struct vhost_net *net)
|
|||
vq_log = unlikely(vhost_has_feature(vq, VHOST_F_LOG_ALL)) ?
|
||||
vq->log : NULL;
|
||||
mergeable = vhost_has_feature(vq, VIRTIO_NET_F_MRG_RXBUF);
|
||||
set_num_buffers = mergeable ||
|
||||
vhost_has_feature(vq, VIRTIO_F_VERSION_1);
|
||||
|
||||
do {
|
||||
sock_len = vhost_net_rx_peek_head_len(net, sock->sk,
|
||||
|
|
@ -1205,7 +1208,7 @@ static void handle_rx(struct vhost_net *net)
|
|||
/* TODO: Should check and handle checksum. */
|
||||
|
||||
num_buffers = cpu_to_vhost16(vq, headcount);
|
||||
if (likely(mergeable) &&
|
||||
if (likely(set_num_buffers) &&
|
||||
copy_to_iter(&num_buffers, sizeof num_buffers,
|
||||
&fixup) != sizeof num_buffers) {
|
||||
vq_err(vq, "Failed num_buffers write");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user