From nobody Tue Feb 10 15:44:59 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1585494707; cv=none; d=zohomail.com; s=zohoarc; b=IBX/zPVDhZTqdZlms2rXC5y6N5Gtp061m9dUzSOKIF4T5zpt+uzMXhtKibILo7ArgELMfqMXc+DUzFNcsDqLO8R75erz4LrcHYqh1lifSaw+fYxTfepFUooYz+39egNvjbarEXefkc0NdRkGcC2wlSilYHi7U7Vy0/Jykd1Q5fw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1585494707; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=O0gbhhNXKqovD8z2owZu41rSHwkPJ8sCWBwXndaIn/A=; b=kbDP+Hjyz4yucMTZjwNpJUaNdaiuTZev3LtylyLr9x6kjFDSk6P9AofLKsYlUEwTwEo6sAKE/n6TqLcCqMDqAmmaBSEybE7OELCL0XsCfUq6kEukWUxN5LrBcLM5BUYVCKWNqLh0fEga1DfpAlS+OpjlEg5+6G146IJTV29MXgs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1585494707586969.0780832434018; Sun, 29 Mar 2020 08:11:47 -0700 (PDT) Received: from localhost ([::1]:38510 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jIZbF-000174-Vn for importer@patchew.org; Sun, 29 Mar 2020 11:11:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38423) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jIZZg-0007hk-Jz for qemu-devel@nongnu.org; Sun, 29 Mar 2020 11:10:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jIZZf-0006ik-HU for qemu-devel@nongnu.org; Sun, 29 Mar 2020 11:10:08 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:39821) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jIZZf-0006iT-Bs for qemu-devel@nongnu.org; Sun, 29 Mar 2020 11:10:07 -0400 Received: by mail-wr1-x444.google.com with SMTP id p10so17868821wrt.6 for ; Sun, 29 Mar 2020 08:10:07 -0700 (PDT) Received: from f2.redhat.com (bzq-79-183-67-107.red.bezeqint.net. [79.183.67.107]) by smtp.gmail.com with ESMTPSA id s2sm5477874wmh.37.2020.03.29.08.10.04 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 29 Mar 2020 08:10:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=O0gbhhNXKqovD8z2owZu41rSHwkPJ8sCWBwXndaIn/A=; b=coKMMCyLiayixMsGIiKDBVR/3Y/gX40JNOYnknkXe4Wct0gSa7OemQwlmC6oSJyCsg UwejKNMISwqLDbGsy8q+4f8+mg7uI/K1RM9uWPWz4WKhGYYyJiNN0TkujIdRapIXI/6r J38bGsgZSPHrd8VwKNMwaMk5nT+gFQ9stRVEGBA3Z0EgC9a7tWomZ5ClqyEA5h6G9V+T QzSBU8wPlJAcaaF3s+BVVyl0pykmz07/udBW9PpTvPEUzcOl7ZM/7if2Ehk85X53niju 2jx6OF1aBs98OIbedABRoy3BTn+XuMgGG+iAnsG4Nc5TfGa/pXZr8iuGbMPTtD+zTPa7 x3Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=O0gbhhNXKqovD8z2owZu41rSHwkPJ8sCWBwXndaIn/A=; b=B2ZCgDtU+DJ3eR+HPk9BhGO9TpJc7JWubJyi44hJk59kkbQ4n4DAqSg5msz3SQyyG2 JOx8ldBfVVm5Q7kOZ4NFTqMZnabCxXJs1qSvyJ6GhUT7verZYfvRj1jPDftvpkIcJ/yF ZARemMD0wfyGzYGCUArmEHC8BNnmx5q9YNRtKuE8Hq1j7E4EZvOxlKEKe1eGJRezoajP rDsEJLvmfFCncN+wFdUcZzl/7yiKyT4ix5ZIqOFgCPxPmGf50LPVMelUbIij3+gNIOdz kd3kkvxDxay0kkNBX0ciOV5LvD5PrZRO5kg+IbhQhJ4Kq1bFwJnxWhO0nlg4Dvcr/R8K 0yCg== X-Gm-Message-State: ANhLgQ0P3dS2U4E/vvoLSAeLfFkgCYiGBDWQPPOiYEY6AtpocydvAIDJ B0VAKDhaJpv3qBvMOXNqqmXA6PuqxpT1Qw== X-Google-Smtp-Source: ADFU+vvModLcf/7y28bcWnXCZC+3CTilc6VaRlEzC7lS9xSiXL5ZIm4h6V2ck65w8/K3EKnXMzaGKA== X-Received: by 2002:adf:82c5:: with SMTP id 63mr10055848wrc.312.1585494606061; Sun, 29 Mar 2020 08:10:06 -0700 (PDT) From: Yuri Benditovich To: qemu-devel@nongnu.org, mst@redhat.com, jasowang@redhat.com Subject: [PATCH v7 1/7] virtio-net: introduce RSS and hash report features Date: Sun, 29 Mar 2020 18:09:47 +0300 Message-Id: <20200329150953.23812-2-yuri.benditovich@daynix.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200329150953.23812-1-yuri.benditovich@daynix.com> References: <20200329150953.23812-1-yuri.benditovich@daynix.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: yan@daynix.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @daynix-com.20150623.gappssmtp.com) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Yuri Benditovich --- hw/net/virtio-net.c | 65 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 3627bb1717..90b01221e9 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -71,6 +71,71 @@ #define VIRTIO_NET_IP6_ADDR_SIZE 32 /* ipv6 saddr + daddr */ #define VIRTIO_NET_MAX_IP6_PAYLOAD VIRTIO_NET_MAX_TCP_PAYLOAD =20 +/* TODO: remove after virtio-net header update */ +#if !defined(VIRTIO_NET_RSS_HASH_TYPE_IPv4) +#define VIRTIO_NET_F_HASH_REPORT 57 /* Supports hash report */ +#define VIRTIO_NET_F_RSS 60 /* Supports RSS RX steering */ + +/* supported/enabled hash types */ +#define VIRTIO_NET_RSS_HASH_TYPE_IPv4 (1 << 0) +#define VIRTIO_NET_RSS_HASH_TYPE_TCPv4 (1 << 1) +#define VIRTIO_NET_RSS_HASH_TYPE_UDPv4 (1 << 2) +#define VIRTIO_NET_RSS_HASH_TYPE_IPv6 (1 << 3) +#define VIRTIO_NET_RSS_HASH_TYPE_TCPv6 (1 << 4) +#define VIRTIO_NET_RSS_HASH_TYPE_UDPv6 (1 << 5) +#define VIRTIO_NET_RSS_HASH_TYPE_IP_EX (1 << 6) +#define VIRTIO_NET_RSS_HASH_TYPE_TCP_EX (1 << 7) +#define VIRTIO_NET_RSS_HASH_TYPE_UDP_EX (1 << 8) + +struct virtio_net_config_with_rss { + struct virtio_net_config cfg; + /* maximum size of RSS key */ + uint8_t rss_max_key_size; + /* maximum number of indirection table entries */ + uint16_t rss_max_indirection_table_length; + /* bitmask of supported VIRTIO_NET_RSS_HASH_ types */ + uint32_t supported_hash_types; +} QEMU_PACKED; + +struct virtio_net_hdr_v1_hash { + struct virtio_net_hdr_v1 hdr; + uint32_t hash_value; +#define VIRTIO_NET_HASH_REPORT_NONE 0 +#define VIRTIO_NET_HASH_REPORT_IPv4 1 +#define VIRTIO_NET_HASH_REPORT_TCPv4 2 +#define VIRTIO_NET_HASH_REPORT_UDPv4 3 +#define VIRTIO_NET_HASH_REPORT_IPv6 4 +#define VIRTIO_NET_HASH_REPORT_TCPv6 5 +#define VIRTIO_NET_HASH_REPORT_UDPv6 6 +#define VIRTIO_NET_HASH_REPORT_IPv6_EX 7 +#define VIRTIO_NET_HASH_REPORT_TCPv6_EX 8 +#define VIRTIO_NET_HASH_REPORT_UDPv6_EX 9 + uint16_t hash_report; + uint16_t padding; +}; + +/* + * The command VIRTIO_NET_CTRL_MQ_RSS_CONFIG has the same effect as + * VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET does and additionally configures + * the receive steering to use a hash calculated for incoming packet + * to decide on receive virtqueue to place the packet. The command + * also provides parameters to calculate a hash and receive virtqueue. + */ +struct virtio_net_rss_config { + uint32_t hash_types; + uint16_t indirection_table_mask; + uint16_t unclassified_queue; + uint16_t indirection_table[1/* + indirection_table_mask */]; + uint16_t max_tx_vq; + uint8_t hash_key_length; + uint8_t hash_key_data[/* hash_key_length */]; +}; + +#define VIRTIO_NET_CTRL_MQ_RSS_CONFIG 1 +#define VIRTIO_NET_CTRL_MQ_HASH_CONFIG 2 + +#endif + /* Purge coalesced packets timer interval, This value affects the performa= nce a lot, and should be tuned carefully, '300000'(300us) is the recommended value to pass the WHQL test, '50000' can gain 2x netperf throughput with --=20 2.17.1