Thread (16 messages) flat view 16 messages, 2 authors, 2021-08-30

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help