get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/136080/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 136080,
    "url": "http://patchwork.dpdk.org/api/patches/136080/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20240124000426.418527-5-joshwash@google.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20240124000426.418527-5-joshwash@google.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240124000426.418527-5-joshwash@google.com",
    "date": "2024-01-24T00:04:22",
    "name": "[v3,4/7] net/gve: RSS configuration update support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "e4a378f34b9bf675bd15d2066fa84dbb94066d0e",
    "submitter": {
        "id": 2921,
        "url": "http://patchwork.dpdk.org/api/people/2921/?format=api",
        "name": "Joshua Washington",
        "email": "joshwash@google.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patchwork.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20240124000426.418527-5-joshwash@google.com/mbox/",
    "series": [
        {
            "id": 30888,
            "url": "http://patchwork.dpdk.org/api/series/30888/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=30888",
            "date": "2024-01-24T00:04:19",
            "name": "[v3,1/7] net/gve: fully expose RSS offload support in dev_info",
            "version": 3,
            "mbox": "http://patchwork.dpdk.org/series/30888/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/136080/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/136080/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "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])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 7E459439AD;\n\tWed, 24 Jan 2024 01:05:13 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id B4D7D41104;\n\tWed, 24 Jan 2024 01:04:46 +0100 (CET)",
            "from mail-pj1-f74.google.com (mail-pj1-f74.google.com\n [209.85.216.74]) by mails.dpdk.org (Postfix) with ESMTP id AFF5E40E78\n for <dev@dpdk.org>; Wed, 24 Jan 2024 01:04:44 +0100 (CET)",
            "by mail-pj1-f74.google.com with SMTP id\n 98e67ed59e1d1-290d095fa7bso1348009a91.1\n for <dev@dpdk.org>; Tue, 23 Jan 2024 16:04:44 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=google.com; s=20230601; t=1706054684; x=1706659484; darn=dpdk.org;\n h=cc:to:from:subject:message-id:references:mime-version:in-reply-to\n :date:from:to:cc:subject:date:message-id:reply-to;\n bh=VyC/NiaVh5uOxiixv+3Q0RS5xeYutZeuIkPTFZgAniw=;\n b=NB2Gvi74fr8QNFnJs8M8kIWGYcy3DSvj12jNI5pLzS905Dl8Gp1qu780RpDsOUAGK9\n tbgUs+rtChPKeh4pdo8BPbb6li2hwLfsOxrDHpmp9jDbzHe5mbkiFKzcoTdkNnjwYhhv\n KbHsao52HmceizVIy8E37Hw1IangkKD/GoH+OyrniLD1iRQ5Wm5tCL7h6vfKoMc2UFxN\n 2PMisfKCVU4JTKJrdPqHvhYhK7kQVTLm1XE+nCKlNIh4feUYSRo2BgJ4kiCFz0OzBWU5\n xTDXLQ3wUvczQxnQD9JYuzgyLZvlWhQkoQHJOET26Bq+ln3QbsXhIlkFr3XhDQJQmui3\n jnxg==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1706054684; x=1706659484;\n h=cc:to:from:subject:message-id:references:mime-version:in-reply-to\n :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n bh=VyC/NiaVh5uOxiixv+3Q0RS5xeYutZeuIkPTFZgAniw=;\n b=tptEtmyB0XJa01+Uns2Q6Hg+xgVyebMy9rd99eItU69P1xyPvyQg7U+UTZ0wcVcK2R\n 2lTJ63kPlKS5QWxXrB84bblpAGZAi+B/6asTt4H51GDUv8eeXfkyNHnNHFksa4haSJud\n tzf01tzTEkI3afAty2eH1jS8ms/YkIYKtUU8IJEa9v21CWX8hHtf82VblSNwb+j4/ZJs\n 6eqH+DyP+Vuc9PaCpV51GS7P9EbOgoGugKr1gmumhun9mbl6Oa6VzmoQ2Vk6AgDI2Kr/\n +5fNRVw30tYD4dMQVXyc7N93QlSnVjKeEYZjo/0Fe31VQ/9FO5Wzd7x0fdmktQHpULiT\n SY+A==",
        "X-Gm-Message-State": "AOJu0Yy4KqN/wpvYie5s4at1C2pJqRK+CwJ5kA6BsvHlmSYwRIofmZeF\n 1yPhT56Mh10+e8j/KXoesSjtqbyWZBvZa6uhKf0U2ULqNYmW5k274MQMJrs3ikI5J+q/8ps/ynn\n EdDgwM0evVg==",
        "X-Google-Smtp-Source": "\n AGHT+IFPe77LQAXc0gbMMTGLlxV9BC4NWS50UWHD7hTwEpF0ILqa9lXvP9r+AOB7+Tik+gtl1m4uBYnyG+R/2g==",
        "X-Received": "from joshwash.sea.corp.google.com\n ([2620:15c:11c:202:b9a2:fa74:abc3:bc47])\n (user=joshwash job=sendgmr) by 2002:a17:90a:1783:b0:290:1a12:738f with SMTP\n id q3-20020a17090a178300b002901a12738fmr36779pja.3.1706054683742; Tue, 23 Jan\n 2024 16:04:43 -0800 (PST)",
        "Date": "Tue, 23 Jan 2024 16:04:22 -0800",
        "In-Reply-To": "<20240124000426.418527-1-joshwash@google.com>",
        "Mime-Version": "1.0",
        "References": "<20240123175831.3219292-1-joshwash@google.com>\n <20240124000426.418527-1-joshwash@google.com>",
        "X-Mailer": "git-send-email 2.43.0.429.g432eaa2c6b-goog",
        "Message-ID": "<20240124000426.418527-5-joshwash@google.com>",
        "Subject": "[PATCH v3 4/7] net/gve: RSS configuration update support",
        "From": "Joshua Washington <joshwash@google.com>",
        "To": "Junfeng Guo <junfeng.guo@intel.com>,\n Jeroen de Borst <jeroendb@google.com>,\n Rushil Gupta <rushilg@google.com>, Joshua Washington <joshwash@google.com>",
        "Cc": "dev@dpdk.org, Ferruh Yigit <ferruh.yigit@amd.com>",
        "Content-Type": "text/plain; charset=\"UTF-8\"",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "This patch adds support for updating the RSS hash key and hash fields\nin the GVE PMD through the implementation of rss_hash_update and\nrss_hash_conf_get.\n\nThe RSS hash key for gVNIC is required to be 40 bytes. On initial\nconfiguration of the RSS hash key, the RSS redirection table will be\nset to a static default, using a round-robin approach for all queues.\nNote, however, that this patch does not include support for setting the\nredirection table explicitly. In dev_configure, if the static\nredirection table has been set, it will be updated to reflect the new\nqueue count, if it has changed.\n\nThe RSS key must be set before any other RSS configuration can happen.\nAs such, an attempt to set the hash types before the key is configured\nwill fail.\n\nSigned-off-by: Joshua Washington <joshwash@google.com>\nReviewed-by: Rushil Gupta <rushilg@google.com>\nReviewed-by: Jeroen de Borst <jeroendb@google.com>\n---\n drivers/net/gve/gve_ethdev.c | 132 ++++++++++++++++++++++++++++++++++-\n drivers/net/gve/gve_ethdev.h |   3 +\n 2 files changed, 133 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/drivers/net/gve/gve_ethdev.c b/drivers/net/gve/gve_ethdev.c\nindex 936ca22cb9..2a68d31808 100644\n--- a/drivers/net/gve/gve_ethdev.c\n+++ b/drivers/net/gve/gve_ethdev.c\n@@ -1,5 +1,6 @@\n /* SPDX-License-Identifier: BSD-3-Clause\n- * Copyright(C) 2022 Intel Corporation\n+ * Copyright(C) 2022-2023 Intel Corporation\n+ * Copyright(C) 2023 Google LLC\n  */\n \n #include \"gve_ethdev.h\"\n@@ -8,6 +9,7 @@\n #include \"base/gve_osdep.h\"\n #include \"gve_version.h\"\n #include \"rte_ether.h\"\n+#include \"gve_rss.h\"\n \n static void\n gve_write_version(uint8_t *driver_version_register)\n@@ -88,12 +90,31 @@ gve_dev_configure(struct rte_eth_dev *dev)\n {\n \tstruct gve_priv *priv = dev->data->dev_private;\n \n-\tif (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)\n+\tif (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {\n \t\tdev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;\n+\t\tpriv->rss_config.alg = GVE_RSS_HASH_TOEPLITZ;\n+\t}\n \n \tif (dev->data->dev_conf.rxmode.offloads & RTE_ETH_RX_OFFLOAD_TCP_LRO)\n \t\tpriv->enable_rsc = 1;\n \n+\t/* Reset RSS RETA in case number of queues changed. */\n+\tif (priv->rss_config.indir) {\n+\t\tstruct gve_rss_config update_reta_config;\n+\t\tgve_init_rss_config_from_priv(priv, &update_reta_config);\n+\t\tgve_generate_rss_reta(dev, &update_reta_config);\n+\n+\t\tint err = gve_adminq_configure_rss(priv, &update_reta_config);\n+\t\tif (err)\n+\t\t\tPMD_DRV_LOG(ERR,\n+\t\t\t\t\"Could not reconfigure RSS redirection table.\");\n+\t\telse\n+\t\t\tgve_update_priv_rss_config(priv, &update_reta_config);\n+\n+\t\tgve_free_rss_config(&update_reta_config);\n+\t\treturn err;\n+\t}\n+\n \treturn 0;\n }\n \n@@ -443,6 +464,8 @@ gve_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n \t};\n \n \tdev_info->flow_type_rss_offloads = GVE_RTE_RSS_OFFLOAD_ALL;\n+\tdev_info->hash_key_size = GVE_RSS_HASH_KEY_SIZE;\n+\tdev_info->reta_size = GVE_RSS_INDIR_SIZE;\n \n \treturn 0;\n }\n@@ -646,6 +669,107 @@ gve_xstats_get_names(struct rte_eth_dev *dev,\n \treturn count;\n }\n \n+\n+static int\n+gve_rss_hash_update(struct rte_eth_dev *dev,\n+\t\t\tstruct rte_eth_rss_conf *rss_conf)\n+{\n+\tstruct gve_priv *priv = dev->data->dev_private;\n+\tstruct gve_rss_config gve_rss_conf;\n+\tint rss_reta_size;\n+\tint err;\n+\n+\tif (gve_validate_rss_hf(rss_conf->rss_hf)) {\n+\t\tPMD_DRV_LOG(ERR, \"Unsupported hash function.\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (rss_conf->algorithm != RTE_ETH_HASH_FUNCTION_TOEPLITZ &&\n+\t\trss_conf->algorithm != RTE_ETH_HASH_FUNCTION_DEFAULT) {\n+\t\tPMD_DRV_LOG(ERR, \"Device only supports Toeplitz algorithm.\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (rss_conf->rss_key_len) {\n+\t\tif (rss_conf->rss_key_len != GVE_RSS_HASH_KEY_SIZE) {\n+\t\t\tPMD_DRV_LOG(ERR,\n+\t\t\t\t\"Invalid hash key size. Only RSS hash key size \"\n+\t\t\t\t\"of %u supported\", GVE_RSS_HASH_KEY_SIZE);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\n+\t\tif (!rss_conf->rss_key) {\n+\t\t\tPMD_DRV_LOG(ERR, \"RSS key must be non-null.\");\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t} else {\n+\t\tif (!priv->rss_config.key_size) {\n+\t\t\tPMD_DRV_LOG(ERR, \"RSS key must be initialized before \"\n+\t\t\t\t\"any other configuration.\");\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t\trss_conf->rss_key_len = priv->rss_config.key_size;\n+\t}\n+\n+\trss_reta_size = priv->rss_config.indir ?\n+\t\t\tpriv->rss_config.indir_size :\n+\t\t\tGVE_RSS_INDIR_SIZE;\n+\terr = gve_init_rss_config(&gve_rss_conf, rss_conf->rss_key_len,\n+\t\trss_reta_size);\n+\tif (err)\n+\t\treturn err;\n+\n+\tgve_rss_conf.alg = GVE_RSS_HASH_TOEPLITZ;\n+\terr = gve_update_rss_hash_types(priv, &gve_rss_conf, rss_conf);\n+\tif (err)\n+\t\tgoto err;\n+\terr = gve_update_rss_key(priv, &gve_rss_conf, rss_conf);\n+\tif (err)\n+\t\tgoto err;\n+\n+\t/* Set redirection table to default or preexisting. */\n+\tif (!priv->rss_config.indir)\n+\t\tgve_generate_rss_reta(dev, &gve_rss_conf);\n+\telse\n+\t\tmemcpy(gve_rss_conf.indir, priv->rss_config.indir,\n+\t\t\tgve_rss_conf.indir_size * sizeof(*priv->rss_config.indir));\n+\n+\terr = gve_adminq_configure_rss(priv, &gve_rss_conf);\n+\tif (!err)\n+\t\tgve_update_priv_rss_config(priv, &gve_rss_conf);\n+\n+err:\n+\tgve_free_rss_config(&gve_rss_conf);\n+\treturn err;\n+}\n+\n+static int\n+gve_rss_hash_conf_get(struct rte_eth_dev *dev,\n+\t\t\tstruct rte_eth_rss_conf *rss_conf)\n+{\n+\tstruct gve_priv *priv = dev->data->dev_private;\n+\n+\tif (!(dev->data->dev_conf.rxmode.offloads &\n+\t\t\tRTE_ETH_RX_OFFLOAD_RSS_HASH)) {\n+\t\tPMD_DRV_LOG(ERR, \"RSS not configured.\");\n+\t\treturn -ENOTSUP;\n+\t}\n+\n+\n+\tgve_to_rte_rss_hf(priv->rss_config.hash_types, rss_conf);\n+\trss_conf->rss_key_len = priv->rss_config.key_size;\n+\tif (rss_conf->rss_key) {\n+\t\tif (!priv->rss_config.key) {\n+\t\t\tPMD_DRV_LOG(ERR, \"Unable to retrieve default RSS hash key.\");\n+\t\t\treturn -ENOTSUP;\n+\t\t}\n+\t\tmemcpy(rss_conf->rss_key, priv->rss_config.key,\n+\t\t\trss_conf->rss_key_len * sizeof(*rss_conf->rss_key));\n+\t}\n+\n+\treturn 0;\n+}\n+\n static const struct eth_dev_ops gve_eth_dev_ops = {\n \t.dev_configure        = gve_dev_configure,\n \t.dev_start            = gve_dev_start,\n@@ -666,6 +790,8 @@ static const struct eth_dev_ops gve_eth_dev_ops = {\n \t.mtu_set              = gve_dev_mtu_set,\n \t.xstats_get           = gve_xstats_get,\n \t.xstats_get_names     = gve_xstats_get_names,\n+\t.rss_hash_update      = gve_rss_hash_update,\n+\t.rss_hash_conf_get    = gve_rss_hash_conf_get,\n };\n \n static const struct eth_dev_ops gve_eth_dev_ops_dqo = {\n@@ -688,6 +814,8 @@ static const struct eth_dev_ops gve_eth_dev_ops_dqo = {\n \t.mtu_set              = gve_dev_mtu_set,\n \t.xstats_get           = gve_xstats_get,\n \t.xstats_get_names     = gve_xstats_get_names,\n+\t.rss_hash_update      = gve_rss_hash_update,\n+\t.rss_hash_conf_get    = gve_rss_hash_conf_get,\n };\n \n static void\ndiff --git a/drivers/net/gve/gve_ethdev.h b/drivers/net/gve/gve_ethdev.h\nindex bc486cb941..d713657d10 100644\n--- a/drivers/net/gve/gve_ethdev.h\n+++ b/drivers/net/gve/gve_ethdev.h\n@@ -29,6 +29,9 @@\n #define GVE_RX_MIN_BUF_SIZE_GQI    2048\n #define GVE_RX_MAX_BUF_SIZE_GQI    4096\n \n+#define GVE_RSS_HASH_KEY_SIZE 40\n+#define GVE_RSS_INDIR_SIZE 128\n+\n #define GVE_TX_CKSUM_OFFLOAD_MASK (\t\t\\\n \t\tRTE_MBUF_F_TX_L4_MASK  |\t\\\n \t\tRTE_MBUF_F_TX_TCP_SEG)\n",
    "prefixes": [
        "v3",
        "4/7"
    ]
}