From patchwork Fri Jan 26 17:33:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joshua Washington X-Patchwork-Id: 136182 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8E11B439D4; Fri, 26 Jan 2024 18:33:33 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1D63640647; Fri, 26 Jan 2024 18:33:33 +0100 (CET) Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) by mails.dpdk.org (Postfix) with ESMTP id 17D014021D for ; Fri, 26 Jan 2024 18:33:31 +0100 (CET) Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-6ddc2a78869so603961b3a.3 for ; Fri, 26 Jan 2024 09:33:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706290410; x=1706895210; darn=dpdk.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=1k5laEoRzxWBqrRDyEFl5ZSMdsBt3lRyZ9CSh7xNtCU=; b=AhYVp+33uGxFeXai/oNowmv5Jr3x8Dp6uonJZ/8fbX7OhGKaGnDEZdRBlERHPthAjG YI5AgqpOIwa60GE3u9hiRIWD3RVjqhDc/lZWykS51Ptef7xb6pgfrKNJ2zbK4PnD/7H6 AngcMGGpbQxcd5gP2Y/N7bVh+O7g5NeLTGNP5a4dDhzDAKS2o+eIFf4yGBjT+kcmstHF ojYDhGr4lmhtBsZDKE2HkeJ/A1+8ZvnDHNu4HW069PBoY050HfAznClY/xD+Ril7DqHh jnOdKEsQGDdcofT6Ji/NCfK/Gjy8I9EteQfOE6LwRBAeRh7W0S9mhUcRp0L9P8f1axbi Xpbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706290410; x=1706895210; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=1k5laEoRzxWBqrRDyEFl5ZSMdsBt3lRyZ9CSh7xNtCU=; b=tiG5S/+ueL7GywM7iYpstWxYkihh4TZr3PctBtMWkeo34GisaVOJcaglH0O0Mu6nAv 9vbTdKDRJFIAyMw3VeCCyUd/7APtSNKz1UGF9QhRLFL82ix82/1GUKZRcyostCYUPFuC 9VYqvazWYiRj4zjSEI7XSXtMaBNLm9Cao4CJD1LJoy+HVAa9mA6ufFd8rY0mZbgJLX50 JQyJI0YF2hH2BgIDgUUb3HIo8wk3M8pFcMHquwkpzBa6zezy3eTlJhPiS8hK3eLdGpyE wjRPbedle+PLF7dYY3nOgLru/gi/YXhWE85LqPZbXlBe2uhoXTQaiY5tnI6Il7KqOUmX gUag== X-Gm-Message-State: AOJu0Yy2jCI4pKJUH0JKRkvTqPQ3GAtUnVySepmaPBWRfO8vqbBBhkPd wZVT8htJfnQ/wpcfSJ+fTxJ7odOER8dvceVfq+qEnGhIyXrBHM2NDUyWfqN3sBWCnXdhaBnKE7F mOSGkHcET3w== X-Google-Smtp-Source: AGHT+IE1ggHeh5had5OyJKfbHAN25Pyqq78tROzfNQludPxOwLsZB/+UxWZp32PT1nmD87wLtarbr2X4glJMOQ== X-Received: from joshwash.sea.corp.google.com ([2620:15c:11c:202:32b0:8478:d496:bc49]) (user=joshwash job=sendgmr) by 2002:a05:6a00:938d:b0:6de:cce:7c51 with SMTP id ka13-20020a056a00938d00b006de0cce7c51mr11031pfb.5.1706290410288; Fri, 26 Jan 2024 09:33:30 -0800 (PST) Date: Fri, 26 Jan 2024 09:33:10 -0800 In-Reply-To: <20240126173317.2779230-1-joshwash@google.com> Mime-Version: 1.0 References: <20240124001501.446195-1-joshwash@google.com> <20240126173317.2779230-1-joshwash@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Message-ID: <20240126173317.2779230-2-joshwash@google.com> Subject: [PATCH v4 1/7] net/gve: fully expose RSS offload support in dev_info From: Joshua Washington To: Junfeng Guo , Jeroen de Borst , Rushil Gupta , Joshua Washington Cc: dev@dpdk.org, Ferruh Yigit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This patch communicates that the GVE driver supports RSS, along with the RSS offloads supported by the driver. Signed-off-by: Joshua Washington Reviewed-by: Rushil Gupta Reviewed-by: Jeroen de Borst --- drivers/net/gve/gve_ethdev.c | 4 +++- drivers/net/gve/gve_ethdev.h | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/net/gve/gve_ethdev.c b/drivers/net/gve/gve_ethdev.c index d162fd3864..6acdb4e13b 100644 --- a/drivers/net/gve/gve_ethdev.c +++ b/drivers/net/gve/gve_ethdev.c @@ -405,7 +405,7 @@ gve_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->max_mtu = priv->max_mtu; dev_info->min_mtu = RTE_ETHER_MIN_MTU; - dev_info->rx_offload_capa = 0; + dev_info->rx_offload_capa = RTE_ETH_RX_OFFLOAD_RSS_HASH; dev_info->tx_offload_capa = RTE_ETH_TX_OFFLOAD_MULTI_SEGS | RTE_ETH_TX_OFFLOAD_UDP_CKSUM | @@ -442,6 +442,8 @@ gve_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) .nb_align = 1, }; + dev_info->flow_type_rss_offloads = GVE_RSS_OFFLOAD_ALL; + return 0; } diff --git a/drivers/net/gve/gve_ethdev.h b/drivers/net/gve/gve_ethdev.h index 9893fcfee6..14c72ec91a 100644 --- a/drivers/net/gve/gve_ethdev.h +++ b/drivers/net/gve/gve_ethdev.h @@ -33,6 +33,14 @@ RTE_MBUF_F_TX_L4_MASK | \ RTE_MBUF_F_TX_TCP_SEG) +#define GVE_RSS_OFFLOAD_ALL ( \ + RTE_ETH_RSS_IPV4 | \ + RTE_ETH_RSS_NONFRAG_IPV4_TCP | \ + RTE_ETH_RSS_IPV6 | \ + RTE_ETH_RSS_IPV6_EX | \ + RTE_ETH_RSS_NONFRAG_IPV6_TCP | \ + RTE_ETH_RSS_IPV6_TCP_EX) + /* A list of pages registered with the device during setup and used by a queue * as buffers */ From patchwork Fri Jan 26 17:33:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joshua Washington X-Patchwork-Id: 136183 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AB6C8439D4; Fri, 26 Jan 2024 18:33:38 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1742E42E39; Fri, 26 Jan 2024 18:33:34 +0100 (CET) Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) by mails.dpdk.org (Postfix) with ESMTP id E6BDE4021D for ; Fri, 26 Jan 2024 18:33:32 +0100 (CET) Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-1d409124358so4050775ad.1 for ; Fri, 26 Jan 2024 09:33:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706290412; x=1706895212; darn=dpdk.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=POJhyYL2qt1wwSc/EhBL2uej9Q0Jjst7QY9PmaHru30=; b=4CSlihVa+GmpOUkj74L2gFqCgDKwtRLMVvDtBrEZey44jt07KX+mpAIzmuDDEL6b9L DGE1MsdsnMJI9ucbjBBln8jy7XYXa+Uz6o13JCWWs/RUAPnvTYS4tEAB8rLNqvqHm6wJ Ex83iJ0cM0FXKMGF2/wX3C5y596qYeLefuaLTg2VuP7Fy6eb6FM0SXWgtb8YBBsOtD+I jNz1wppFxTv1ym0F05yW1m2dgcvfAFeoGs8YdHJ30eoWIrG8KkmLaoRD5RoD1nEJhlHl EkdsTkqRPyr5WiLt+slORT/GYYdXej0HITCrA2FyaChuFqfE2qxMBQV/y1kRrdP8NYmF cdMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706290412; x=1706895212; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=POJhyYL2qt1wwSc/EhBL2uej9Q0Jjst7QY9PmaHru30=; b=RXxlzYitoaUPQ1D2Atr7SVS/a5Hwki/dRh2y5Y21wfFWTR6ePttAmr4wi59vUsea7/ o/2GgdTcWWZhWiseuKLQP4RoYeg7Kr8f/zvtMgQS+/HSLtu/JrEE8PIKXLxVsT9Zu9cS Zt4oHLRt0HM67FPAupOSjnxTFcQt44XQfTQUngwaRDpvRvMptZpraaVDd+TENUoqdbVP SX61eP8aWmIs3ODFIu/kmAxtPlFq/N4gp6kzjYYCovJo0Z7Ay3EvUGgDjVofbG8+9TET EXClwV8YJ9dXUYEdTsNoBLBNZhH/7HOWnkTSfG0mG5Oze3rIuNy0gU+MLwlusWO0BrQy qChg== X-Gm-Message-State: AOJu0Yx1ycuy/NyR5H3oQ98tyfAjxuHVzj9d09QD7IhTb4bNeey3Wc9X 3fWaG7SW3uyVMeY+dk3BXFITNyZD4UVUxtgRUDrnREkJkr493Em9EEIpxBvf5co5Rro8thY8qRG jGkNRZyeUIw== X-Google-Smtp-Source: AGHT+IGLRRtHvZdkBNXXZA1+codxI+6q9Ef5eAbop38fd1tyOBJ+vpaY+PxnFdV3sfWZWAwZctLG+fuJqynVTw== X-Received: from joshwash.sea.corp.google.com ([2620:15c:11c:202:32b0:8478:d496:bc49]) (user=joshwash job=sendgmr) by 2002:a17:903:2b88:b0:1d7:91ad:c28f with SMTP id mj8-20020a1709032b8800b001d791adc28fmr339plb.7.1706290412055; Fri, 26 Jan 2024 09:33:32 -0800 (PST) Date: Fri, 26 Jan 2024 09:33:11 -0800 In-Reply-To: <20240126173317.2779230-1-joshwash@google.com> Mime-Version: 1.0 References: <20240124001501.446195-1-joshwash@google.com> <20240126173317.2779230-1-joshwash@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Message-ID: <20240126173317.2779230-3-joshwash@google.com> Subject: [PATCH v4 2/7] net/gve: RSS adminq command changes From: Joshua Washington To: Junfeng Guo , Jeroen de Borst , Rushil Gupta , Joshua Washington Cc: dev@dpdk.org, Ferruh Yigit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This change introduces admin queue changes that enable the configuration of RSS parameters for the GVE driver. Signed-off-by: Joshua Washington Reviewed-by: Rushil Gupta Reviewed-by: Jeroen de Borst --- drivers/net/gve/base/gve.h | 15 ++++++++ drivers/net/gve/base/gve_adminq.c | 58 +++++++++++++++++++++++++++++++ drivers/net/gve/base/gve_adminq.h | 29 ++++++++++++++++ drivers/net/gve/gve_ethdev.h | 6 +++- 4 files changed, 107 insertions(+), 1 deletion(-) diff --git a/drivers/net/gve/base/gve.h b/drivers/net/gve/base/gve.h index f7b297e759..9c58fc4238 100644 --- a/drivers/net/gve/base/gve.h +++ b/drivers/net/gve/base/gve.h @@ -51,4 +51,19 @@ enum gve_state_flags_bit { GVE_PRIV_FLAGS_NAPI_ENABLED = 4, }; +enum gve_rss_hash_algorithm { + GVE_RSS_HASH_UNDEFINED = 0, + GVE_RSS_HASH_TOEPLITZ = 1, +}; + +struct gve_rss_config { + uint16_t hash_types; + enum gve_rss_hash_algorithm alg; + uint16_t key_size; + uint16_t indir_size; + uint8_t *key; + uint32_t *indir; +}; + + #endif /* _GVE_H_ */ diff --git a/drivers/net/gve/base/gve_adminq.c b/drivers/net/gve/base/gve_adminq.c index 343bd13d67..629d15cfbe 100644 --- a/drivers/net/gve/base/gve_adminq.c +++ b/drivers/net/gve/base/gve_adminq.c @@ -389,6 +389,9 @@ static int gve_adminq_issue_cmd(struct gve_priv *priv, case GVE_ADMINQ_DECONFIGURE_DEVICE_RESOURCES: priv->adminq_dcfg_device_resources_cnt++; break; + case GVE_ADMINQ_CONFIGURE_RSS: + priv->adminq_cfg_rss_cnt++; + break; case GVE_ADMINQ_SET_DRIVER_PARAMETER: priv->adminq_set_driver_parameter_cnt++; break; @@ -938,3 +941,58 @@ int gve_adminq_get_ptype_map_dqo(struct gve_priv *priv, gve_free_dma_mem(&ptype_map_dma_mem); return err; } + +int gve_adminq_configure_rss(struct gve_priv *priv, + struct gve_rss_config *rss_config) +{ + struct gve_dma_mem indirection_table_dma_mem; + struct gve_dma_mem rss_key_dma_mem; + union gve_adminq_command cmd; + __be32 *indir = NULL; + u8 *key = NULL; + int err = 0; + int i; + + if (!rss_config->indir_size || !rss_config->key_size) + return -EINVAL; + + indir = gve_alloc_dma_mem(&indirection_table_dma_mem, + rss_config->indir_size * + sizeof(*rss_config->indir)); + if (!indir) { + err = -ENOMEM; + goto out; + } + for (i = 0; i < rss_config->indir_size; i++) + indir[i] = cpu_to_be32(rss_config->indir[i]); + + key = gve_alloc_dma_mem(&rss_key_dma_mem, + rss_config->key_size * + sizeof(*rss_config->key)); + if (!key) { + err = -ENOMEM; + goto out; + } + memcpy(key, rss_config->key, rss_config->key_size); + + memset(&cmd, 0, sizeof(cmd)); + cmd.opcode = cpu_to_be32(GVE_ADMINQ_CONFIGURE_RSS); + cmd.configure_rss = (struct gve_adminq_configure_rss) { + .hash_types = cpu_to_be16(rss_config->hash_types), + .halg = rss_config->alg, + .hkey_len = cpu_to_be16(rss_config->key_size), + .indir_len = cpu_to_be16(rss_config->indir_size), + .hkey_addr = cpu_to_be64(rss_key_dma_mem.pa), + .indir_addr = cpu_to_be64(indirection_table_dma_mem.pa), + }; + + err = gve_adminq_execute_cmd(priv, &cmd); + +out: + if (indir) + gve_free_dma_mem(&indirection_table_dma_mem); + if (key) + gve_free_dma_mem(&rss_key_dma_mem); + return err; +} + diff --git a/drivers/net/gve/base/gve_adminq.h b/drivers/net/gve/base/gve_adminq.h index f05362f85f..95f4960561 100644 --- a/drivers/net/gve/base/gve_adminq.h +++ b/drivers/net/gve/base/gve_adminq.h @@ -19,6 +19,7 @@ enum gve_adminq_opcodes { GVE_ADMINQ_DESTROY_TX_QUEUE = 0x7, GVE_ADMINQ_DESTROY_RX_QUEUE = 0x8, GVE_ADMINQ_DECONFIGURE_DEVICE_RESOURCES = 0x9, + GVE_ADMINQ_CONFIGURE_RSS = 0xA, GVE_ADMINQ_SET_DRIVER_PARAMETER = 0xB, GVE_ADMINQ_REPORT_STATS = 0xC, GVE_ADMINQ_REPORT_LINK_SPEED = 0xD, @@ -377,6 +378,27 @@ struct gve_adminq_get_ptype_map { __be64 ptype_map_addr; }; +#define GVE_RSS_HASH_IPV4 BIT(0) +#define GVE_RSS_HASH_TCPV4 BIT(1) +#define GVE_RSS_HASH_IPV6 BIT(2) +#define GVE_RSS_HASH_IPV6_EX BIT(3) +#define GVE_RSS_HASH_TCPV6 BIT(4) +#define GVE_RSS_HASH_TCPV6_EX BIT(5) +#define GVE_RSS_HASH_UDPV4 BIT(6) +#define GVE_RSS_HASH_UDPV6 BIT(7) +#define GVE_RSS_HASH_UDPV6_EX BIT(8) + +/* RSS configuration command */ +struct gve_adminq_configure_rss { + __be16 hash_types; + u8 halg; /* hash algorithm */ + u8 reserved; + __be16 hkey_len; + __be16 indir_len; + __be64 hkey_addr; + __be64 indir_addr; +}; + union gve_adminq_command { struct { __be32 opcode; @@ -391,6 +413,7 @@ union gve_adminq_command { struct gve_adminq_describe_device describe_device; struct gve_adminq_register_page_list reg_page_list; struct gve_adminq_unregister_page_list unreg_page_list; + struct gve_adminq_configure_rss configure_rss; struct gve_adminq_set_driver_parameter set_driver_param; struct gve_adminq_report_stats report_stats; struct gve_adminq_report_link_speed report_link_speed; @@ -404,6 +427,8 @@ union gve_adminq_command { GVE_CHECK_UNION_LEN(64, gve_adminq_command); +struct gve_priv; +struct gve_queue_page_list; int gve_adminq_alloc(struct gve_priv *priv); void gve_adminq_free(struct gve_priv *priv); void gve_adminq_release(struct gve_priv *priv); @@ -433,4 +458,8 @@ int gve_adminq_get_ptype_map_dqo(struct gve_priv *priv, int gve_adminq_verify_driver_compatibility(struct gve_priv *priv, u64 driver_info_len, dma_addr_t driver_info_addr); + +int gve_adminq_configure_rss(struct gve_priv *priv, + struct gve_rss_config *rss_config); + #endif /* _GVE_ADMINQ_H */ diff --git a/drivers/net/gve/gve_ethdev.h b/drivers/net/gve/gve_ethdev.h index 14c72ec91a..f7635e829c 100644 --- a/drivers/net/gve/gve_ethdev.h +++ b/drivers/net/gve/gve_ethdev.h @@ -39,7 +39,10 @@ RTE_ETH_RSS_IPV6 | \ RTE_ETH_RSS_IPV6_EX | \ RTE_ETH_RSS_NONFRAG_IPV6_TCP | \ - RTE_ETH_RSS_IPV6_TCP_EX) + RTE_ETH_RSS_IPV6_TCP_EX | \ + RTE_ETH_RSS_NONFRAG_IPV4_UDP | \ + RTE_ETH_RSS_NONFRAG_IPV6_UDP | \ + RTE_ETH_RSS_IPV6_UDP_EX) /* A list of pages registered with the device during setup and used by a queue * as buffers @@ -264,6 +267,7 @@ struct gve_priv { uint32_t adminq_destroy_tx_queue_cnt; uint32_t adminq_destroy_rx_queue_cnt; uint32_t adminq_dcfg_device_resources_cnt; + uint32_t adminq_cfg_rss_cnt; uint32_t adminq_set_driver_parameter_cnt; uint32_t adminq_report_stats_cnt; uint32_t adminq_report_link_speed_cnt; From patchwork Fri Jan 26 17:33:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joshua Washington X-Patchwork-Id: 136184 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2CF30439D4; Fri, 26 Jan 2024 18:33:47 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7C64142E48; Fri, 26 Jan 2024 18:33:35 +0100 (CET) Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) by mails.dpdk.org (Postfix) with ESMTP id 8605242E3B for ; Fri, 26 Jan 2024 18:33:34 +0100 (CET) Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-6de070a4c4eso509334b3a.2 for ; Fri, 26 Jan 2024 09:33:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706290414; x=1706895214; darn=dpdk.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=lE83ibws4iol+07GnUwZfVFlpT4qXWCdez5K1s/6jhI=; b=vDXMsPVyz+GPv+vbb6WSgapM7M4lLWWd0loYmDVoOGtKUnLHTHlmobv1kgq1lachT9 hz+VolNXC7ORMPmWogytO5Bme4ulK29ByN2XNRaOk4Albvlw3/Mulo9qwgK/QrouUuNE 9buWE7BRpN0jD5Gl1BkL8YEWJL0TfCPj1HOBiWCf668C4PIXspAP2FEfEIrzai2/JtSI 0ICfq/WHWem7mtQynUIem+L5raYffYV1jbUtXB3Z1O5GHG2lRMD3fzsm3EEgt42uRfMp SaK5VOIJEKrxjQ80MsiKsc5FkitfH5voDk8OBVfqVnyT5UWXT2uItdo+3RoIQm/Hw6He tJlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706290414; x=1706895214; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=lE83ibws4iol+07GnUwZfVFlpT4qXWCdez5K1s/6jhI=; b=N1F4Y3ruAXwTDUW0B6uApYhazIysnMJnnWvYISWahWJZa6QJNT3xNCO8SvDfTS4VZ2 cNMtoP7DQzijkCsTjkeDs7jlP5IpSN+fjLVEMiOT6k21g9q2yfdAEcZYisHBkCMlHzXJ JY7tjj9lOE9BOA6tXt9SBD8HuJfS412IT0n8HLHrgz8TFSWcnlB4Er+Oxu6OT2GTv1Vl Xn92Ay9R4OVhFQgynNcg5JIyU84IEHz/B7FmlW3RIcbVWvJSuBnrjHH+YXPqSVxgMmvX TtxmJgcNWp00sivDZtbgLXKD9IDdiSEphhFRE4OxDvW9oUGyytH3iRSKj2+45y8NzNYp yD2A== X-Gm-Message-State: AOJu0Yw8YrqkvaKRTXHCvGBRFq3vkdqp530pekD7CETqseMLCoAmE75A PqpsosU33hj/lh0dAqtoIkCsXLbnELl9beZrJhNW+MJaXwsIaHfQET7nD7DK34zc6r2uC3FuTQR ElgzqNR42cQ== X-Google-Smtp-Source: AGHT+IEdUXM4OgbehV65qbUWU0aPKcQ/w0pY68CMdFz9augdTSWfGpyH0AYe2/avpiXyn1LLI5BQOVCRrywvOA== X-Received: from joshwash.sea.corp.google.com ([2620:15c:11c:202:32b0:8478:d496:bc49]) (user=joshwash job=sendgmr) by 2002:a05:6a00:3015:b0:6de:5f3:5b98 with SMTP id ay21-20020a056a00301500b006de05f35b98mr9929pfb.4.1706290413746; Fri, 26 Jan 2024 09:33:33 -0800 (PST) Date: Fri, 26 Jan 2024 09:33:12 -0800 In-Reply-To: <20240126173317.2779230-1-joshwash@google.com> Mime-Version: 1.0 References: <20240124001501.446195-1-joshwash@google.com> <20240126173317.2779230-1-joshwash@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Message-ID: <20240126173317.2779230-4-joshwash@google.com> Subject: [PATCH v4 3/7] net/gve: add gve_rss library for handling RSS-related behaviors From: Joshua Washington To: Junfeng Guo , Jeroen de Borst , Rushil Gupta , Joshua Washington Cc: dev@dpdk.org, Ferruh Yigit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This change includes a number of helper functions to facilitate RSS configuration on the GVE DPDK driver. These methods are declared in gve_rss.h. Signed-off-by: Joshua Washington Reviewed-by: Rushil Gupta Reviewed-by: Jeroen de Borst --- drivers/net/gve/base/gve_adminq.h | 10 +- drivers/net/gve/gve_ethdev.c | 2 +- drivers/net/gve/gve_ethdev.h | 4 +- drivers/net/gve/gve_rss.c | 206 ++++++++++++++++++++++++++++++ drivers/net/gve/gve_rss.h | 107 ++++++++++++++++ drivers/net/gve/meson.build | 1 + 6 files changed, 319 insertions(+), 11 deletions(-) create mode 100644 drivers/net/gve/gve_rss.c create mode 100644 drivers/net/gve/gve_rss.h diff --git a/drivers/net/gve/base/gve_adminq.h b/drivers/net/gve/base/gve_adminq.h index 95f4960561..24abd945cc 100644 --- a/drivers/net/gve/base/gve_adminq.h +++ b/drivers/net/gve/base/gve_adminq.h @@ -378,15 +378,6 @@ struct gve_adminq_get_ptype_map { __be64 ptype_map_addr; }; -#define GVE_RSS_HASH_IPV4 BIT(0) -#define GVE_RSS_HASH_TCPV4 BIT(1) -#define GVE_RSS_HASH_IPV6 BIT(2) -#define GVE_RSS_HASH_IPV6_EX BIT(3) -#define GVE_RSS_HASH_TCPV6 BIT(4) -#define GVE_RSS_HASH_TCPV6_EX BIT(5) -#define GVE_RSS_HASH_UDPV4 BIT(6) -#define GVE_RSS_HASH_UDPV6 BIT(7) -#define GVE_RSS_HASH_UDPV6_EX BIT(8) /* RSS configuration command */ struct gve_adminq_configure_rss { @@ -428,6 +419,7 @@ union gve_adminq_command { GVE_CHECK_UNION_LEN(64, gve_adminq_command); struct gve_priv; +struct gve_rss_config; struct gve_queue_page_list; int gve_adminq_alloc(struct gve_priv *priv); void gve_adminq_free(struct gve_priv *priv); diff --git a/drivers/net/gve/gve_ethdev.c b/drivers/net/gve/gve_ethdev.c index 6acdb4e13b..936ca22cb9 100644 --- a/drivers/net/gve/gve_ethdev.c +++ b/drivers/net/gve/gve_ethdev.c @@ -442,7 +442,7 @@ gve_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) .nb_align = 1, }; - dev_info->flow_type_rss_offloads = GVE_RSS_OFFLOAD_ALL; + dev_info->flow_type_rss_offloads = GVE_RTE_RSS_OFFLOAD_ALL; return 0; } diff --git a/drivers/net/gve/gve_ethdev.h b/drivers/net/gve/gve_ethdev.h index f7635e829c..bc486cb941 100644 --- a/drivers/net/gve/gve_ethdev.h +++ b/drivers/net/gve/gve_ethdev.h @@ -33,7 +33,7 @@ RTE_MBUF_F_TX_L4_MASK | \ RTE_MBUF_F_TX_TCP_SEG) -#define GVE_RSS_OFFLOAD_ALL ( \ +#define GVE_RTE_RSS_OFFLOAD_ALL ( \ RTE_ETH_RSS_IPV4 | \ RTE_ETH_RSS_NONFRAG_IPV4_TCP | \ RTE_ETH_RSS_IPV6 | \ @@ -290,6 +290,8 @@ struct gve_priv { const struct rte_memzone *stats_report_mem; uint16_t stats_start_idx; /* start index of array of stats written by NIC */ uint16_t stats_end_idx; /* end index of array of stats written by NIC */ + + struct gve_rss_config rss_config; }; static inline bool diff --git a/drivers/net/gve/gve_rss.c b/drivers/net/gve/gve_rss.c new file mode 100644 index 0000000000..931180f8f2 --- /dev/null +++ b/drivers/net/gve/gve_rss.c @@ -0,0 +1,206 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2023 Google LLC + */ + +#include "gve_rss.h" + +int +gve_generate_rss_reta(struct rte_eth_dev *dev, struct gve_rss_config *config) +{ + int i; + if (!config || !config->indir) + return -EINVAL; + + for (i = 0; i < config->indir_size; i++) + config->indir[i] = i % dev->data->nb_rx_queues; + + return 0; +} + + +int +gve_init_rss_config(struct gve_rss_config *gve_rss_conf, + uint16_t key_size, uint16_t indir_size) +{ + int err; + + gve_rss_conf->alg = GVE_RSS_HASH_TOEPLITZ; + + gve_rss_conf->key_size = key_size; + gve_rss_conf->key = rte_zmalloc("rss key", + key_size * sizeof(*gve_rss_conf->key), + RTE_CACHE_LINE_SIZE); + if (!gve_rss_conf->key) + return -ENOMEM; + + gve_rss_conf->indir_size = indir_size; + gve_rss_conf->indir = rte_zmalloc("rss reta", + indir_size * sizeof(*gve_rss_conf->indir), + RTE_CACHE_LINE_SIZE); + if (!gve_rss_conf->indir) { + err = -ENOMEM; + goto err_with_key; + } + + return 0; +err_with_key: + rte_free(gve_rss_conf->key); + return err; +} + +int +gve_init_rss_config_from_priv(struct gve_priv *priv, + struct gve_rss_config *gve_rss_conf) +{ + int err = gve_init_rss_config(gve_rss_conf, priv->rss_config.key_size, + priv->rss_config.indir_size); + if (err) + return err; + + gve_rss_conf->hash_types = priv->rss_config.hash_types; + gve_rss_conf->alg = priv->rss_config.alg; + memcpy(gve_rss_conf->key, priv->rss_config.key, + gve_rss_conf->key_size * sizeof(*gve_rss_conf->key)); + memcpy(gve_rss_conf->indir, priv->rss_config.indir, + gve_rss_conf->indir_size * sizeof(*gve_rss_conf->indir)); + + return 0; +} + +void +gve_free_rss_config(struct gve_rss_config *gve_rss_conf) +{ + rte_free(gve_rss_conf->indir); + gve_rss_conf->indir = NULL; + rte_free(gve_rss_conf->key); + gve_rss_conf->key = NULL; +} + +int +gve_update_priv_rss_config(struct gve_priv *priv, struct gve_rss_config *config) +{ + struct gve_rss_config *priv_config = &priv->rss_config; + int key_bytes, indir_bytes; + + if (!config) + return -EINVAL; + if (config->key_size == 0 || !config->key) + return -EINVAL; + if (config->indir_size == 0 || !config->indir) + return -EINVAL; + + priv_config->hash_types = config->hash_types; + priv_config->alg = config->alg; + + priv_config->key_size = config->key_size; + key_bytes = priv_config->key_size * sizeof(*priv_config->key); + if (!priv_config->key) + priv_config->key = rte_zmalloc("priv rss key", key_bytes, + RTE_CACHE_LINE_SIZE); + else + priv_config->key = rte_realloc(priv_config->key, key_bytes, + RTE_CACHE_LINE_SIZE); + if (!priv_config->key) + return -ENOMEM; + + priv_config->indir_size = config->indir_size; + indir_bytes = priv_config->indir_size * sizeof(*priv_config->indir); + if (!priv_config->indir) + priv_config->indir = rte_zmalloc("priv rss reta", indir_bytes, + RTE_CACHE_LINE_SIZE); + else + priv_config->indir = rte_realloc(priv_config->indir, + indir_bytes, RTE_CACHE_LINE_SIZE); + + if (!priv_config->indir) + return -ENOMEM; + + memcpy(priv_config->indir, config->indir, + config->indir_size * sizeof(*priv_config->indir)); + memcpy(priv_config->key, config->key, + config->key_size * sizeof(*priv_config->key)); + + return 0; +} + +int +gve_update_rss_key(struct gve_priv *priv, struct gve_rss_config *gve_rss_conf, + struct rte_eth_rss_conf *rss_conf) +{ + if (rss_conf->rss_key_len && rss_conf->rss_key) { + gve_rss_conf->key_size = rss_conf->rss_key_len; + memcpy(gve_rss_conf->key, rss_conf->rss_key, + gve_rss_conf->key_size * sizeof(*gve_rss_conf->key)); + } else if (priv->rss_config.key_size && priv->rss_config.key) { + gve_rss_conf->key_size = priv->rss_config.key_size; + memcpy(gve_rss_conf->key, priv->rss_config.key, + gve_rss_conf->key_size * sizeof(*gve_rss_conf->key)); + } else { + PMD_DRV_LOG(ERR, "RSS key must be set as part of initial RSS " + "configuration."); + return -EINVAL; + } + return 0; +} + +int +gve_update_rss_hash_types(struct gve_priv *priv, + struct gve_rss_config *gve_rss_conf, struct rte_eth_rss_conf *rss_conf) +{ + /* Initialize to 0 before modifying. */ + gve_rss_conf->hash_types = 0; + if (rss_conf->rss_hf) + rte_to_gve_rss_hf(rss_conf->rss_hf, gve_rss_conf); + else if (priv->rss_config.key_size && priv->rss_config.key) + gve_rss_conf->hash_types = priv->rss_config.hash_types; + else + gve_rss_conf->hash_types = GVE_RSS_OFFLOAD_DEFAULT; + return 0; +} + +void +rte_to_gve_rss_hf(uint64_t rte_rss_hf, struct gve_rss_config *gve_rss_conf) +{ + if (rte_rss_hf & RTE_ETH_RSS_IPV4) + gve_rss_conf->hash_types |= GVE_RSS_HASH_IPV4; + if (rte_rss_hf & RTE_ETH_RSS_NONFRAG_IPV4_TCP) + gve_rss_conf->hash_types |= GVE_RSS_HASH_TCPV4; + if (rte_rss_hf & RTE_ETH_RSS_IPV6) + gve_rss_conf->hash_types |= GVE_RSS_HASH_IPV6; + if (rte_rss_hf & RTE_ETH_RSS_IPV6_EX) + gve_rss_conf->hash_types |= GVE_RSS_HASH_IPV6_EX; + if (rte_rss_hf & RTE_ETH_RSS_NONFRAG_IPV6_TCP) + gve_rss_conf->hash_types |= GVE_RSS_HASH_TCPV6; + if (rte_rss_hf & RTE_ETH_RSS_IPV6_TCP_EX) + gve_rss_conf->hash_types |= GVE_RSS_HASH_TCPV6_EX; + if (rte_rss_hf & RTE_ETH_RSS_NONFRAG_IPV4_UDP) + gve_rss_conf->hash_types |= GVE_RSS_HASH_UDPV4; + if (rte_rss_hf & RTE_ETH_RSS_NONFRAG_IPV6_UDP) + gve_rss_conf->hash_types |= GVE_RSS_HASH_UDPV6; + if (rte_rss_hf & RTE_ETH_RSS_IPV6_UDP_EX) + gve_rss_conf->hash_types |= GVE_RSS_HASH_UDPV6_EX; +} + +void +gve_to_rte_rss_hf(uint16_t gve_rss_types, struct rte_eth_rss_conf *rss_conf) +{ + if (gve_rss_types & GVE_RSS_HASH_IPV4) + rss_conf->rss_hf |= RTE_ETH_RSS_IPV4; + if (gve_rss_types & GVE_RSS_HASH_TCPV4) + rss_conf->rss_hf |= RTE_ETH_RSS_NONFRAG_IPV4_TCP; + if (gve_rss_types & GVE_RSS_HASH_IPV6) + rss_conf->rss_hf |= RTE_ETH_RSS_IPV6; + if (gve_rss_types & GVE_RSS_HASH_IPV6_EX) + rss_conf->rss_hf |= RTE_ETH_RSS_IPV6_EX; + if (gve_rss_types & GVE_RSS_HASH_TCPV6) + rss_conf->rss_hf |= RTE_ETH_RSS_NONFRAG_IPV6_TCP; + if (gve_rss_types & GVE_RSS_HASH_TCPV6_EX) + rss_conf->rss_hf |= RTE_ETH_RSS_IPV6_TCP_EX; + if (gve_rss_types & GVE_RSS_HASH_UDPV4) + rss_conf->rss_hf |= RTE_ETH_RSS_NONFRAG_IPV4_UDP; + if (gve_rss_types & GVE_RSS_HASH_UDPV6) + rss_conf->rss_hf |= RTE_ETH_RSS_NONFRAG_IPV6_UDP; + if (gve_rss_types & GVE_RSS_HASH_UDPV6_EX) + rss_conf->rss_hf |= RTE_ETH_RSS_IPV6_UDP_EX; +} + diff --git a/drivers/net/gve/gve_rss.h b/drivers/net/gve/gve_rss.h new file mode 100644 index 0000000000..0cc235a19a --- /dev/null +++ b/drivers/net/gve/gve_rss.h @@ -0,0 +1,107 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2023 Google LLC + */ + +#include "gve_adminq.h" +#include "gve_ethdev.h" + +#define GVE_RSS_HASH_IPV4 BIT(0) +#define GVE_RSS_HASH_TCPV4 BIT(1) +#define GVE_RSS_HASH_IPV6 BIT(2) +#define GVE_RSS_HASH_IPV6_EX BIT(3) +#define GVE_RSS_HASH_TCPV6 BIT(4) +#define GVE_RSS_HASH_TCPV6_EX BIT(5) +#define GVE_RSS_HASH_UDPV4 BIT(6) +#define GVE_RSS_HASH_UDPV6 BIT(7) +#define GVE_RSS_HASH_UDPV6_EX BIT(8) + +#define GVE_RSS_OFFLOAD_DEFAULT ( \ + GVE_RSS_HASH_IPV4 | \ + GVE_RSS_HASH_TCPV4 | \ + GVE_RSS_HASH_IPV6 | \ + GVE_RSS_HASH_IPV6_EX | \ + GVE_RSS_HASH_TCPV6 | \ + GVE_RSS_HASH_TCPV6_EX | \ + GVE_RSS_HASH_UDPV4 | \ + GVE_RSS_HASH_UDPV6 | \ + GVE_RSS_HASH_UDPV6_EX) + +/** + * Generates default RSS redirection table based on the number of queues the + * device is configured with. This assigns hash values to queues in a + * round-robin manner. + */ +int +gve_generate_rss_reta(struct rte_eth_dev *dev, struct gve_rss_config *config); + +/** + * Initializes `gve_rss_conf`, setting the fields to default values and + * allocating memory for the RSS key and redirection table. + */ +int +gve_init_rss_config(struct gve_rss_config *gve_rss_conf, + uint16_t key_size, uint16_t indir_size); + +/** + * Initializes `gve_rss_conf` based on the RSS configuration stored in `priv`. + */ +int +gve_init_rss_config_from_priv(struct gve_priv *priv, + struct gve_rss_config *gve_rss_conf); + +/** + * Frees RSS key and redriection table pointers stored in `gve_rss_conf`. + */ +void +gve_free_rss_config(struct gve_rss_config *gve_rss_conf); + +/** + * Updates the rss_config stored in `priv` with the contents of `config`. + */ +int +gve_update_priv_rss_config(struct gve_priv *priv, + struct gve_rss_config *config); + +/** + * Updates the RSS key stored in `gve_rss_conf`. It is prioritized as follows: + * 1) retrieve from `rss_conf`, if non-null + * 2) retrieve from `priv`, if non-null + * If keys from both sources are unset, return -EINVAL. + */ +int +gve_update_rss_key(struct gve_priv *priv, struct gve_rss_config *gve_rss_conf, + struct rte_eth_rss_conf *rss_conf); + +/** + * Updates the RSS hash types stored in `gve_rss_conf`. It is prioritized as + * follows: + * 1) retrieve from `rss_conf`, if set + * 2) retrieve from priv, if RSS has been configured + * 3) set default RSS offload + */ +int +gve_update_rss_hash_types(struct gve_priv *priv, + struct gve_rss_config *gve_rss_conf, struct rte_eth_rss_conf *rss_conf); + +/** + * Ensures that only supported RSS hash fields are set in `rte_rss_hf`. + */ +static inline int +gve_validate_rss_hf(uint64_t rte_rss_hf) { + return rte_rss_hf & ~GVE_RTE_RSS_OFFLOAD_ALL; +} + +/** + * Converts RSS hash types from RTE values to GVE values, storing them in + * `gve_rss_conf`. + */ +void +rte_to_gve_rss_hf(uint64_t rte_rss_hf, struct gve_rss_config *gve_rss_conf); + +/** + * Converts RSS hash types from GVE values to RTE values, storing them in + * `rss_conf`. + */ +void +gve_to_rte_rss_hf(uint16_t gve_rss_types, struct rte_eth_rss_conf *rss_conf); + diff --git a/drivers/net/gve/meson.build b/drivers/net/gve/meson.build index 61d195009c..6da13a8406 100644 --- a/drivers/net/gve/meson.build +++ b/drivers/net/gve/meson.build @@ -15,5 +15,6 @@ sources = files( 'gve_tx_dqo.c', 'gve_ethdev.c', 'gve_version.c', + 'gve_rss.c', ) includes += include_directories('base') From patchwork Fri Jan 26 17:33:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joshua Washington X-Patchwork-Id: 136185 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E24B6439D4; Fri, 26 Jan 2024 18:33:54 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7C9A142E40; Fri, 26 Jan 2024 18:33:37 +0100 (CET) Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) by mails.dpdk.org (Postfix) with ESMTP id 853D542E50 for ; Fri, 26 Jan 2024 18:33:36 +0100 (CET) Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-5c659339436so357687a12.2 for ; Fri, 26 Jan 2024 09:33:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706290416; x=1706895216; darn=dpdk.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=VyC/NiaVh5uOxiixv+3Q0RS5xeYutZeuIkPTFZgAniw=; b=34X0xjQ3Ht1IoLuq89fhJYQ2fIqTrM49hfBWSZjkoQORghpy25u0z8Q7rHPKKWbnAD mnFP36hBwB0JEmxOdduQctqJe0uj8y4Wqrt5lqpKzBLwaYp4FA4c208QWrFY+LaTdiuI hoWa91WRnX16aUiwE4ToPeLnNQulC8F81vkJYgnpU4O+LweQyT/snWsvV2glDo8r/W7G rD8zph2X0mtd8H6Vh6ofsBkNA48jItF4Hs/waGyt9BZIw2zl+aICHLve/HUKzadqsdRI 3oxJo9o2aLJH9pauopriHNvaYZw3H2i06YFHlZCUqS2kzYdOVhXb3mMYvHGHyj4Jzn6k UyAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706290416; x=1706895216; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=VyC/NiaVh5uOxiixv+3Q0RS5xeYutZeuIkPTFZgAniw=; b=lIv6IsY5vbqBA6pa+3eUvm8fsU5qEmi+esWppkAFtAo+ab66zRb0/VLV5wx+2T2WVZ hycwYmxdSE6PQBbju51TJ0HtL9GfaWkzD3cCUrH+oCJ33lCvl8IaBzbqHjsx7+45HUPu 3VE9XGWVxItsBDt3NwtVPNMtZsC9ToWwxUBgs/gbxVpfYJHmFCLgdAr5ymTQ83xrDH3W 2bBOTzhc/NW3VaLc7YNhY1FwClzDvdwWS1lJQupEd3AN25G9+Bi1tzEMXi+1t+WVna8+ SuIhyyh64lhFCNYnz5NG4gcYBH6ekUgrpL7qvbm2qj1pEpXKDtBrLkUqOlZ7Wascl2Oq +IOg== X-Gm-Message-State: AOJu0YzwgHVjLOI7suy7Bbj8XBIXAcNEcSD2LH0Qr1yqDZfxFe2oveuh h4vG2NrUiZN5VGpWZPt+UDzXS/QxgK4g/PnhfVco7wSGFpRRoPQe7yyvdyJe1BGlEln0nCjqmCA Yp7PqG1HC9A== X-Google-Smtp-Source: AGHT+IGAEHIuE0lkkCL5t2SEIyjh/lIRwZ8/PH8MFIiNRoqTGu25fPY+DbQsuPNxxjVf5KevdCQ3/IMVGN0VSQ== X-Received: from joshwash.sea.corp.google.com ([2620:15c:11c:202:32b0:8478:d496:bc49]) (user=joshwash job=sendgmr) by 2002:a65:6150:0:b0:5ce:715:56d5 with SMTP id o16-20020a656150000000b005ce071556d5mr310pgv.11.1706290415666; Fri, 26 Jan 2024 09:33:35 -0800 (PST) Date: Fri, 26 Jan 2024 09:33:13 -0800 In-Reply-To: <20240126173317.2779230-1-joshwash@google.com> Mime-Version: 1.0 References: <20240124001501.446195-1-joshwash@google.com> <20240126173317.2779230-1-joshwash@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Message-ID: <20240126173317.2779230-5-joshwash@google.com> Subject: [PATCH v4 4/7] net/gve: RSS configuration update support From: Joshua Washington To: Junfeng Guo , Jeroen de Borst , Rushil Gupta , Joshua Washington Cc: dev@dpdk.org, Ferruh Yigit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This patch adds support for updating the RSS hash key and hash fields in the GVE PMD through the implementation of rss_hash_update and rss_hash_conf_get. The RSS hash key for gVNIC is required to be 40 bytes. On initial configuration of the RSS hash key, the RSS redirection table will be set to a static default, using a round-robin approach for all queues. Note, however, that this patch does not include support for setting the redirection table explicitly. In dev_configure, if the static redirection table has been set, it will be updated to reflect the new queue count, if it has changed. The RSS key must be set before any other RSS configuration can happen. As such, an attempt to set the hash types before the key is configured will fail. Signed-off-by: Joshua Washington Reviewed-by: Rushil Gupta Reviewed-by: Jeroen de Borst --- drivers/net/gve/gve_ethdev.c | 132 ++++++++++++++++++++++++++++++++++- drivers/net/gve/gve_ethdev.h | 3 + 2 files changed, 133 insertions(+), 2 deletions(-) diff --git a/drivers/net/gve/gve_ethdev.c b/drivers/net/gve/gve_ethdev.c index 936ca22cb9..2a68d31808 100644 --- a/drivers/net/gve/gve_ethdev.c +++ b/drivers/net/gve/gve_ethdev.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright(C) 2022 Intel Corporation + * Copyright(C) 2022-2023 Intel Corporation + * Copyright(C) 2023 Google LLC */ #include "gve_ethdev.h" @@ -8,6 +9,7 @@ #include "base/gve_osdep.h" #include "gve_version.h" #include "rte_ether.h" +#include "gve_rss.h" static void gve_write_version(uint8_t *driver_version_register) @@ -88,12 +90,31 @@ gve_dev_configure(struct rte_eth_dev *dev) { struct gve_priv *priv = dev->data->dev_private; - if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) + if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) { dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH; + priv->rss_config.alg = GVE_RSS_HASH_TOEPLITZ; + } if (dev->data->dev_conf.rxmode.offloads & RTE_ETH_RX_OFFLOAD_TCP_LRO) priv->enable_rsc = 1; + /* Reset RSS RETA in case number of queues changed. */ + if (priv->rss_config.indir) { + struct gve_rss_config update_reta_config; + gve_init_rss_config_from_priv(priv, &update_reta_config); + gve_generate_rss_reta(dev, &update_reta_config); + + int err = gve_adminq_configure_rss(priv, &update_reta_config); + if (err) + PMD_DRV_LOG(ERR, + "Could not reconfigure RSS redirection table."); + else + gve_update_priv_rss_config(priv, &update_reta_config); + + gve_free_rss_config(&update_reta_config); + return err; + } + return 0; } @@ -443,6 +464,8 @@ gve_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) }; dev_info->flow_type_rss_offloads = GVE_RTE_RSS_OFFLOAD_ALL; + dev_info->hash_key_size = GVE_RSS_HASH_KEY_SIZE; + dev_info->reta_size = GVE_RSS_INDIR_SIZE; return 0; } @@ -646,6 +669,107 @@ gve_xstats_get_names(struct rte_eth_dev *dev, return count; } + +static int +gve_rss_hash_update(struct rte_eth_dev *dev, + struct rte_eth_rss_conf *rss_conf) +{ + struct gve_priv *priv = dev->data->dev_private; + struct gve_rss_config gve_rss_conf; + int rss_reta_size; + int err; + + if (gve_validate_rss_hf(rss_conf->rss_hf)) { + PMD_DRV_LOG(ERR, "Unsupported hash function."); + return -EINVAL; + } + + if (rss_conf->algorithm != RTE_ETH_HASH_FUNCTION_TOEPLITZ && + rss_conf->algorithm != RTE_ETH_HASH_FUNCTION_DEFAULT) { + PMD_DRV_LOG(ERR, "Device only supports Toeplitz algorithm."); + return -EINVAL; + } + + if (rss_conf->rss_key_len) { + if (rss_conf->rss_key_len != GVE_RSS_HASH_KEY_SIZE) { + PMD_DRV_LOG(ERR, + "Invalid hash key size. Only RSS hash key size " + "of %u supported", GVE_RSS_HASH_KEY_SIZE); + return -EINVAL; + } + + if (!rss_conf->rss_key) { + PMD_DRV_LOG(ERR, "RSS key must be non-null."); + return -EINVAL; + } + } else { + if (!priv->rss_config.key_size) { + PMD_DRV_LOG(ERR, "RSS key must be initialized before " + "any other configuration."); + return -EINVAL; + } + rss_conf->rss_key_len = priv->rss_config.key_size; + } + + rss_reta_size = priv->rss_config.indir ? + priv->rss_config.indir_size : + GVE_RSS_INDIR_SIZE; + err = gve_init_rss_config(&gve_rss_conf, rss_conf->rss_key_len, + rss_reta_size); + if (err) + return err; + + gve_rss_conf.alg = GVE_RSS_HASH_TOEPLITZ; + err = gve_update_rss_hash_types(priv, &gve_rss_conf, rss_conf); + if (err) + goto err; + err = gve_update_rss_key(priv, &gve_rss_conf, rss_conf); + if (err) + goto err; + + /* Set redirection table to default or preexisting. */ + if (!priv->rss_config.indir) + gve_generate_rss_reta(dev, &gve_rss_conf); + else + memcpy(gve_rss_conf.indir, priv->rss_config.indir, + gve_rss_conf.indir_size * sizeof(*priv->rss_config.indir)); + + err = gve_adminq_configure_rss(priv, &gve_rss_conf); + if (!err) + gve_update_priv_rss_config(priv, &gve_rss_conf); + +err: + gve_free_rss_config(&gve_rss_conf); + return err; +} + +static int +gve_rss_hash_conf_get(struct rte_eth_dev *dev, + struct rte_eth_rss_conf *rss_conf) +{ + struct gve_priv *priv = dev->data->dev_private; + + if (!(dev->data->dev_conf.rxmode.offloads & + RTE_ETH_RX_OFFLOAD_RSS_HASH)) { + PMD_DRV_LOG(ERR, "RSS not configured."); + return -ENOTSUP; + } + + + gve_to_rte_rss_hf(priv->rss_config.hash_types, rss_conf); + rss_conf->rss_key_len = priv->rss_config.key_size; + if (rss_conf->rss_key) { + if (!priv->rss_config.key) { + PMD_DRV_LOG(ERR, "Unable to retrieve default RSS hash key."); + return -ENOTSUP; + } + memcpy(rss_conf->rss_key, priv->rss_config.key, + rss_conf->rss_key_len * sizeof(*rss_conf->rss_key)); + } + + return 0; +} + static const struct eth_dev_ops gve_eth_dev_ops = { .dev_configure = gve_dev_configure, .dev_start = gve_dev_start, @@ -666,6 +790,8 @@ static const struct eth_dev_ops gve_eth_dev_ops = { .mtu_set = gve_dev_mtu_set, .xstats_get = gve_xstats_get, .xstats_get_names = gve_xstats_get_names, + .rss_hash_update = gve_rss_hash_update, + .rss_hash_conf_get = gve_rss_hash_conf_get, }; static const struct eth_dev_ops gve_eth_dev_ops_dqo = { @@ -688,6 +814,8 @@ static const struct eth_dev_ops gve_eth_dev_ops_dqo = { .mtu_set = gve_dev_mtu_set, .xstats_get = gve_xstats_get, .xstats_get_names = gve_xstats_get_names, + .rss_hash_update = gve_rss_hash_update, + .rss_hash_conf_get = gve_rss_hash_conf_get, }; static void diff --git a/drivers/net/gve/gve_ethdev.h b/drivers/net/gve/gve_ethdev.h index bc486cb941..d713657d10 100644 --- a/drivers/net/gve/gve_ethdev.h +++ b/drivers/net/gve/gve_ethdev.h @@ -29,6 +29,9 @@ #define GVE_RX_MIN_BUF_SIZE_GQI 2048 #define GVE_RX_MAX_BUF_SIZE_GQI 4096 +#define GVE_RSS_HASH_KEY_SIZE 40 +#define GVE_RSS_INDIR_SIZE 128 + #define GVE_TX_CKSUM_OFFLOAD_MASK ( \ RTE_MBUF_F_TX_L4_MASK | \ RTE_MBUF_F_TX_TCP_SEG) From patchwork Fri Jan 26 17:33:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joshua Washington X-Patchwork-Id: 136186 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C0241439D4; Fri, 26 Jan 2024 18:34:02 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7B59142E41; Fri, 26 Jan 2024 18:33:39 +0100 (CET) Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) by mails.dpdk.org (Postfix) with ESMTP id 7AA0042E51 for ; Fri, 26 Jan 2024 18:33:38 +0100 (CET) Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-5ce632b2adfso747873a12.0 for ; Fri, 26 Jan 2024 09:33:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706290417; x=1706895217; darn=dpdk.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=SW3JZkFSSD1naxRvmY8VsdB4LML2W8ItAZao49jLPo0=; b=ySPr8l9p9f0icycPeXfWpfbjfG7xY90WdOAKR7kAUB/9WRUNkZ51f2OvgB0+TyyKXi dWRslHw8rqa3YinfA9khkDntaxYm1lCsDMxPzswvCm5bW6NFtu663kM7Fvebevw0oyfL H8W4MCqQV1vzIJVCJPqQRpm+TrNKNDy1GtSxl1fiUPXIq1GjvhTUR1An22VsOmz0O9E2 atAhGvund0zcVD932QKR9FjA75jnzqf8/Zgs2pZNLIaVWh5bnsXBFzAFSORUMCvuXelu jzW18Wd+uFXdNzeTpAp93zqCtooRCoO/fFmam7OyG1eUOVH7mbfNWqjSzb/MCGzYl+5m qk8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706290417; x=1706895217; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=SW3JZkFSSD1naxRvmY8VsdB4LML2W8ItAZao49jLPo0=; b=QvT6T5I+Gj3j8vBtpjEDoBoMMkHOLIcpttrvSbrajII5P723b06bZOymvpz7PVNIb+ 8H1qFhnZoYIvTcrQRLyTXpVxr8RqdsKLY18yCJBPsug/x6DjWhfvlP7DvNkzcHeLu0R3 Y0weWI7j0N67p17PdR+cydVLJEjP3q/YfHFmLFlygyfDFjJah05l4inU3ssd4kKFq1ZK F8HHJOlqvBrZaJgbKk9ydPZe4/Ku/rYgZY5FjxKAWhbRhy9byHLiRFjexn7tOtRIxei7 jrtfbl2qtQ+F68fEedk6UZFNnKZYAulWtfqmYP+ZlYc58AWiiVghHWsfijrzK4nHI7A2 UD+Q== X-Gm-Message-State: AOJu0YwfXbtTw5t+ybY2zMrRj7KZeJb4/p2+r4RhGuGqQ41/gL++DWj9 aaQe/ToPviDape4iwnzQhRyf0iWS9p+EXfmljnDtef9XfTc4R3PkVcitKABftfLZrFhbgYfddl6 Uq8uUu9R9qA== X-Google-Smtp-Source: AGHT+IHHDM1lIUN1WN0CdKeULx9z4pz/wXUPgsuJBtHlycMUU3JYH6k8ITwXa+NDvZyXUTY4GKFCWhY136JW3w== X-Received: from joshwash.sea.corp.google.com ([2620:15c:11c:202:32b0:8478:d496:bc49]) (user=joshwash job=sendgmr) by 2002:a65:6699:0:b0:5d8:42ef:9fe4 with SMTP id b25-20020a656699000000b005d842ef9fe4mr479pgw.3.1706290417655; Fri, 26 Jan 2024 09:33:37 -0800 (PST) Date: Fri, 26 Jan 2024 09:33:14 -0800 In-Reply-To: <20240126173317.2779230-1-joshwash@google.com> Mime-Version: 1.0 References: <20240124001501.446195-1-joshwash@google.com> <20240126173317.2779230-1-joshwash@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Message-ID: <20240126173317.2779230-6-joshwash@google.com> Subject: [PATCH v4 5/7] net/gve: RSS redirection table update support From: Joshua Washington To: Junfeng Guo , Jeroen de Borst , Rushil Gupta , Joshua Washington Cc: dev@dpdk.org, Ferruh Yigit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This patch introduces support for updating the RSS redirection table in the GVE PMD through the implementation of rss_reta_update and rss_reta_query. Due to an infrastructure limitation, the RSS hash key must be manually configured before the redirection table can be updated or queried. The redirection table is expected to be exactly 128 bytes. Signed-off-by: Joshua Washington Reviewed-by: Rushil Gupta Reviewed-by: Jeroen de Borst --- drivers/net/gve/gve_ethdev.c | 95 ++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/drivers/net/gve/gve_ethdev.c b/drivers/net/gve/gve_ethdev.c index 2a68d31808..3b8ec5872d 100644 --- a/drivers/net/gve/gve_ethdev.c +++ b/drivers/net/gve/gve_ethdev.c @@ -770,6 +770,97 @@ gve_rss_hash_conf_get(struct rte_eth_dev *dev, return 0; } +static int +gve_rss_reta_update(struct rte_eth_dev *dev, + struct rte_eth_rss_reta_entry64 *reta_conf, uint16_t reta_size) +{ + struct gve_priv *priv = dev->data->dev_private; + struct gve_rss_config gve_rss_conf; + int table_id; + int err; + int i; + + /* RSS key must be set before the redirection table can be set. */ + if (!priv->rss_config.key || priv->rss_config.key_size == 0) { + PMD_DRV_LOG(ERR, "RSS hash key msut be set before the " + "redirection table can be updated."); + return -ENOTSUP; + } + + if (reta_size != GVE_RSS_INDIR_SIZE) { + PMD_DRV_LOG(ERR, "Redirection table must have %hu elements", + (uint16_t)GVE_RSS_INDIR_SIZE); + return -EINVAL; + } + + err = gve_init_rss_config_from_priv(priv, &gve_rss_conf); + if (err) { + PMD_DRV_LOG(ERR, "Error allocating new RSS config."); + return err; + } + + table_id = 0; + for (i = 0; i < priv->rss_config.indir_size; i++) { + int table_entry = i % RTE_ETH_RETA_GROUP_SIZE; + if (reta_conf[table_id].mask & (1ULL << table_entry)) + gve_rss_conf.indir[i] = + reta_conf[table_id].reta[table_entry]; + + if (table_entry == RTE_ETH_RETA_GROUP_SIZE - 1) + table_id++; + } + + err = gve_adminq_configure_rss(priv, &gve_rss_conf); + if (err) + PMD_DRV_LOG(ERR, "Problem configuring RSS with device."); + else + gve_update_priv_rss_config(priv, &gve_rss_conf); + + gve_free_rss_config(&gve_rss_conf); + return err; +} + +static int +gve_rss_reta_query(struct rte_eth_dev *dev, + struct rte_eth_rss_reta_entry64 *reta_conf, uint16_t reta_size) +{ + struct gve_priv *priv = dev->data->dev_private; + int table_id; + int i; + + if (!(dev->data->dev_conf.rxmode.offloads & + RTE_ETH_RX_OFFLOAD_RSS_HASH)) { + PMD_DRV_LOG(ERR, "RSS not configured."); + return -ENOTSUP; + } + + /* RSS key must be set before the redirection table can be queried. */ + if (!priv->rss_config.key) { + PMD_DRV_LOG(ERR, "RSS hash key must be set before the " + "redirection table can be initialized."); + return -ENOTSUP; + } + + if (reta_size != priv->rss_config.indir_size) { + PMD_DRV_LOG(ERR, "RSS redirection table must have %d entries.", + priv->rss_config.indir_size); + return -EINVAL; + } + + table_id = 0; + for (i = 0; i < priv->rss_config.indir_size; i++) { + int table_entry = i % RTE_ETH_RETA_GROUP_SIZE; + if (reta_conf[table_id].mask & (1ULL << table_entry)) + reta_conf[table_id].reta[table_entry] = + priv->rss_config.indir[i]; + + if (table_entry == RTE_ETH_RETA_GROUP_SIZE - 1) + table_id++; + } + + return 0; +} + static const struct eth_dev_ops gve_eth_dev_ops = { .dev_configure = gve_dev_configure, .dev_start = gve_dev_start, @@ -792,6 +883,8 @@ static const struct eth_dev_ops gve_eth_dev_ops = { .xstats_get_names = gve_xstats_get_names, .rss_hash_update = gve_rss_hash_update, .rss_hash_conf_get = gve_rss_hash_conf_get, + .reta_update = gve_rss_reta_update, + .reta_query = gve_rss_reta_query, }; static const struct eth_dev_ops gve_eth_dev_ops_dqo = { @@ -816,6 +909,8 @@ static const struct eth_dev_ops gve_eth_dev_ops_dqo = { .xstats_get_names = gve_xstats_get_names, .rss_hash_update = gve_rss_hash_update, .rss_hash_conf_get = gve_rss_hash_conf_get, + .reta_update = gve_rss_reta_update, + .reta_query = gve_rss_reta_query, }; static void From patchwork Fri Jan 26 17:33:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joshua Washington X-Patchwork-Id: 136187 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1F9B7439D4; Fri, 26 Jan 2024 18:34:12 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C876D42E62; Fri, 26 Jan 2024 18:33:41 +0100 (CET) Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) by mails.dpdk.org (Postfix) with ESMTP id 653F842E57 for ; Fri, 26 Jan 2024 18:33:40 +0100 (CET) Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-6de070a4c4eso509415b3a.2 for ; Fri, 26 Jan 2024 09:33:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706290419; x=1706895219; darn=dpdk.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=jdSXlxA3QpPKlxNuEjLNMdGjLLU2X8KxqTBBi/xjYVY=; b=EqC2bHsj6q6ffQ8UthibYfShosY7VPVbyXi3CjzzWcrbWZQd9qwgmFqD9fQf//mqBP 4Gqh2rmpZ0+wMOXvvwF6n1F4AqgbAQi5qNWnRIgC9LWvDxkSfCybMlJM/bjQyVGOwUbL KkyVfzfLgGu5m2ZT+v9rbmh4CXhVp6xKQ8kiHT3ilTVNtDisgj494b+V4mCfpIGECTnS bkiudS2Drfu7odq5xp+wXXw3fnv4O8aXsCbgeO7PRck5tQDXKS/nf30N93DuWk1GfOi4 fQn2cjbqC0IJkTe5vdlISkGgf/3i1CyglVXv/KPfJACb5VgL+xBHHf4hc9odyHekNZ8/ TB2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706290419; x=1706895219; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=jdSXlxA3QpPKlxNuEjLNMdGjLLU2X8KxqTBBi/xjYVY=; b=sB/3XBf8YKHJMi4gQZ6+D5DhfX0BHTbTO+ggAYge3Vi1s8WYJJ8xr21htiRWfxYTNg MiYNP5UEzPyLuo6FpYsVxXOBYr/1maMKAS7X2fZAI4xkK6zXpawKyKgMhFGRTV8fTnGb W3cpSHSrzAxbNU0jJAgF/h8eaAlrmlBaXHcG1+uljAjaVEACsbe1PYk8N/z9GGfgDKtx NfDRR/2TMgc1b3eivGU7xuMpQrMJTv5wrP4NgELro2Z3Vf66PhhMrJ9SG9fxH9lt7IvR hLQoctkcggw/G/3QaceUbgUJezb75CrVomD8u8zMMJv57ME1jehA44K04u/TBAL84IxS MpOQ== X-Gm-Message-State: AOJu0Yx2FxixiLOk8J7zAcOp68ZoKnMAYh8m6OfV03hMQQdxwHONj4O2 gqPtA4vwDINYuLP/KnGicVnMLnn1hit00raCvpU2hSh8nBI+go14pkVTGFHySkrd/2OB5K01CtU Tt/jaTKbtgg== X-Google-Smtp-Source: AGHT+IHxIcfW4r5r8igum841d7Rh0E9ZJis4JcJE/U1ps3dbcAdORlyFrb8JnTA9CB8WAyViSAu9qBP5YCKcnw== X-Received: from joshwash.sea.corp.google.com ([2620:15c:11c:202:32b0:8478:d496:bc49]) (user=joshwash job=sendgmr) by 2002:a05:6a00:4503:b0:6db:523:37ff with SMTP id cw3-20020a056a00450300b006db052337ffmr11880pfb.1.1706290419648; Fri, 26 Jan 2024 09:33:39 -0800 (PST) Date: Fri, 26 Jan 2024 09:33:15 -0800 In-Reply-To: <20240126173317.2779230-1-joshwash@google.com> Mime-Version: 1.0 References: <20240124001501.446195-1-joshwash@google.com> <20240126173317.2779230-1-joshwash@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Message-ID: <20240126173317.2779230-7-joshwash@google.com> Subject: [PATCH v4 6/7] net/gve: update gve.ini with RSS capabilities From: Joshua Washington To: Junfeng Guo , Jeroen de Borst , Rushil Gupta , Joshua Washington Cc: dev@dpdk.org, Ferruh Yigit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This patch updates the DPDK feature matrix to expose that the GVE driver supports RSS hash, RSS key update, and RSS reta update. Signed-off-by: Joshua Washington --- doc/guides/nics/features/gve.ini | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/guides/nics/features/gve.ini b/doc/guides/nics/features/gve.ini index 838edd456a..bc08648dbc 100644 --- a/doc/guides/nics/features/gve.ini +++ b/doc/guides/nics/features/gve.ini @@ -15,3 +15,6 @@ Linux = Y x86-32 = Y x86-64 = Y Usage doc = Y +RSS hash = Y +RSS key update = Y +RSS reta update = Y From patchwork Fri Jan 26 17:33:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joshua Washington X-Patchwork-Id: 136188 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 41C54439D4; Fri, 26 Jan 2024 18:34:18 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C967842E66; Fri, 26 Jan 2024 18:33:44 +0100 (CET) Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) by mails.dpdk.org (Postfix) with ESMTP id 0F0BA42E64 for ; Fri, 26 Jan 2024 18:33:42 +0100 (CET) Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-6ddcec40883so608828b3a.2 for ; Fri, 26 Jan 2024 09:33:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706290421; x=1706895221; darn=dpdk.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=h3aZaUFyUZGbxwS3paZWlQTufwqd1KsKY3UizzQlwB8=; b=Lt+sEB6f9rGApeJ7HvimM3N2DS3KGC0tMGwDYAcxyFoYd2n59F0B0qRE8Vu2ap9Mag 6XkDHAMDAeSRl0oVttm3pD87xpf3ykygd4ZOaHIwQsV8oPD3bsoHbIPfUx2x2clX8Z7R o0iM0tecs7MOEuZeXxkHQZbu6ocgrTs0R2c6L8CEsuQM59f1Z8HGF8EjkKyty1Z5ehXU FD9dDFw83JB87xt44iu3X8saT9i/EJMnlMNKUTQgURWIc3rCfURlcwXijVJR+PciwtU2 /d5JKla7xx7c7hFhzh5s55nU9wn6+EXG6Amb7WCmLs1UY0toKqIa4KQ/PZTCMl/Sgx6j boYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706290421; x=1706895221; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=h3aZaUFyUZGbxwS3paZWlQTufwqd1KsKY3UizzQlwB8=; b=CHfF1VBkSaFRSBRULfVo5iWn+R/p/tSpfgTljQehgwAjQVJGo/pCXKybWN2/Hs6WoI 8gNYEGKxwfpUNZuYPEVIk19NQD4vTK9oGc8ti6Br4Q1xh67AHm/4yqdEOmSJ2JPDZpIs 47WXs+5NJ9vK26c+oPMdxichxiT0RKlZG3LfHhlUT+/w/F49LwQaXqQiD3cWZBfv5J0s JW2X2HfVi4LjkLiigxOh872negdWKc1ZgM0Z02SjSbIyptpu/AG7d1nPBIP7pn5cvLuV aHW8WGmS/ujHklIqxmXrkvDy+b2aA4Lb02YDupnunvC6+SKU5SrniIyxtPIqxInYxY0n etfw== X-Gm-Message-State: AOJu0YxovTMcfCye1dITAa4/Y94JOaEHWTmNctfIBX8F8wttsHV96gFe Omq0W/gEDIiCGsMg1Vgvr7pQwouKBUm2+h3NkdC5lyBH8YaGftp7n2l387PtwH7wlWleF1Z+Zw/ JKO1Oze1ZcA== X-Google-Smtp-Source: AGHT+IFWJiOpFT+XJstS6nVHwB0HDmYJy9djDjSyS6LXU+gi5Tf18OVUk9H6tAH+SHe86aGW1W3uMrYYF2bmJg== X-Received: from joshwash.sea.corp.google.com ([2620:15c:11c:202:32b0:8478:d496:bc49]) (user=joshwash job=sendgmr) by 2002:a05:6a00:8f06:b0:6dd:e157:fe74 with SMTP id ji6-20020a056a008f0600b006dde157fe74mr20999pfb.0.1706290421321; Fri, 26 Jan 2024 09:33:41 -0800 (PST) Date: Fri, 26 Jan 2024 09:33:16 -0800 In-Reply-To: <20240126173317.2779230-1-joshwash@google.com> Mime-Version: 1.0 References: <20240124001501.446195-1-joshwash@google.com> <20240126173317.2779230-1-joshwash@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Message-ID: <20240126173317.2779230-8-joshwash@google.com> Subject: [PATCH v4 7/7] net/gve: update GVE documentation with RSS support From: Joshua Washington To: Junfeng Guo , Jeroen de Borst , Rushil Gupta , Joshua Washington Cc: dev@dpdk.org, Ferruh Yigit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This patch updates the GVE doc page to communicate that GVE now supports RSS configuration and explains the limitations. Signed-off-by: Joshua Washington --- doc/guides/nics/gve.rst | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/doc/guides/nics/gve.rst b/doc/guides/nics/gve.rst index 1c3eaf03ef..80991e70cf 100644 --- a/doc/guides/nics/gve.rst +++ b/doc/guides/nics/gve.rst @@ -70,6 +70,8 @@ Supported features of the GVE PMD are: - Link state information - Tx multi-segments (Scatter Tx) - Tx UDP/TCP/SCTP Checksum +- RSS hash configuration +- RSS redirection table update and query Currently, only GQI_QPL and GQI_RDA queue format are supported in PMD. Jumbo Frame is not supported in PMD for now. @@ -77,10 +79,12 @@ It'll be added in a future DPDK release. Also, only GQI_QPL queue format is in use on GCP since GQI_RDA hasn't been released in production. -Currently, setting MTU with value larger than 1460 is not supported. +RSS +^^^ -Currently, only "RSS hash" is force enabled -so that the backend hardware device calculated hash values -could be shared with applications. -But for RSS, there is no such API to config RSS hash function or RETA table. -So, limited RSS is supported only with default config/setting. +GVE RSS can be enabled and configured using the standard interfaces. The driver +does not support querying the initial RSS configuration. + +The RSS hash key must be exactly 40 bytes, and the redirection table must have +128 entries. The RSS hash key must be configured before the redirection table +can be set up.