Re: [RFC PATCH v3 3/6] vhost/vsock: support MSG_EOR bit processing
From: Stefano Garzarella <sgarzare@redhat.com>
Date: 2021-08-24 10:01:15
Also in:
kvm, lkml, virtualization
On Mon, Aug 16, 2021 at 11:51:40AM +0300, Arseny Krasnov wrote:
'MSG_EOR' handling has same logic as 'MSG_EOM' - if bit present
s/same/similar
quoted hunk ↗ jump to hunk
in packet's header, reset it to 0. Then restore it back if packet processing wasn't completed. Instead of bool variable for each flag, bit mask variable was added: it has logical OR of 'MSG_EOR' and 'MSG_EOM' if needed, to restore flags, this variable is ORed with flags field of packet. Signed-off-by: Arseny Krasnov <redacted> --- drivers/vhost/vsock.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index feaf650affbe..d217955bbcd4 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c@@ -114,7 +114,7 @@ vhost_transport_do_send_pkt(struct vhost_vsock *vsock,size_t nbytes; size_t iov_len, payload_len; int head; - bool restore_flag = false; + uint32_t flags_to_restore = 0;
checkpatch.pl suggest the following: CHECK: Prefer kernel type 'u32' over 'uint32_t' Sorry, I suggested that, I forgot that u32 is preferable :-)
quoted hunk ↗ jump to hunk
spin_lock_bh(&vsock->send_pkt_list_lock); if (list_empty(&vsock->send_pkt_list)) {@@ -187,7 +187,12 @@ vhost_transport_do_send_pkt(struct vhost_vsock*vsock, */
Please also update the comment above with the new flag handled.
quoted hunk ↗ jump to hunk
if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOM) { pkt->hdr.flags &= ~cpu_to_le32(VIRTIO_VSOCK_SEQ_EOM); - restore_flag = true; + flags_to_restore |= VIRTIO_VSOCK_SEQ_EOM; + + if (le32_to_cpu(pkt->hdr.flags) & VIRTIO_VSOCK_SEQ_EOR) { + pkt->hdr.flags &= ~cpu_to_le32(VIRTIO_VSOCK_SEQ_EOR); + flags_to_restore |= VIRTIO_VSOCK_SEQ_EOR; + } } }@@ -224,8 +229,7 @@ vhost_transport_do_send_pkt(struct vhost_vsock *vsock,* to send it with the next available buffer. */ if (pkt->off < pkt->len) { - if (restore_flag) - pkt->hdr.flags |= cpu_to_le32(VIRTIO_VSOCK_SEQ_EOM); + pkt->hdr.flags |= cpu_to_le32(flags_to_restore); /* We are queueing the same virtio_vsock_pkt to handle * the remaining bytes, and we want to deliver it -- 2.25.1
The rest LGTM. Stefano