Skip to content

Commit a3b9c05

Browse files
akihikodakimstsirkin
authored andcommitted
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: 41e3e42 ("vhost/net: enable virtio 1.0") Signed-off-by: Akihiko Odaki <[email protected]> Message-Id: <[email protected]> Signed-off-by: Michael S. Tsirkin <[email protected]>
1 parent 5abfb22 commit a3b9c05

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

drivers/vhost/net.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1107,6 +1107,7 @@ static void handle_rx(struct vhost_net *net)
11071107
size_t vhost_hlen, sock_hlen;
11081108
size_t vhost_len, sock_len;
11091109
bool busyloop_intr = false;
1110+
bool set_num_buffers;
11101111
struct socket *sock;
11111112
struct iov_iter fixup;
11121113
__virtio16 num_buffers;
@@ -1129,6 +1130,8 @@ static void handle_rx(struct vhost_net *net)
11291130
vq_log = unlikely(vhost_has_feature(vq, VHOST_F_LOG_ALL)) ?
11301131
vq->log : NULL;
11311132
mergeable = vhost_has_feature(vq, VIRTIO_NET_F_MRG_RXBUF);
1133+
set_num_buffers = mergeable ||
1134+
vhost_has_feature(vq, VIRTIO_F_VERSION_1);
11321135

11331136
do {
11341137
sock_len = vhost_net_rx_peek_head_len(net, sock->sk,
@@ -1205,7 +1208,7 @@ static void handle_rx(struct vhost_net *net)
12051208
/* TODO: Should check and handle checksum. */
12061209

12071210
num_buffers = cpu_to_vhost16(vq, headcount);
1208-
if (likely(mergeable) &&
1211+
if (likely(set_num_buffers) &&
12091212
copy_to_iter(&num_buffers, sizeof num_buffers,
12101213
&fixup) != sizeof num_buffers) {
12111214
vq_err(vq, "Failed num_buffers write");

0 commit comments

Comments
 (0)