Received: by 2002:a05:7412:b10a:b0:f3:1519:9f41 with SMTP id az10csp298303rdb; Thu, 30 Nov 2023 05:18:20 -0800 (PST) X-Google-Smtp-Source: AGHT+IF7E5V7C7DxFhiE85TWOuvN1aPBuWcdTmfg6Yro24BP6Iwrh9TiRCRsrSg5UeMVGtflLRKN X-Received: by 2002:a17:902:c106:b0:1cf:cd57:5ee7 with SMTP id 6-20020a170902c10600b001cfcd575ee7mr13629661pli.28.1701350299955; Thu, 30 Nov 2023 05:18:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701350299; cv=none; d=google.com; s=arc-20160816; b=gW41rIZqPK49MJrF7Sp4/9cGn24EAzGzUytgY1mA9D1iGJBIMy3LcFdquGhZJ5mSSK xJMjHf4tfsjsW1x4IJrJuKi3THTz2yuwDW+husGdxnxEAAJJLhKQU9/f4J6FiguCI03d QoH9JCyeZsbSBIfF85cBqQY5hMUIGRgRoUhEKYxl6IHFmJQCZNtLCPk/u0Ldz/a3HUy2 bt2VDV1U3Rl+qeMOSmJtDU5vYCeaV+wQ8BKgBQQzYdvKEdiyePrjswvBnO8uSf3G6p8D SbwI4dhd5WdEmJCB+9uJiEjMnI6hfslCRZY/BJ6jA4OUY+mJpWljdV3DNiLuWqT/m/x2 MSKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=UgIP4qW5cHTkOXy0LVTohzQoWlKUccYIzXtdEOiWZuc=; fh=wIHqZpOIuzcidDZ82yQbOZuyHJty7uvaWDEh/efoVzA=; b=RkL7HOsTse1sfHWzNvJZX6NlWlhDMcD06n0jCiEYyNCrBG8eSf5csPuCZiFkzkj1eM zmeSj4fRhODGCaVL1rBuqGq0/WKcQ0BOeleoUlY0uXl4nQS3W2Khb7hAfXy2KjL4380F zQL1ElqjUvWFf20RADEQF75OPzPy/jwsvargDsX8id8SyDJPv8F0REK5+oynod5gCf4s aVYMQIPxM19tYROLsqzfL7pPpxQq3fFBpBPw4GW00tiQ/B1eciYaozmOjYTgq7eoxGz/ SAYN2nFtCjcNS6B+E/xfTmZm4TbfUmONYndpfTOFD6hJlhQ3NIa7DwL00Kg31fnU0QQW plSA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@salutedevices.com header.s=mail header.b=aLJgmUcr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=salutedevices.com Return-Path: Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id i1-20020a170902c28100b001cfc9c926b4si1134725pld.65.2023.11.30.05.18.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Nov 2023 05:18:19 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@salutedevices.com header.s=mail header.b=aLJgmUcr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=salutedevices.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id DF7D48028858; Thu, 30 Nov 2023 05:18:18 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345510AbjK3NSA (ORCPT + 99 others); Thu, 30 Nov 2023 08:18:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37352 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232169AbjK3NRy (ORCPT ); Thu, 30 Nov 2023 08:17:54 -0500 Received: from mx1.sberdevices.ru (mx1.sberdevices.ru [37.18.73.165]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7BFA510DE; Thu, 30 Nov 2023 05:17:58 -0800 (PST) Received: from p-infra-ksmg-sc-msk01 (localhost [127.0.0.1]) by mx1.sberdevices.ru (Postfix) with ESMTP id CC704100007; Thu, 30 Nov 2023 16:17:55 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.sberdevices.ru CC704100007 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=salutedevices.com; s=mail; t=1701350275; bh=UgIP4qW5cHTkOXy0LVTohzQoWlKUccYIzXtdEOiWZuc=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:From; b=aLJgmUcrJQbHptEZvuXuTrPqEVsiE4bMksBBuQ9Q1kjKvtWFcvommZHVZwrm+TKYV DsgTWRDDtQbxutjpxq9tdMMJALPuFZhxZoOkjp5OWDY0vj6G1EDxK0x0/CAM405miH eqppCPm30jwYmIuS4rUK34uFHxf91DG532XCMoGEiONdAb1khCWchEd80XWso6jLkS sHrv4eagW9GzJBmG0SDruZ6phurFZHbZ5Aa6xKkw0fcwrcBXEpRXuP8oWon6C8JUlM P5/M84+cUlVdAdnYhq9BOhqrmiDk75TGp8Z5qxX9HeDtmZQ3UgsGrQ3MvPvQNNjZLi KpUa8DQuHs1qQ== Received: from p-i-exch-sc-m01.sberdevices.ru (p-i-exch-sc-m01.sberdevices.ru [172.16.192.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.sberdevices.ru (Postfix) with ESMTPS; Thu, 30 Nov 2023 16:17:55 +0300 (MSK) Received: from localhost.localdomain (100.64.160.123) by p-i-exch-sc-m01.sberdevices.ru (172.16.192.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Thu, 30 Nov 2023 16:17:55 +0300 From: Arseniy Krasnov To: Stefan Hajnoczi , Stefano Garzarella , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , "Michael S. Tsirkin" , Jason Wang , Bobby Eshleman CC: , , , , , , Subject: [PATCH net-next v5 2/3] virtio/vsock: send credit update during setting SO_RCVLOWAT Date: Thu, 30 Nov 2023 16:08:39 +0300 Message-ID: <20231130130840.253733-3-avkrasnov@salutedevices.com> X-Mailer: git-send-email 2.35.0 In-Reply-To: <20231130130840.253733-1-avkrasnov@salutedevices.com> References: <20231130130840.253733-1-avkrasnov@salutedevices.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [100.64.160.123] X-ClientProxiedBy: p-i-exch-sc-m02.sberdevices.ru (172.16.192.103) To p-i-exch-sc-m01.sberdevices.ru (172.16.192.107) X-KSMG-Rule-ID: 10 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Lua-Profiles: 181736 [Nov 30 2023] X-KSMG-AntiSpam-Version: 6.0.0.2 X-KSMG-AntiSpam-Envelope-From: avkrasnov@salutedevices.com X-KSMG-AntiSpam-Rate: 0 X-KSMG-AntiSpam-Status: not_detected X-KSMG-AntiSpam-Method: none X-KSMG-AntiSpam-Auth: dkim=none X-KSMG-AntiSpam-Info: LuaCore: 5 0.3.5 98d108ddd984cca1d7e65e595eac546a62b0144b, {Tracking_from_domain_doesnt_match_to}, 127.0.0.199:7.1.2;100.64.160.123:7.1.2;d41d8cd98f00b204e9800998ecf8427e.com:7.1.1;p-i-exch-sc-m01.sberdevices.ru:5.0.1,7.1.1;salutedevices.com:7.1.1, FromAlignment: s, ApMailHostAddress: 100.64.160.123 X-MS-Exchange-Organization-SCL: -1 X-KSMG-AntiSpam-Interceptor-Info: scan successful X-KSMG-AntiPhishing: Clean X-KSMG-LinksScanning: Clean X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.0.1.6960, bases: 2023/11/30 11:05:00 #22583687 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Thu, 30 Nov 2023 05:18:19 -0800 (PST) Send credit update message when SO_RCVLOWAT is updated and it is bigger than number of bytes in rx queue. It is needed, because 'poll()' will wait until number of bytes in rx queue will be not smaller than SO_RCVLOWAT, so kick sender to send more data. Otherwise mutual hungup for tx/rx is possible: sender waits for free space and receiver is waiting data in 'poll()'. Signed-off-by: Arseniy Krasnov --- Changelog: v1 -> v2: * Update commit message by removing 'This patch adds XXX' manner. * Do not initialize 'send_update' variable - set it directly during first usage. v3 -> v4: * Fit comment in 'virtio_transport_notify_set_rcvlowat()' to 80 chars. v4 -> v5: * Do not change callbacks order in transport structures. drivers/vhost/vsock.c | 1 + include/linux/virtio_vsock.h | 1 + net/vmw_vsock/virtio_transport.c | 1 + net/vmw_vsock/virtio_transport_common.c | 27 +++++++++++++++++++++++++ net/vmw_vsock/vsock_loopback.c | 1 + 5 files changed, 31 insertions(+) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index f75731396b7e..4146f80db8ac 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -451,6 +451,7 @@ static struct virtio_transport vhost_transport = { .notify_buffer_size = virtio_transport_notify_buffer_size, .read_skb = virtio_transport_read_skb, + .notify_set_rcvlowat = virtio_transport_notify_set_rcvlowat }, .send_pkt = vhost_transport_send_pkt, diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h index ebb3ce63d64d..c82089dee0c8 100644 --- a/include/linux/virtio_vsock.h +++ b/include/linux/virtio_vsock.h @@ -256,4 +256,5 @@ void virtio_transport_put_credit(struct virtio_vsock_sock *vvs, u32 credit); void virtio_transport_deliver_tap_pkt(struct sk_buff *skb); int virtio_transport_purge_skbs(void *vsk, struct sk_buff_head *list); int virtio_transport_read_skb(struct vsock_sock *vsk, skb_read_actor_t read_actor); +int virtio_transport_notify_set_rcvlowat(struct vsock_sock *vsk, int val); #endif /* _LINUX_VIRTIO_VSOCK_H */ diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c index af5bab1acee1..8007593a3a93 100644 --- a/net/vmw_vsock/virtio_transport.c +++ b/net/vmw_vsock/virtio_transport.c @@ -539,6 +539,7 @@ static struct virtio_transport virtio_transport = { .notify_buffer_size = virtio_transport_notify_buffer_size, .read_skb = virtio_transport_read_skb, + .notify_set_rcvlowat = virtio_transport_notify_set_rcvlowat }, .send_pkt = virtio_transport_send_pkt, diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c index f6dc896bf44c..1cb556ad4597 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -1684,6 +1684,33 @@ int virtio_transport_read_skb(struct vsock_sock *vsk, skb_read_actor_t recv_acto } EXPORT_SYMBOL_GPL(virtio_transport_read_skb); +int virtio_transport_notify_set_rcvlowat(struct vsock_sock *vsk, int val) +{ + struct virtio_vsock_sock *vvs = vsk->trans; + bool send_update; + + spin_lock_bh(&vvs->rx_lock); + + /* If number of available bytes is less than new SO_RCVLOWAT value, + * kick sender to send more data, because sender may sleep in its + * 'send()' syscall waiting for enough space at our side. + */ + send_update = vvs->rx_bytes < val; + + spin_unlock_bh(&vvs->rx_lock); + + if (send_update) { + int err; + + err = virtio_transport_send_credit_update(vsk); + if (err < 0) + return err; + } + + return 0; +} +EXPORT_SYMBOL_GPL(virtio_transport_notify_set_rcvlowat); + MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Asias He"); MODULE_DESCRIPTION("common code for virtio vsock"); diff --git a/net/vmw_vsock/vsock_loopback.c b/net/vmw_vsock/vsock_loopback.c index 048640167411..9f4b814fbbc7 100644 --- a/net/vmw_vsock/vsock_loopback.c +++ b/net/vmw_vsock/vsock_loopback.c @@ -98,6 +98,7 @@ static struct virtio_transport loopback_transport = { .notify_buffer_size = virtio_transport_notify_buffer_size, .read_skb = virtio_transport_read_skb, + .notify_set_rcvlowat = virtio_transport_notify_set_rcvlowat }, .send_pkt = vsock_loopback_send_pkt, -- 2.25.1