From nobody Wed Oct 8 10:02:25 2025 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7C1C230BF0; Mon, 30 Jun 2025 07:38:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751269137; cv=none; b=M8JsnWkSC2GBATzIjRWqbS8p4r+hs6fmyi7fIONkCV5GUsSn6+RhAQ+oedxkEujmzCNDuIjAHQSvaD1nRRVxnUU1MIKraIf5YjxUcfyfIPO4KIBFzdCwAIHk0KirzLHMX79Ng73iAl7lClkyJrcn0xj8H9BsiQKqD2gCiYonDEI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751269137; c=relaxed/simple; bh=8zHWFlCigM4oKQM+XUD7NX3O01Q7p6W6jnTQzPT3UPw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=deESLCWshZMjtIUGQXWDzgdeFzF9g22aLKn11qwApb8ldUQMVBooyc0/g+bJzDYehvRFFSMp+eQ9RVrZAK2CQGV8CZnwvXT9TxoV536accyekf23mWRKW3owYX8mLACHeP9zxeJpH1RqO2Ok1O4lOXpvoLNCKc6ET+iZHUjtLDQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gPk7wZTk; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gPk7wZTk" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-b3220c39cffso2016027a12.0; Mon, 30 Jun 2025 00:38:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751269134; x=1751873934; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Zxu7ig/S9LCUmwMcMSykN7rd/mLUHqPQuKn7T6xu2vY=; b=gPk7wZTkRigQ6yMrSj14kyTtJwzxXQQSTEfM7ssB/kZF+SNxvPj2O50MoDRLh6aJjH pVkMxHpZ1h7c0xfalLieYhW3iGmGxGwIPlx/pMgF7et+cEMtqbjo9oRIp/YDnBIU3nmA wb7pYpOOQWuqtfBoI6EgkNKoy/LNgKyFbPcWS/asU4azFjWUNFjDmX10BzeOvDxZWxqK s8FWrXK2zP5fUi26bQpjT2kZ72D73POH2Cj9fWDwOR80+5n8+kclh+R60ClK67hINFhf Sap+Jb2f/82knBe5W+lITU98JTL2bDTuRmYH2V3lMpwEEbZRfaTiSwiwyvtXDbxRQCGF oOsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751269134; x=1751873934; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Zxu7ig/S9LCUmwMcMSykN7rd/mLUHqPQuKn7T6xu2vY=; b=OPdtZ6wSCV4+bhTo7gfFZpo2TzU1UL03ohfmkVjmhutpQhYrsKPAh36k+T0y8oBuOU tNXg4cLqjCw5InsQhwQeemls9q+PUrked+jsN5k5cTG+ijkB2FJyYuMKs4FqO4chFFCc tmJt0clIy40YurQQ/0bQDc8a8bq40i8ZIHaqb5jBcPVAyiBwLBZkdA3SKPhp3ahJiDxT 90KUFlumlmqn6/rFWW4ZmemzOtHX7gWNgGCP8dpgVhjJbeRc0I/DA0rBD2YT8D9DxLyG Y6ukkGquPUJs6xNexFBElKPYGCJOMm005+Mp3sffVMPavPFg+eg4zHCC8coY8QBxGwO1 WPVQ== X-Forwarded-Encrypted: i=1; AJvYcCVWDXm1Zs63pnPlv+KjEaaGJg1WmI386ylhKh+0WqQN98Lkw7zsmM5Qic6PNVOj8lykhsllcfUgy6va/+Wq@vger.kernel.org, AJvYcCW6sb8V5H5MX93EkPYE8rxYW6+caQv5cSD1GmeRc2NWQFAmhYInA+zJZs2pQmlo45pYpug=@vger.kernel.org, AJvYcCX4QUR/+JmU5EVQdn2PX4tjvhcXdC5yPYIafiCVwCBx+hJ94FwpZdIO6LYmfEivLVLCQ/wklCwu@vger.kernel.org X-Gm-Message-State: AOJu0YwuLZ1tO6U/Q6ipHPRy7A9ShBgaZzOBRGsk2Zz1hPFNC2UltBsl hNmrNHcw5upOWLQNg/6zZ5iabKj1DaoJPkS5Y57SI49xedIlRKokN1RV X-Gm-Gg: ASbGncuVE26FLWAxBYRrWCC1LV1rij12XxeyGIdfUgCrS5xfRFXpWnGvHea+8NsDSyk VJ9hoUEjsDBqeiFW/Rz9Tn8o/BTrCUHkMDrH9qB8lMJ4EucXcBqeob9IWgOm12xTqnSfl62GOBI S6Dtq9VHMh82roIl4+TYfwB1IBjWVCYNx+P7Cf3bfdA0OdYui7gva5BH5umJgsCAloht14bOIUT QvjZgZC+WZ+fBEYZM7ObwWE6jKGtRyt43rP6qd7cKDENW0NSoMmbXjfrfmiyoeUyiyuV+MWPis1 p/XEB5Qak1JtWSI3ohKjc0LR94gJjs/A53FWLWoAigJzmttbatPJpPCR6ENcFPpdeMF5UmBtcVI WcNYj1ZDK X-Google-Smtp-Source: AGHT+IE1QdmSYxev8iN4dxDowA6la8V3gpzolPl3kw80LV0ejyoAdzLd6I54yNlIqSmD3I5yGH7Rww== X-Received: by 2002:a05:6a20:c704:b0:220:63bd:2bdb with SMTP id adf61e73a8af0-220a16ca7famr20405202637.40.1751269134043; Mon, 30 Jun 2025 00:38:54 -0700 (PDT) Received: from devant.antgroup-inc.local ([47.89.83.0]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74af55c8437sm8075175b3a.115.2025.06.30.00.38.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 00:38:53 -0700 (PDT) From: Xuewei Niu X-Google-Original-From: Xuewei Niu To: sgarzare@redhat.com, mst@redhat.com, pabeni@redhat.com, jasowang@redhat.com, xuanzhuo@linux.alibaba.com, davem@davemloft.net, netdev@vger.kernel.org, stefanha@redhat.com, leonardi@redhat.com, decui@microsoft.com Cc: virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, fupan.lfp@antgroup.com, Xuewei Niu Subject: [PATCH net-next v4 1/3] hv_sock: Return the readable bytes in hvs_stream_has_data() Date: Mon, 30 Jun 2025 15:38:25 +0800 Message-Id: <20250630073827.208576-2-niuxuewei.nxw@antgroup.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250630073827.208576-1-niuxuewei.nxw@antgroup.com> References: <20250630073827.208576-1-niuxuewei.nxw@antgroup.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When hv_sock was originally added, __vsock_stream_recvmsg() and vsock_stream_has_data() actually only needed to know whether there is any readable data or not, so hvs_stream_has_data() was written to return 1 or 0 for simplicity. However, now hvs_stream_has_data() should return the readable bytes because vsock_data_ready() -> vsock_stream_has_data() needs to know the actual bytes rather than a boolean value of 1 or 0. The SIOCINQ ioctl support also needs hvs_stream_has_data() to return the readable bytes. Let hvs_stream_has_data() return the readable bytes of the payload in the next host-to-guest VMBus hv_sock packet. Note: there may be multpile incoming hv_sock packets pending in the VMBus channel's ringbuffer, but so far there is not a VMBus API that allows us to know all the readable bytes in total without reading and caching the payload of the multiple packets, so let's just return the readable bytes of the next single packet. In the future, we'll either add a VMBus API that allows us to know the total readable bytes without touching the data in the ringbuffer, or the hv_sock driver needs to understand the VMBus packet format and parse the packets directly. Signed-off-by: Dexuan Cui Signed-off-by: Xuewei Niu --- net/vmw_vsock/hyperv_transport.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transp= ort.c index 31342ab502b4..64f1290a9ae7 100644 --- a/net/vmw_vsock/hyperv_transport.c +++ b/net/vmw_vsock/hyperv_transport.c @@ -694,15 +694,25 @@ static ssize_t hvs_stream_enqueue(struct vsock_sock *= vsk, struct msghdr *msg, static s64 hvs_stream_has_data(struct vsock_sock *vsk) { struct hvsock *hvs =3D vsk->trans; + bool need_refill =3D !hvs->recv_desc; s64 ret; =20 if (hvs->recv_data_len > 0) - return 1; + return hvs->recv_data_len; =20 switch (hvs_channel_readable_payload(hvs->chan)) { case 1: - ret =3D 1; - break; + if (!need_refill) + return -EIO; + + hvs->recv_desc =3D hv_pkt_iter_first(hvs->chan); + if (!hvs->recv_desc) + return -ENOBUFS; + + ret =3D hvs_update_recv_data(hvs); + if (ret) + return ret; + return hvs->recv_data_len; case 0: vsk->peer_shutdown |=3D SEND_SHUTDOWN; ret =3D 0; --=20 2.34.1 From nobody Wed Oct 8 10:02:25 2025 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC45F2367D1; Mon, 30 Jun 2025 07:38:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751269140; cv=none; b=EEskfv+gIAn/XFXzQ7NiiIqBb5cybwDKcKz/9zMsIYI42bXklLWvlJyder0NaXcLybHDQyUjNlx21BmzIz4konJt2eO7gTUI4zvD5REtdOKAg6FW1GFfflTISLMqRTbZsFMSQYeBmO096CwpIpM8+W2BhD7MnUXlgrgv+7PaV5c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751269140; c=relaxed/simple; bh=6e8nhq3wAutajxTDZ1caB5Wt0cNk1tW6jl9nRmn/iB0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=aFfOGjnG/MMaYIXbWMeJyiLVI/Ul8LmZAuHTVcxr0kpg586Avwo6VSBuG3tjiIwOslhDvcH/U0lhh51zRzB3cKrCJ5h+iABSCeaJAumZwKkHjbWDSMg7ukwiA1ey/KoPmc5pHoJF4FU8o4chNBwNoUg+jMWKcQZQ54ZgR77LBc4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=kr/RquQu; arc=none smtp.client-ip=209.85.210.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kr/RquQu" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-73c17c770a7so2353848b3a.2; Mon, 30 Jun 2025 00:38:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751269138; x=1751873938; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JCu94amvUYw2PYDfqBO7v4QOw2C4FxuMQOpeOs/4SKI=; b=kr/RquQu05Mcf/lCUKFnVwItA3uHvdavoikEZkISWkYM06ewjNwgoPHi8c3c0m+XL0 +pr4euS+mY2Ed8rzLEVSVbxXArb9mYSe5ktrECGcb/XBr5JyCBGl6GCB+RZf8OcGISYW bsDpTvrSVOjfCkYJiVrJ/fFe+VCj6AnA2cmDmY+irdd2+VLHQCx6+91zZp2HE2MEx8uN RxO2MCzZRj62CTSDSr15C+lA7cwwtxf/6SkqJperP2IxjT3pIxxIXPsKr7h+kSmZH7BA HDW5TTB9d1regzg0i2vX9nmnoWw7fFOiM80IMwIXYkaGVvyE9AjRn1j5ESEh+Xo0y5Ew cFNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751269138; x=1751873938; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JCu94amvUYw2PYDfqBO7v4QOw2C4FxuMQOpeOs/4SKI=; b=s9jSo61Tc2soHDi7kdjlC+XtDVHkgn6MJQpEyEIhFP6u1G7QrjGZV4LOnuxS9/W3+t hXiI0SXuPsRvCSn7i3hwekb+TV19K+2VoQNNZKo64Xe5fD0XIlngWEdb/3G1BlPzxc8H iZq39MMbsVcnM45W1Mb2fCZTP6Mbnf+NCatW0yzHQC8NGF05btZ4vAWfDX2uLtPnFNMK 5CVm8ifR99R87tSCO0d+e6FK9dc2L/3mO30LjFaCXp76JNaM2GFktIfbfXPOypnWUcqd S6qnwzqjmonTCKQEJunY7C9wXqn8z4QhApuoVCLnTfNTH1JteUsagt3RgPaYBNtrK0/H D6cw== X-Forwarded-Encrypted: i=1; AJvYcCVBJ7hYjygFUj6AsNclOYcxB+HQbBVDuG4zx38KsIsDICM8kElyAClRYZn6kdk1whxf+RE=@vger.kernel.org, AJvYcCVLYMtIn93rzpzAGeZ0LGAElaqrsnQtu7xTLg72GfBNDqbptNw69zYcXExCrNe43M7+Cx1p66uk@vger.kernel.org, AJvYcCVN1H4R+LbUJCb0Sus7vrS1CMoaoQLV/RYeWbpmBsJSlMB5JkD4MeF06BkhLnRCWQba3qrE5Q0A/9IR4QyU@vger.kernel.org X-Gm-Message-State: AOJu0YxqwQdNFtSkq6yYDJr3kmZfcHpKTOnFzGjf08fMf4+Z6ddilJef fnskXrBc/NzYh/F+oy1OA7oA45jOLpgZOvvWkdYCOMu+qL33bItNrOBr X-Gm-Gg: ASbGncuvgP0JUo8GWs/3nieSL+bYzfrbCtlheBHI8dMRuBEbr3otg2xxhvZHd7ozn1W 47+Vfyjc+sr9y+ObNP902SDX7bvruAf1Edp38Fy263X6T6Vz9NIgKS6x3zGkaKY3VTB5OXa+zWg 0/4oYodndsD5CKpSrWOPf3aAnvGQp9g1HhJPYWV6o/zwbepVIWLyAgUbXzWgszCE8zT9IpSlyts kxuMz6Nv2NKN/Js7ajII7RKYmjH3M64TbuXARwFIgEWr95aAw5FXEAxcwf8h4FeOnvcmtAO1iNE 7WZnJdPoyZ1FjYAIwMl3nzqtyZTE/OOZ863gi9GbVWAvkfQV0lkZn3x94gJftAc6oETtZqMLBVB B1F8LMqKx X-Google-Smtp-Source: AGHT+IG/jR+dNY+ztEgPJIk4JDK34oOEoYzWT7UbmazWLOyYpCAQk+M2Lag6gLOzU5qTgSOklpp6uA== X-Received: by 2002:a05:6a00:b8e:b0:742:b3a6:db16 with SMTP id d2e1a72fcca58-74af6f6d21amr19468497b3a.20.1751269138035; Mon, 30 Jun 2025 00:38:58 -0700 (PDT) Received: from devant.antgroup-inc.local ([47.89.83.0]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74af55c8437sm8075175b3a.115.2025.06.30.00.38.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 00:38:57 -0700 (PDT) From: Xuewei Niu X-Google-Original-From: Xuewei Niu To: sgarzare@redhat.com, mst@redhat.com, pabeni@redhat.com, jasowang@redhat.com, xuanzhuo@linux.alibaba.com, davem@davemloft.net, netdev@vger.kernel.org, stefanha@redhat.com, leonardi@redhat.com, decui@microsoft.com Cc: virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, fupan.lfp@antgroup.com, Xuewei Niu Subject: [PATCH net-next v4 2/3] test/vsock: Add retry mechanism to ioctl wrapper Date: Mon, 30 Jun 2025 15:38:26 +0800 Message-Id: <20250630073827.208576-3-niuxuewei.nxw@antgroup.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250630073827.208576-1-niuxuewei.nxw@antgroup.com> References: <20250630073827.208576-1-niuxuewei.nxw@antgroup.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Wrap the ioctl in `ioctl_int()`, which takes a pointer to the actual int value and an expected int value. The function will not return until either the ioctl returns the expected value or a timeout occurs, thus avoiding immediate failure. Signed-off-by: Xuewei Niu --- tools/testing/vsock/util.c | 32 +++++++++++++++++++++++--------- tools/testing/vsock/util.h | 1 + 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/tools/testing/vsock/util.c b/tools/testing/vsock/util.c index 0c7e9cbcbc85..481c395227e4 100644 --- a/tools/testing/vsock/util.c +++ b/tools/testing/vsock/util.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include =20 @@ -97,28 +98,41 @@ void vsock_wait_remote_close(int fd) close(epollfd); } =20 -/* Wait until transport reports no data left to be sent. - * Return false if transport does not implement the unsent_bytes() callbac= k. +/* Wait until ioctl gives an expected int value. + * Return false if the op is not supported. */ -bool vsock_wait_sent(int fd) +bool vsock_ioctl_int(int fd, unsigned long op, int *actual, int expected) { - int ret, sock_bytes_unsent; + int ret; + char name[32]; + + snprintf(name, sizeof(name), "ioctl(%lu)", op); =20 timeout_begin(TIMEOUT); do { - ret =3D ioctl(fd, SIOCOUTQ, &sock_bytes_unsent); + ret =3D ioctl(fd, op, actual); if (ret < 0) { if (errno =3D=3D EOPNOTSUPP) break; =20 - perror("ioctl(SIOCOUTQ)"); + perror(name); exit(EXIT_FAILURE); } - timeout_check("SIOCOUTQ"); - } while (sock_bytes_unsent !=3D 0); + timeout_check(name); + } while (*actual !=3D expected); timeout_end(); =20 - return !ret; + return ret >=3D 0; +} + +/* Wait until transport reports no data left to be sent. + * Return false if transport does not implement the unsent_bytes() callbac= k. + */ +bool vsock_wait_sent(int fd) +{ + int sock_bytes_unsent; + + return vsock_ioctl_int(fd, SIOCOUTQ, &sock_bytes_unsent, 0); } =20 /* Create socket , bind to and return the file descripto= r. */ diff --git a/tools/testing/vsock/util.h b/tools/testing/vsock/util.h index 5e2db67072d5..d59581f68d61 100644 --- a/tools/testing/vsock/util.h +++ b/tools/testing/vsock/util.h @@ -54,6 +54,7 @@ int vsock_stream_listen(unsigned int cid, unsigned int po= rt); int vsock_seqpacket_accept(unsigned int cid, unsigned int port, struct sockaddr_vm *clientaddrp); void vsock_wait_remote_close(int fd); +bool vsock_ioctl_int(int fd, unsigned long op, int *actual, int expected); bool vsock_wait_sent(int fd); void send_buf(int fd, const void *buf, size_t len, int flags, ssize_t expected_ret); --=20 2.34.1 From nobody Wed Oct 8 10:02:25 2025 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E49A9224240; Mon, 30 Jun 2025 07:39:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751269144; cv=none; b=HpbgFYmrV4FoNkLgc4dEK0sKinrdI/4D6Dy+DfKw6vI9s+hcZEd5QSDtHBe+AqZ1UqgGe2w1LIhke6F7M4qd/UxEoIsCp8yQXyFDq5D4BC4G67pfJMmhSyLAfBuzi7Pdk29kvxTZa9hLL52cRIucs5t7IV7G7dIYKiH6oXYbp18= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751269144; c=relaxed/simple; bh=AOZ6oVmWOkitNq/6qx+PmOOk2d4N55RYRHT6AyMe7Lk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=VEJU7ZjxIItVspoMmj+ZsrRx4KsCNi5GQL1/xHW34BFJxXul/3qsL87fqHwT4x00Wqv/Q9sTF9eSxFjiVYSAaAXbS1jM2HEGYLEyle0i4vYQ4Y6zWkA74BSngxHThtaVk/LJAkGnk4KBKBuyHz6QXF3pUFfWWvOVYtMwVJsdDuc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LUmSn2GL; arc=none smtp.client-ip=209.85.215.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LUmSn2GL" Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-b31c84b8052so5143524a12.1; Mon, 30 Jun 2025 00:39:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751269142; x=1751873942; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NP7k3vrg3hSrjisvFnFBQDzzpUXz8NpLnGnPf2tMTWo=; b=LUmSn2GLmfuvXswg7XauO3hJFMUhqjTS35gXA3lhiVBPsr0ojyghpsFqDW4bBTclwM l5TXYTKc7DYKHiziFso3sXIxUO8fat04R+qILwUtLW5r/Hs8HS1QiH4VoxNFqxm6c3Pm Z4FUiU0MkOTG+c/9yExAXPNrPHCczLWTtI9jT7P1oX7A7ZQzCgEBSXhwjQ1rfyHGDVTg x+K5cR5tZPmCPk4TFuWbiG3B9Lkw4E6SNH0J1lFCXWtTwgkDInhGCHJsEGf8ndJ/rewK 7wJP0gRaAGvX5v9m3jJxjU+84fDXwaS0/ReepHUHfV+Qd38fZ/Dk1ZvWrZUw9KRWUy/Q aijw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751269142; x=1751873942; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NP7k3vrg3hSrjisvFnFBQDzzpUXz8NpLnGnPf2tMTWo=; b=OyeKYquhiVLVKnvo9CPkvSL6176aFfPtvqsqmfqkMBbnykkBBTbcj1T6jHKV3ihZK+ TIKshdHDQChdM4shPYwc3ctDtrAnKdO7uiXJHiplHNn5hdeKHSu4YePhWCCePpVqu7An OmaWG/oiIvM8VJq2/RRPgZxHMQ7sFZXrRuYpLHNpAkKcE7Pdr2sMNI3AvxoWyFyGeQOI 0KEGDqXu+nSGiIgxaBtIGhDZGjYIrXh8P4yYhOU5QG0ehsgTM2ikFf6nWxvfdxSnnH5f Rba2mvdH2aXqzghI9ZGoSJ0FmDFDtC+xrgwovCkYcXgtz8KC2pPikx+vF14QduWfLkUH R/Kw== X-Forwarded-Encrypted: i=1; AJvYcCUoWHPh8zVmEFkJJCPLMlyw62WinosBHkYPsOWvjAR+ejNjJLIIKCLH3asoNfjpkXCJE0UUK8Ps92ykefgB@vger.kernel.org, AJvYcCVd7sp1aQ217G8Lutr3VqSLNB3oV0AXFMKdsP1wZV0IKWAbMeei3LJLjxgpzmn12D/pXww=@vger.kernel.org, AJvYcCXbf6xzhOqH6F8UorRZW3JXxURcQWnqwjc008Kr8CyW455tbQf4lPjN+ym41aQIaux7rV9Zsuwi@vger.kernel.org X-Gm-Message-State: AOJu0YytlKSoFvgC7VF+cBM3aZuoRnDLp6a/d4LyPWkzz4U8rdufaAlp ddvgJXtzK50K+Vok5mu9pZ211KHpXT5ScrZW5QRB21jGqjR+sIFh0+q3kuXpD5AMf2i2K1in X-Gm-Gg: ASbGncv+YCJu4bV2+r6Sil1/8D6JvDg5UO//+zaqJuuxaKl0cVTI6nOcXi6upmqBaC/ KMEegjk8b0X4IQ1a0CmXr6r4w5mWvMSOa9Y1paZv7KXh43ZeYdk0Anj6XXO6mzzJpqCmnHeFpid UQfI3Uvzl/ufyBRYgq7jZZheR6TWBFTLPioUfNhW7iZpDzEpueXcSOfDngy4oCroWsNO7yLHyLZ q2vPddcNFC7jQulNVopOm+hk3I5LF4acAJLIzfyel5vANx8pKIUZnjvmiDVZqhT/J8JCVEQ2MXV T+U1g60uqW5MixX6GGHtTCsU7KR0bJ1aAL9e9wV9sDGiXFYfwwIXV2P0Y87qeCUCET/3541GJqy Ubjkk6OSm X-Google-Smtp-Source: AGHT+IFsEXxcldaRKPnifcj924EJJK7H2ZTMlfpiPLPTt1OR+FEiYFdG6Niq3uwrDxXy9YRewc/0jA== X-Received: by 2002:a05:6a20:a111:b0:1f5:6f95:2544 with SMTP id adf61e73a8af0-220a1834a51mr18403660637.33.1751269142145; Mon, 30 Jun 2025 00:39:02 -0700 (PDT) Received: from devant.antgroup-inc.local ([47.89.83.0]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74af55c8437sm8075175b3a.115.2025.06.30.00.38.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 00:39:01 -0700 (PDT) From: Xuewei Niu X-Google-Original-From: Xuewei Niu To: sgarzare@redhat.com, mst@redhat.com, pabeni@redhat.com, jasowang@redhat.com, xuanzhuo@linux.alibaba.com, davem@davemloft.net, netdev@vger.kernel.org, stefanha@redhat.com, leonardi@redhat.com, decui@microsoft.com Cc: virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, fupan.lfp@antgroup.com, Xuewei Niu Subject: [PATCH net-next v4 3/3] test/vsock: Add ioctl SIOCINQ tests Date: Mon, 30 Jun 2025 15:38:27 +0800 Message-Id: <20250630073827.208576-4-niuxuewei.nxw@antgroup.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250630073827.208576-1-niuxuewei.nxw@antgroup.com> References: <20250630073827.208576-1-niuxuewei.nxw@antgroup.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add SIOCINQ ioctl tests for both SOCK_STREAM and SOCK_SEQPACKET. The client waits for the server to send data, and checks if the SIOCINQ ioctl value matches the data size. After consuming the data, the client checks if the SIOCINQ value is 0. Signed-off-by: Xuewei Niu --- tools/testing/vsock/vsock_test.c | 80 ++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_t= est.c index f669baaa0dca..1f525a7e0098 100644 --- a/tools/testing/vsock/vsock_test.c +++ b/tools/testing/vsock/vsock_test.c @@ -1305,6 +1305,56 @@ static void test_unsent_bytes_client(const struct te= st_opts *opts, int type) close(fd); } =20 +static void test_unread_bytes_server(const struct test_opts *opts, int typ= e) +{ + unsigned char buf[MSG_BUF_IOCTL_LEN]; + int client_fd; + + client_fd =3D vsock_accept(VMADDR_CID_ANY, opts->peer_port, NULL, type); + if (client_fd < 0) { + perror("accept"); + exit(EXIT_FAILURE); + } + + for (int i =3D 0; i < sizeof(buf); i++) + buf[i] =3D rand() & 0xFF; + + send_buf(client_fd, buf, sizeof(buf), 0, sizeof(buf)); + control_writeln("SENT"); + + close(client_fd); +} + +static void test_unread_bytes_client(const struct test_opts *opts, int typ= e) +{ + unsigned char buf[MSG_BUF_IOCTL_LEN]; + int fd; + int sock_bytes_unread; + + fd =3D vsock_connect(opts->peer_cid, opts->peer_port, type); + if (fd < 0) { + perror("connect"); + exit(EXIT_FAILURE); + } + + control_expectln("SENT"); + /* The data has arrived but has not been read. The expected is + * MSG_BUF_IOCTL_LEN. + */ + if (!vsock_ioctl_int(fd, TIOCINQ, &sock_bytes_unread, + MSG_BUF_IOCTL_LEN)) { + fprintf(stderr, "Test skipped, TIOCINQ not supported.\n"); + goto out; + } + + recv_buf(fd, buf, sizeof(buf), 0, sizeof(buf)); + /* All data has been consumed, so the expected is 0. */ + vsock_ioctl_int(fd, TIOCINQ, &sock_bytes_unread, 0); + +out: + close(fd); +} + static void test_stream_unsent_bytes_client(const struct test_opts *opts) { test_unsent_bytes_client(opts, SOCK_STREAM); @@ -1325,6 +1375,26 @@ static void test_seqpacket_unsent_bytes_server(const= struct test_opts *opts) test_unsent_bytes_server(opts, SOCK_SEQPACKET); } =20 +static void test_stream_unread_bytes_client(const struct test_opts *opts) +{ + test_unread_bytes_client(opts, SOCK_STREAM); +} + +static void test_stream_unread_bytes_server(const struct test_opts *opts) +{ + test_unread_bytes_server(opts, SOCK_STREAM); +} + +static void test_seqpacket_unread_bytes_client(const struct test_opts *opt= s) +{ + test_unread_bytes_client(opts, SOCK_SEQPACKET); +} + +static void test_seqpacket_unread_bytes_server(const struct test_opts *opt= s) +{ + test_unread_bytes_server(opts, SOCK_SEQPACKET); +} + #define RCVLOWAT_CREDIT_UPD_BUF_SIZE (1024 * 128) /* This define is the same as in 'include/linux/virtio_vsock.h': * it is used to decide when to send credit update message during @@ -2051,6 +2121,16 @@ static struct test_case test_cases[] =3D { .run_client =3D test_stream_nolinger_client, .run_server =3D test_stream_nolinger_server, }, + { + .name =3D "SOCK_STREAM ioctl(SIOCINQ) functionality", + .run_client =3D test_stream_unread_bytes_client, + .run_server =3D test_stream_unread_bytes_server, + }, + { + .name =3D "SOCK_SEQPACKET ioctl(SIOCINQ) functionality", + .run_client =3D test_seqpacket_unread_bytes_client, + .run_server =3D test_seqpacket_unread_bytes_server, + }, {}, }; =20 --=20 2.34.1