get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 72048,
    "url": "http://patches.dpdk.org/api/patches/72048/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200624020939.38262-1-junyux.jiang@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.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": "<20200624020939.38262-1-junyux.jiang@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200624020939.38262-1-junyux.jiang@intel.com",
    "date": "2020-06-24T02:09:39",
    "name": "[v4] net/ice: initialize and update RSS based on user request",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "7a6c45d9825c51cf9ad7d85aedba3a4e35909fbc",
    "submitter": {
        "id": 1408,
        "url": "http://patches.dpdk.org/api/people/1408/?format=api",
        "name": "Junyu Jiang",
        "email": "junyux.jiang@intel.com"
    },
    "delegate": {
        "id": 1540,
        "url": "http://patches.dpdk.org/api/users/1540/?format=api",
        "username": "qzhan15",
        "first_name": "Qi",
        "last_name": "Zhang",
        "email": "qi.z.zhang@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200624020939.38262-1-junyux.jiang@intel.com/mbox/",
    "series": [
        {
            "id": 10576,
            "url": "http://patches.dpdk.org/api/series/10576/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=10576",
            "date": "2020-06-24T02:09:39",
            "name": "[v4] net/ice: initialize and update RSS based on user request",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/10576/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/72048/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/72048/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 355E9A0350;\n\tWed, 24 Jun 2020 04:25:19 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 754E41D6F8;\n\tWed, 24 Jun 2020 04:25:18 +0200 (CEST)",
            "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n by dpdk.org (Postfix) with ESMTP id 7B6D51D6F6\n for <dev@dpdk.org>; Wed, 24 Jun 2020 04:25:16 +0200 (CEST)",
            "from orsmga002.jf.intel.com ([10.7.209.21])\n by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 23 Jun 2020 19:25:15 -0700",
            "from intel.sh.intel.com ([10.239.255.48])\n by orsmga002.jf.intel.com with ESMTP; 23 Jun 2020 19:25:10 -0700"
        ],
        "IronPort-SDR": [
            "\n tWaQD3KNKyRrIm2Jh9QdB1fHTwnhY+mNypNtN58fJKwbnzSUFgtgOlOwCeOv+HvpqjYlKQkzOf\n 87beRu12tdrg==",
            "\n d9RbqAa2DbTizvKo2AKKBbCC9bRc71+HwDU78fvGZfs0K6my2ZiJKlQ0qGMGH4ncAoNRgpQUYX\n plXbpmRRic+w=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9661\"; a=\"132714246\"",
            "E=Sophos;i=\"5.75,273,1589266800\"; d=\"scan'208\";a=\"132714246\"",
            "E=Sophos;i=\"5.75,273,1589266800\"; d=\"scan'208\";a=\"293398131\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "Junyu Jiang <junyux.jiang@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "Qi Zhang <qi.z.zhang@intel.com>, Qiming Yang <qiming.yang@intel.com>,\n simei.su@intel.com, Junyu Jiang <junyux.jiang@intel.com>",
        "Date": "Wed, 24 Jun 2020 02:09:39 +0000",
        "Message-Id": "<20200624020939.38262-1-junyux.jiang@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20200610063355.35172-1-junyux.jiang@intel.com>",
        "References": "<20200610063355.35172-1-junyux.jiang@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v4] net/ice: initialize and update RSS based on\n\tuser request",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "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",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Initialize and update RSS configure based on user request\n(rte_eth_rss_conf) from dev_configure and .rss_hash_update ops.\nAll previous default configure has been removed.\n\nSigned-off-by: Junyu Jiang <junyux.jiang@intel.com>\n\n---\nv3->v4:\nchange the return value to success when rss_hf value update to 0.\n\nv2->v3:\nchange the commit log\nSeparate ipv4 and ipv6\nRemove the call of ice_rem_vsi_rss_cfg()\n\nv1->v2:\nremove gtpu and pppoe/pppod configuration from rss init\n---\n drivers/net/ice/ice_ethdev.c | 169 +++++++++++++++++++++--------------\n drivers/net/ice/ice_ethdev.h |   2 +\n 2 files changed, 104 insertions(+), 67 deletions(-)",
    "diff": "diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c\nindex 5a89a1955..7db8b35fd 100644\n--- a/drivers/net/ice/ice_ethdev.c\n+++ b/drivers/net/ice/ice_ethdev.c\n@@ -2441,6 +2441,100 @@ ice_dev_uninit(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n+static void\n+ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf)\n+{\n+\tstruct ice_hw *hw = ICE_PF_TO_HW(pf);\n+\tstruct ice_vsi *vsi = pf->main_vsi;\n+\tint ret;\n+\n+\t/* Configure RSS for IPv4 with src/dst addr as input set */\n+\tif (rss_hf & ETH_RSS_IPV4) {\n+\t\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV4,\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV4 |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV_OTHER, 0);\n+\t\tif (ret)\n+\t\t\tPMD_DRV_LOG(ERR, \"%s IPV4 rss flow fail %d\",\n+\t\t\t\t    __func__, ret);\n+\t}\n+\n+\t/* Configure RSS for IPv6 with src/dst addr as input set */\n+\tif (rss_hf & ETH_RSS_IPV6) {\n+\t\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV6,\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV6 |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV_OTHER, 0);\n+\t\tif (ret)\n+\t\t\tPMD_DRV_LOG(ERR, \"%s IPV6 rss flow fail %d\",\n+\t\t\t\t    __func__, ret);\n+\t}\n+\n+\t/* Configure RSS for udp4 with src/dst addr and port as input set */\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV4_UDP) {\n+\t\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_UDP_IPV4,\n+\t\t\t\t      ICE_FLOW_SEG_HDR_UDP |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV4 |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV_OTHER, 0);\n+\t\tif (ret)\n+\t\t\tPMD_DRV_LOG(ERR, \"%s UDP_IPV4 rss flow fail %d\",\n+\t\t\t\t    __func__, ret);\n+\t}\n+\n+\t/* Configure RSS for udp6 with src/dst addr and port as input set */\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV6_UDP) {\n+\t\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_UDP_IPV6,\n+\t\t\t\t      ICE_FLOW_SEG_HDR_UDP |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV6 |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV_OTHER, 0);\n+\t\tif (ret)\n+\t\t\tPMD_DRV_LOG(ERR, \"%s UDP_IPV6 rss flow fail %d\",\n+\t\t\t\t    __func__, ret);\n+\t}\n+\n+\t/* Configure RSS for tcp4 with src/dst addr and port as input set */\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV4_TCP) {\n+\t\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_TCP_IPV4,\n+\t\t\t\t      ICE_FLOW_SEG_HDR_TCP |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV4 |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV_OTHER, 0);\n+\t\tif (ret)\n+\t\t\tPMD_DRV_LOG(ERR, \"%s TCP_IPV4 rss flow fail %d\",\n+\t\t\t\t    __func__, ret);\n+\t}\n+\n+\t/* Configure RSS for tcp6 with src/dst addr and port as input set */\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV6_TCP) {\n+\t\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_TCP_IPV6,\n+\t\t\t\t      ICE_FLOW_SEG_HDR_TCP |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV6 |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV_OTHER, 0);\n+\t\tif (ret)\n+\t\t\tPMD_DRV_LOG(ERR, \"%s TCP_IPV6 rss flow fail %d\",\n+\t\t\t\t    __func__, ret);\n+\t}\n+\n+\t/* Configure RSS for sctp4 with src/dst addr and port as input set */\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV4_SCTP) {\n+\t\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV4,\n+\t\t\t\t      ICE_FLOW_SEG_HDR_SCTP |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV4 |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV_OTHER, 0);\n+\t\tif (ret)\n+\t\t\tPMD_DRV_LOG(ERR, \"%s SCTP_IPV4 rss flow fail %d\",\n+\t\t\t\t    __func__, ret);\n+\t}\n+\n+\t/* Configure RSS for sctp6 with src/dst addr and port as input set */\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV6_SCTP) {\n+\t\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV6,\n+\t\t\t\t      ICE_FLOW_SEG_HDR_SCTP |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV6 |\n+\t\t\t\t      ICE_FLOW_SEG_HDR_IPV_OTHER, 0);\n+\t\tif (ret)\n+\t\t\tPMD_DRV_LOG(ERR, \"%s SCTP_IPV6 rss flow fail %d\",\n+\t\t\t\t    __func__, ret);\n+\t}\n+}\n+\n static int ice_init_rss(struct ice_pf *pf)\n {\n \tstruct ice_hw *hw = ICE_PF_TO_HW(pf);\n@@ -2501,72 +2595,8 @@ static int ice_init_rss(struct ice_pf *pf)\n \t\t(1 << VSIQF_HASH_CTL_HASH_SCHEME_S);\n \tICE_WRITE_REG(hw, VSIQF_HASH_CTL(vsi->vsi_id), reg);\n \n-\t/* configure RSS for IPv4 with input set IPv4 src/dst */\n-\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV4,\n-\t\t\t      ICE_FLOW_SEG_HDR_IPV4, 0);\n-\tif (ret)\n-\t\tPMD_DRV_LOG(ERR, \"%s IPV4 rss flow fail %d\", __func__, ret);\n-\n-\t/* configure RSS for IPv6 with input set IPv6 src/dst */\n-\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV6,\n-\t\t\t      ICE_FLOW_SEG_HDR_IPV6, 0);\n-\tif (ret)\n-\t\tPMD_DRV_LOG(ERR, \"%s IPV6 rss flow fail %d\", __func__, ret);\n-\n-\t/* configure RSS for tcp6 with input set IPv6 src/dst, TCP src/dst */\n-\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_TCP_IPV6,\n-\t\t\t      ICE_FLOW_SEG_HDR_TCP | ICE_FLOW_SEG_HDR_IPV6, 0);\n-\tif (ret)\n-\t\tPMD_DRV_LOG(ERR, \"%s TCP_IPV6 rss flow fail %d\", __func__, ret);\n-\n-\t/* configure RSS for udp6 with input set IPv6 src/dst, UDP src/dst */\n-\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_UDP_IPV6,\n-\t\t\t      ICE_FLOW_SEG_HDR_UDP | ICE_FLOW_SEG_HDR_IPV6, 0);\n-\tif (ret)\n-\t\tPMD_DRV_LOG(ERR, \"%s UDP_IPV6 rss flow fail %d\", __func__, ret);\n-\n-\t/* configure RSS for sctp6 with input set IPv6 src/dst */\n-\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV6,\n-\t\t\t      ICE_FLOW_SEG_HDR_SCTP | ICE_FLOW_SEG_HDR_IPV6, 0);\n-\tif (ret)\n-\t\tPMD_DRV_LOG(ERR, \"%s SCTP_IPV6 rss flow fail %d\",\n-\t\t\t\t__func__, ret);\n-\n-\t/* configure RSS for tcp4 with input set IP src/dst, TCP src/dst */\n-\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_TCP_IPV4,\n-\t\t\t      ICE_FLOW_SEG_HDR_TCP | ICE_FLOW_SEG_HDR_IPV4, 0);\n-\tif (ret)\n-\t\tPMD_DRV_LOG(ERR, \"%s TCP_IPV4 rss flow fail %d\", __func__, ret);\n-\n-\t/* configure RSS for udp4 with input set IP src/dst, UDP src/dst */\n-\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_UDP_IPV4,\n-\t\t\t      ICE_FLOW_SEG_HDR_UDP | ICE_FLOW_SEG_HDR_IPV4, 0);\n-\tif (ret)\n-\t\tPMD_DRV_LOG(ERR, \"%s UDP_IPV4 rss flow fail %d\", __func__, ret);\n-\n-\t/* configure RSS for sctp4 with input set IP src/dst */\n-\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV4,\n-\t\t\t      ICE_FLOW_SEG_HDR_SCTP | ICE_FLOW_SEG_HDR_IPV4, 0);\n-\tif (ret)\n-\t\tPMD_DRV_LOG(ERR, \"%s SCTP_IPV4 rss flow fail %d\",\n-\t\t\t\t__func__, ret);\n-\n-\t/* configure RSS for gtpu with input set TEID */\n-\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_GTP_U_IPV4_TEID,\n-\t\t\t\tICE_FLOW_SEG_HDR_GTPU_IP, 0);\n-\tif (ret)\n-\t\tPMD_DRV_LOG(ERR, \"%s GTPU_TEID rss flow fail %d\",\n-\t\t\t\t__func__, ret);\n-\n-\t/**\n-\t * configure RSS for pppoe/pppod with input set\n-\t * Source MAC and Session ID\n-\t */\n-\tret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_PPPOE_SESS_ID_ETH,\n-\t\t\t\tICE_FLOW_SEG_HDR_PPPOE, 0);\n-\tif (ret)\n-\t\tPMD_DRV_LOG(ERR, \"%s PPPoE/PPPoD_SessionID rss flow fail %d\",\n-\t\t\t\t__func__, ret);\n+\t/* RSS hash configuration */\n+\tice_rss_hash_set(pf, rss_conf->rss_hf);\n \n \treturn 0;\n }\n@@ -3687,7 +3717,12 @@ ice_rss_hash_update(struct rte_eth_dev *dev,\n \tif (status)\n \t\treturn status;\n \n-\t/* TODO: hash enable config, ice_add_rss_cfg */\n+\tif (rss_conf->rss_hf == 0)\n+\t\treturn 0;\n+\n+\t/* RSS hash configuration */\n+\tice_rss_hash_set(pf, rss_conf->rss_hf);\n+\n \treturn 0;\n }\n \ndiff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h\nindex f88f9dd9f..2bff735ca 100644\n--- a/drivers/net/ice/ice_ethdev.h\n+++ b/drivers/net/ice/ice_ethdev.h\n@@ -112,11 +112,13 @@\n \t\t       ICE_FLAG_VF_MAC_BY_PF)\n \n #define ICE_RSS_OFFLOAD_ALL ( \\\n+\tETH_RSS_IPV4 | \\\n \tETH_RSS_FRAG_IPV4 | \\\n \tETH_RSS_NONFRAG_IPV4_TCP | \\\n \tETH_RSS_NONFRAG_IPV4_UDP | \\\n \tETH_RSS_NONFRAG_IPV4_SCTP | \\\n \tETH_RSS_NONFRAG_IPV4_OTHER | \\\n+\tETH_RSS_IPV6 | \\\n \tETH_RSS_FRAG_IPV6 | \\\n \tETH_RSS_NONFRAG_IPV6_TCP | \\\n \tETH_RSS_NONFRAG_IPV6_UDP | \\\n",
    "prefixes": [
        "v4"
    ]
}