Received: by 2002:a05:7412:b130:b0:e2:908c:2ebd with SMTP id az48csp1845873rdb; Sun, 19 Nov 2023 12:57:59 -0800 (PST) X-Google-Smtp-Source: AGHT+IH6VoAe4Z76s0f0MVKgVNPGXWn0KTmBNSypwDst6uKo9F8apNL+bwTy627qqvtU2Bs4GoLV X-Received: by 2002:a05:6808:140e:b0:3b6:d844:144 with SMTP id w14-20020a056808140e00b003b6d8440144mr7476827oiv.28.1700427478843; Sun, 19 Nov 2023 12:57:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700427478; cv=none; d=google.com; s=arc-20160816; b=cipEChh7+/His25H7qePV9oMbg17lGQT929oZgjFyZ5lODmrqGyHkycMXUuprJanCL BnXMs9lwXgc2jBbx6DZAfV+k+nUYoRxJevtpG85W6zdYU9MECfoatBx6IHbcSQqSgoCE D1zG4DFzaYzi3sdgMmmE07jOyeT7mtjMuT1TTiTdChqm8paYgMjKl/JnmA6VswZt6EGh HXi7nPeN61wUqFGpmITTDc1W9/G46lrWgv3o0VR4DiFDovn9YWTSfblVLpHmaCLii0c1 xFQXqIlxzN4+uHTCPJFYMOaqG936e0+oFrbUJ1zIzgbExrQhRDXWQCDggzpx/sNHozlM 3v3A== 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=f3XkhHvZLw/2CD7IbNgZejqY3mMFhJAM3QeRUGk4nxs=; fh=wIHqZpOIuzcidDZ82yQbOZuyHJty7uvaWDEh/efoVzA=; b=koLFzS6kW9nnGPlwMN2pg7Vkm/dbSz35mzG3tEy/a3wV9QwcirJdyQkIsLbuwZvPnT hmsULMPIaZUP9AimHlj86wdV/nmxcHy7JcNHDXa0oWVriYQQE/ap0QijP0rfL3RiH4+C jDyj/hq2uLRKg6+KlvZf60kIbCiuD8+R9xo0s9LWgb1KwTG/4/NiEerS4tfZDghw2++U VTEuNmO3u/rrsMfaMJnyl8KqbTJCfjF0KGqyh0ErgLABSoMHrwg42xBPv7ISLtjH0+UI Grl2TOlxUqoMhSK1xkxTct98d7uU862xV34bfr9shQYVg3v6K9gpw9sBV4Xvh6MEVrow pP4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@salutedevices.com header.s=mail header.b="ID8/TSPn"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 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 fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id b7-20020a056a000a8700b0069026fd5a48si6866408pfl.34.2023.11.19.12.57.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Nov 2023 12:57:58 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=pass header.i=@salutedevices.com header.s=mail header.b="ID8/TSPn"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 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 fry.vger.email (Postfix) with ESMTP id 08E64809379A; Sun, 19 Nov 2023 12:57:49 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231493AbjKSU51 (ORCPT + 99 others); Sun, 19 Nov 2023 15:57:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56558 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229555AbjKSU50 (ORCPT ); Sun, 19 Nov 2023 15:57:26 -0500 Received: from mx1.sberdevices.ru (mx1.sberdevices.ru [37.18.73.165]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 047C6103; Sun, 19 Nov 2023 12:57:20 -0800 (PST) Received: from p-infra-ksmg-sc-msk01 (localhost [127.0.0.1]) by mx1.sberdevices.ru (Postfix) with ESMTP id D86FA10000B; Sun, 19 Nov 2023 23:57:18 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.sberdevices.ru D86FA10000B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=salutedevices.com; s=mail; t=1700427438; bh=f3XkhHvZLw/2CD7IbNgZejqY3mMFhJAM3QeRUGk4nxs=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:From; b=ID8/TSPnF8q1gZGlKogNWQaFRpMbEuBSFo2op2pTm/trj2PClNBmF/yXL20TySYen +9WzKTerDD5B5hq7wNfSoRbyJ9bA9BmYkl5PYNu4HWQGXpPS2iYAsV+8TN+6F8ZBwm HOc+VL7DVwHJ1cJQEVQD7uUAQCIRbepKVrLix6/quaFMS+amLiw7Nm69hGrEuJrDFh +7NC7r/Rp5V4hEZBsB/BUyRcJ081orhIY8U6WksiiJNSJ/gVUT6NPn59KGxltm8k1f IV8T9p5DbaUNiOnEOIRDmkauHMaBDFAG1MYi4MhtE1fpxzqUmPOa11/ToMv0hswLyY crnFRYlCkiGDw== 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; Sun, 19 Nov 2023 23:57:18 +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; Sun, 19 Nov 2023 23:57:18 +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: [RFC PATCH v2 2/3] virtio/vsock: send credit update during setting SO_RCVLOWAT Date: Sun, 19 Nov 2023 23:49:21 +0300 Message-ID: <20231119204922.2251912-3-avkrasnov@salutedevices.com> X-Mailer: git-send-email 2.35.0 In-Reply-To: <20231119204922.2251912-1-avkrasnov@salutedevices.com> References: <20231119204922.2251912-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-m01.sberdevices.ru (172.16.192.107) 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: 181465 [Nov 19 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: 543 543 1e3516af5cdd92079dfeb0e292c8747a62cb1ee4, {Tracking_from_domain_doesnt_match_to}, p-i-exch-sc-m01.sberdevices.ru:7.1.1,5.0.1;127.0.0.199:7.1.2;salutedevices.com:7.1.1;d41d8cd98f00b204e9800998ecf8427e.com:7.1.1;100.64.160.123:7.1.2, 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/19 19:33:00 #22482963 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email 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 (fry.vger.email [0.0.0.0]); Sun, 19 Nov 2023 12:57:49 -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. drivers/vhost/vsock.c | 2 ++ include/linux/virtio_vsock.h | 1 + net/vmw_vsock/virtio_transport.c | 2 ++ net/vmw_vsock/virtio_transport_common.c | 28 +++++++++++++++++++++++++ net/vmw_vsock/vsock_loopback.c | 2 ++ 5 files changed, 35 insertions(+) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index f75731396b7e..ecfa5c11f5ee 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -451,6 +451,8 @@ static struct virtio_transport vhost_transport = { .notify_buffer_size = virtio_transport_notify_buffer_size, .read_skb = virtio_transport_read_skb, + + .set_rcvlowat = virtio_transport_set_rcvlowat }, .send_pkt = vhost_transport_send_pkt, diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h index ebb3ce63d64d..97dc1bebc69c 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_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..cf3431189d0c 100644 --- a/net/vmw_vsock/virtio_transport.c +++ b/net/vmw_vsock/virtio_transport.c @@ -539,6 +539,8 @@ static struct virtio_transport virtio_transport = { .notify_buffer_size = virtio_transport_notify_buffer_size, .read_skb = virtio_transport_read_skb, + + .set_rcvlowat = virtio_transport_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..4acee21b4350 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -1684,6 +1684,34 @@ 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_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_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..388c157f6633 100644 --- a/net/vmw_vsock/vsock_loopback.c +++ b/net/vmw_vsock/vsock_loopback.c @@ -98,6 +98,8 @@ static struct virtio_transport loopback_transport = { .notify_buffer_size = virtio_transport_notify_buffer_size, .read_skb = virtio_transport_read_skb, + + .set_rcvlowat = virtio_transport_set_rcvlowat }, .send_pkt = vsock_loopback_send_pkt, -- 2.25.1