get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 41313,
    "url": "http://patches.dpdk.org/api/patches/41313/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180620150122.45945-1-ferruh.yigit@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": "<20180620150122.45945-1-ferruh.yigit@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180620150122.45945-1-ferruh.yigit@intel.com",
    "date": "2018-06-20T15:01:22",
    "name": "examples: fix RSS hash function configuration",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "5316898ec5e126bad74c2a9c038b2e908defcb5d",
    "submitter": {
        "id": 324,
        "url": "http://patches.dpdk.org/api/people/324/?format=api",
        "name": "Ferruh Yigit",
        "email": "ferruh.yigit@intel.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20180620150122.45945-1-ferruh.yigit@intel.com/mbox/",
    "series": [
        {
            "id": 181,
            "url": "http://patches.dpdk.org/api/series/181/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=181",
            "date": "2018-06-20T15:01:22",
            "name": "examples: fix RSS hash function configuration",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/181/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/41313/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/41313/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id C0A141B525;\n\tWed, 20 Jun 2018 16:01:53 +0200 (CEST)",
            "from mga14.intel.com (mga14.intel.com [192.55.52.115])\n\tby dpdk.org (Postfix) with ESMTP id 25A721B449\n\tfor <dev@dpdk.org>; Wed, 20 Jun 2018 16:01:51 +0200 (CEST)",
            "from orsmga003.jf.intel.com ([10.7.209.27])\n\tby fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t20 Jun 2018 07:01:50 -0700",
            "from silpixa00399752.ir.intel.com (HELO\n\tsilpixa00399752.ger.corp.intel.com) ([10.237.222.212])\n\tby orsmga003.jf.intel.com with ESMTP; 20 Jun 2018 07:01:45 -0700"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.51,247,1526367600\"; d=\"scan'208\";a=\"60799512\"",
        "From": "Ferruh Yigit <ferruh.yigit@intel.com>",
        "To": "Declan Doherty <declan.doherty@intel.com>, Chas Williams <chas3@att.com>,\n\tBruce Richardson <bruce.richardson@intel.com>,\n\tDavid Hunt <david.hunt@intel.com>,\n\tHarry van Haaren <harry.van.haaren@intel.com>,\n\tCristian Dumitrescu <cristian.dumitrescu@intel.com>,\n\tKonstantin Ananyev <konstantin.ananyev@intel.com>,\n\tRemy Horton <remy.horton@intel.com>, Ori Kam <orika@mellanox.com>,\n\tPablo de Lara <pablo.de.lara.guarch@intel.com>,\n\tRadu Nicolau <radu.nicolau@intel.com>,\n\tAkhil Goyal <akhil.goyal@nxp.com>, \n\tTomasz Kantecki <tomasz.kantecki@intel.com>,\n\tAnatoly Burakov <anatoly.burakov@intel.com>,\n\tJohn McNamara <john.mcnamara@intel.com>,\n\tJijiang Liu <jijiang.liu@intel.com>",
        "Cc": "dev@dpdk.org, Ferruh Yigit <ferruh.yigit@intel.com>,\n\tLiang Ma <liang.j.ma@intel.com>, Xueming Li <xuemingl@mellanox.com>",
        "Date": "Wed, 20 Jun 2018 16:01:22 +0100",
        "Message-Id": "<20180620150122.45945-1-ferruh.yigit@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "Subject": "[dpdk-dev] [PATCH] examples: fix RSS hash function configuration",
        "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\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "ethdev layer introduced checks for application requested RSS hash\nfunctions and returns error for ones unsupported by hardware\n\nThis check breaks some sample applications which blindly configures\nRSS hash functions without checking underlying hardware support.\n\nUpdated examples to mask out unsupported RSS has functions during device\nconfiguration.\nPrints a log if configuration values updated by this check.\n\nFixes: aa1a6d87f15d (\"ethdev: force RSS offload rules again\")\n\nSigned-off-by: Ferruh Yigit <ferruh.yigit@intel.com>\n---\nReturn error added in this release, so no need to backport the fix to\nprevious versions.\n\nCc: David Hunt <david.hunt@intel.com>\nCc: Liang Ma <liang.j.ma@intel.com>\nCc: Xueming Li <xuemingl@mellanox.com>\n---\n examples/bond/main.c                          | 12 ++++++++++\n examples/distributor/main.c                   | 11 ++++++++++\n examples/eventdev_pipeline/main.c             | 11 ++++++++++\n examples/ip_pipeline/link.c                   |  8 +++++--\n examples/ip_reassembly/main.c                 | 12 ++++++++++\n examples/ipsec-secgw/ipsec-secgw.c            | 12 ++++++++++\n examples/l3fwd-acl/main.c                     | 12 ++++++++++\n examples/l3fwd-power/main.c                   | 14 ++++++++++--\n examples/l3fwd-vf/main.c                      | 12 ++++++++++\n examples/l3fwd/main.c                         | 12 ++++++++++\n examples/load_balancer/init.c                 | 12 ++++++++++\n examples/multi_process/symmetric_mp/main.c    | 12 ++++++++++\n .../performance-thread/l3fwd-thread/main.c    | 12 ++++++++++\n examples/qos_meter/main.c                     | 22 +++++++++++++++++++\n examples/vmdq_dcb/main.c                      | 13 +++++++++++\n 15 files changed, 183 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/examples/bond/main.c b/examples/bond/main.c\nindex 65e0edd25..7d506feb2 100644\n--- a/examples/bond/main.c\n+++ b/examples/bond/main.c\n@@ -154,6 +154,18 @@ slave_port_init(uint16_t portid, struct rte_mempool *mbuf_pool)\n \tif (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\tlocal_port_conf.txmode.offloads |=\n \t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf &=\n+\t\tdev_info.flow_type_rss_offloads;\n+\tif (local_port_conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf) {\n+\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\tportid,\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t}\n+\n \tretval = rte_eth_dev_configure(portid, 1, 1, &local_port_conf);\n \tif (retval != 0)\n \t\trte_exit(EXIT_FAILURE, \"port %u: configuration failed (res=%d)\\n\",\ndiff --git a/examples/distributor/main.c b/examples/distributor/main.c\nindex 2c5936489..4dd69faab 100644\n--- a/examples/distributor/main.c\n+++ b/examples/distributor/main.c\n@@ -124,6 +124,17 @@ port_init(uint16_t port, struct rte_mempool *mbuf_pool)\n \t\tport_conf.txmode.offloads |=\n \t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n \n+\tport_conf.rx_adv_conf.rss_conf.rss_hf &=\n+\t\tdev_info.flow_type_rss_offloads;\n+\tif (port_conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\tport_conf_default.rx_adv_conf.rss_conf.rss_hf) {\n+\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\tport,\n+\t\t\tport_conf_default.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t}\n+\n \tretval = rte_eth_dev_configure(port, rxRings, txRings, &port_conf);\n \tif (retval != 0)\n \t\treturn retval;\ndiff --git a/examples/eventdev_pipeline/main.c b/examples/eventdev_pipeline/main.c\nindex b698e4ca2..2af430206 100644\n--- a/examples/eventdev_pipeline/main.c\n+++ b/examples/eventdev_pipeline/main.c\n@@ -293,6 +293,17 @@ port_init(uint8_t port, struct rte_mempool *mbuf_pool)\n \t\tport_conf.txmode.offloads |=\n \t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n \n+\tport_conf.rx_adv_conf.rss_conf.rss_hf &=\n+\t\tdev_info.flow_type_rss_offloads;\n+\tif (port_conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\tport_conf_default.rx_adv_conf.rss_conf.rss_hf) {\n+\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\tport,\n+\t\t\tport_conf_default.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t}\n+\n \t/* Configure the Ethernet device. */\n \tretval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);\n \tif (retval != 0)\ndiff --git a/examples/ip_pipeline/link.c b/examples/ip_pipeline/link.c\nindex b8a431f3e..31d8cd332 100644\n--- a/examples/ip_pipeline/link.c\n+++ b/examples/ip_pipeline/link.c\n@@ -161,8 +161,12 @@ link_create(const char *name, struct link_params *params)\n \tmemcpy(&port_conf, &port_conf_default, sizeof(port_conf));\n \tif (rss) {\n \t\tport_conf.rxmode.mq_mode = ETH_MQ_RX_RSS;\n-\t\tport_conf.rx_adv_conf.rss_conf.rss_hf =\n-\t\t\tETH_RSS_IPV4 | ETH_RSS_IPV6;\n+\t\tif (port_info.flow_type_rss_offloads & ETH_RSS_IPV4)\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf |=\n+\t\t\t\tETH_RSS_IPV4;\n+\t\tif (port_info.flow_type_rss_offloads & ETH_RSS_IPV6)\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf |=\n+\t\t\t\tETH_RSS_IPV6;\n \t}\n \n \tcpu_id = (uint32_t) rte_eth_dev_socket_id(port_id);\ndiff --git a/examples/ip_reassembly/main.c b/examples/ip_reassembly/main.c\nindex 3e8e79c21..ccef5a6af 100644\n--- a/examples/ip_reassembly/main.c\n+++ b/examples/ip_reassembly/main.c\n@@ -1083,6 +1083,18 @@ main(int argc, char **argv)\n \t\tif (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\t\tlocal_port_conf.txmode.offloads |=\n \t\t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf &=\n+\t\t\tdev_info.flow_type_rss_offloads;\n+\t\tif (local_port_conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf) {\n+\t\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\t\tportid,\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t\t}\n+\n \t\tret = rte_eth_dev_configure(portid, 1, (uint16_t)n_tx_queue,\n \t\t\t\t\t    &local_port_conf);\n \t\tif (ret < 0) {\ndiff --git a/examples/ipsec-secgw/ipsec-secgw.c b/examples/ipsec-secgw/ipsec-secgw.c\nindex a5da8b280..8bd38882e 100644\n--- a/examples/ipsec-secgw/ipsec-secgw.c\n+++ b/examples/ipsec-secgw/ipsec-secgw.c\n@@ -1566,6 +1566,18 @@ port_init(uint16_t portid)\n \tif (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\tlocal_port_conf.txmode.offloads |=\n \t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf &=\n+\t\tdev_info.flow_type_rss_offloads;\n+\tif (local_port_conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf) {\n+\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\tportid,\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t}\n+\n \tret = rte_eth_dev_configure(portid, nb_rx_queue, nb_tx_queue,\n \t\t\t&local_port_conf);\n \tif (ret < 0)\ndiff --git a/examples/l3fwd-acl/main.c b/examples/l3fwd-acl/main.c\nindex 33ad467d3..fa12bb894 100644\n--- a/examples/l3fwd-acl/main.c\n+++ b/examples/l3fwd-acl/main.c\n@@ -1926,6 +1926,18 @@ main(int argc, char **argv)\n \t\tif (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\t\tlocal_port_conf.txmode.offloads |=\n \t\t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf &=\n+\t\t\tdev_info.flow_type_rss_offloads;\n+\t\tif (local_port_conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf) {\n+\t\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\t\tportid,\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t\t}\n+\n \t\tret = rte_eth_dev_configure(portid, nb_rx_queue,\n \t\t\t\t\t(uint16_t)n_tx_queue, &local_port_conf);\n \t\tif (ret < 0)\ndiff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c\nindex 596d64548..e1c2e4ae0 100644\n--- a/examples/l3fwd-power/main.c\n+++ b/examples/l3fwd-power/main.c\n@@ -185,8 +185,6 @@ static struct rte_eth_conf port_conf = {\n \t\t.max_rx_pkt_len = ETHER_MAX_LEN,\n \t\t.split_hdr_size = 0,\n \t\t.ignore_offload_bitfield = 1,\n-\t\t.offloads = (DEV_RX_OFFLOAD_CRC_STRIP |\n-\t\t\t     DEV_RX_OFFLOAD_CHECKSUM),\n \t},\n \t.rx_adv_conf = {\n \t\t.rss_conf = {\n@@ -1693,6 +1691,18 @@ main(int argc, char **argv)\n \t\tif (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\t\tlocal_port_conf.txmode.offloads |=\n \t\t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf &=\n+\t\t\tdev_info.flow_type_rss_offloads;\n+\t\tif (local_port_conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf) {\n+\t\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\t\tportid,\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t\t}\n+\n \t\tret = rte_eth_dev_configure(portid, nb_rx_queue,\n \t\t\t\t\t(uint16_t)n_tx_queue, &local_port_conf);\n \t\tif (ret < 0)\ndiff --git a/examples/l3fwd-vf/main.c b/examples/l3fwd-vf/main.c\nindex aaafb7bc2..a01f70cb5 100644\n--- a/examples/l3fwd-vf/main.c\n+++ b/examples/l3fwd-vf/main.c\n@@ -981,6 +981,18 @@ main(int argc, char **argv)\n \t\tif (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\t\tlocal_port_conf.txmode.offloads |=\n \t\t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf &=\n+\t\t\tdev_info.flow_type_rss_offloads;\n+\t\tif (local_port_conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf) {\n+\t\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\t\tportid,\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t\t}\n+\n \t\tret = rte_eth_dev_configure(portid, nb_rx_queue,\n \t\t\t\t\t    n_tx_queue, &local_port_conf);\n \t\tif (ret < 0)\ndiff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c\nindex bf7dbd814..2ca0fcdaa 100644\n--- a/examples/l3fwd/main.c\n+++ b/examples/l3fwd/main.c\n@@ -861,6 +861,18 @@ main(int argc, char **argv)\n \t\tif (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\t\tlocal_port_conf.txmode.offloads |=\n \t\t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf &=\n+\t\t\tdev_info.flow_type_rss_offloads;\n+\t\tif (local_port_conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf) {\n+\t\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\t\tportid,\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t\t}\n+\n \t\tret = rte_eth_dev_configure(portid, nb_rx_queue,\n \t\t\t\t\t(uint16_t)n_tx_queue, &local_port_conf);\n \t\tif (ret < 0)\ndiff --git a/examples/load_balancer/init.c b/examples/load_balancer/init.c\nindex 8d8dbe61e..7d019da30 100644\n--- a/examples/load_balancer/init.c\n+++ b/examples/load_balancer/init.c\n@@ -417,6 +417,18 @@ app_init_nics(void)\n \t\tif (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\t\tlocal_port_conf.txmode.offloads |=\n \t\t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf &=\n+\t\t\tdev_info.flow_type_rss_offloads;\n+\t\tif (local_port_conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf) {\n+\t\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\t\tport,\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t\t}\n+\n \t\tret = rte_eth_dev_configure(\n \t\t\tport,\n \t\t\t(uint8_t) n_rx_queues,\ndiff --git a/examples/multi_process/symmetric_mp/main.c b/examples/multi_process/symmetric_mp/main.c\nindex 16f21a187..2ea3e7a7a 100644\n--- a/examples/multi_process/symmetric_mp/main.c\n+++ b/examples/multi_process/symmetric_mp/main.c\n@@ -200,6 +200,7 @@ smp_port_init(uint16_t port, struct rte_mempool *mbuf_pool,\n \tuint16_t q;\n \tuint16_t nb_rxd = RX_RING_SIZE;\n \tuint16_t nb_txd = TX_RING_SIZE;\n+\tuint64_t rss_hf_tmp;\n \n \tif (rte_eal_process_type() == RTE_PROC_SECONDARY)\n \t\treturn 0;\n@@ -216,6 +217,17 @@ smp_port_init(uint16_t port, struct rte_mempool *mbuf_pool,\n \tif (info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\tport_conf.txmode.offloads |=\n \t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\trss_hf_tmp = port_conf.rx_adv_conf.rss_conf.rss_hf;\n+\tport_conf.rx_adv_conf.rss_conf.rss_hf &= info.flow_type_rss_offloads;\n+\tif (port_conf.rx_adv_conf.rss_conf.rss_hf != rss_hf_tmp) {\n+\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\tport,\n+\t\t\trss_hf_tmp,\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t}\n+\n \tretval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);\n \tif (retval < 0)\n \t\treturn retval;\ndiff --git a/examples/performance-thread/l3fwd-thread/main.c b/examples/performance-thread/l3fwd-thread/main.c\nindex 40d807239..1b13d25db 100644\n--- a/examples/performance-thread/l3fwd-thread/main.c\n+++ b/examples/performance-thread/l3fwd-thread/main.c\n@@ -3551,6 +3551,18 @@ main(int argc, char **argv)\n \t\tif (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\t\tlocal_port_conf.txmode.offloads |=\n \t\t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf &=\n+\t\t\tdev_info.flow_type_rss_offloads;\n+\t\tif (local_port_conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf) {\n+\t\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\t\tportid,\n+\t\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\t\tlocal_port_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t\t}\n+\n \t\tret = rte_eth_dev_configure(portid, nb_rx_queue,\n \t\t\t\t\t(uint16_t)n_tx_queue, &local_port_conf);\n \t\tif (ret < 0)\ndiff --git a/examples/qos_meter/main.c b/examples/qos_meter/main.c\nindex 42cf4b29f..2122bd1dd 100644\n--- a/examples/qos_meter/main.c\n+++ b/examples/qos_meter/main.c\n@@ -333,6 +333,17 @@ main(int argc, char **argv)\n \trte_eth_dev_info_get(port_rx, &dev_info);\n \tif (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\tconf.txmode.offloads |= DEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\tconf.rx_adv_conf.rss_conf.rss_hf &= dev_info.flow_type_rss_offloads;\n+\tif (conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf) {\n+\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\tport_rx,\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\tconf.rx_adv_conf.rss_conf.rss_hf);\n+\t}\n+\n \tret = rte_eth_dev_configure(port_rx, 1, 1, &conf);\n \tif (ret < 0)\n \t\trte_exit(EXIT_FAILURE, \"Port %d configuration error (%d)\\n\", port_rx, ret);\n@@ -363,6 +374,17 @@ main(int argc, char **argv)\n \trte_eth_dev_info_get(port_tx, &dev_info);\n \tif (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\tconf.txmode.offloads |= DEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\tconf.rx_adv_conf.rss_conf.rss_hf &= dev_info.flow_type_rss_offloads;\n+\tif (conf.rx_adv_conf.rss_conf.rss_hf !=\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf) {\n+\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\tport_tx,\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf,\n+\t\t\tconf.rx_adv_conf.rss_conf.rss_hf);\n+\t}\n+\n \tret = rte_eth_dev_configure(port_tx, 1, 1, &conf);\n \tif (ret < 0)\n \t\trte_exit(EXIT_FAILURE, \"Port %d configuration error (%d)\\n\", port_tx, ret);\ndiff --git a/examples/vmdq_dcb/main.c b/examples/vmdq_dcb/main.c\nindex 2626a2f19..49bf84001 100644\n--- a/examples/vmdq_dcb/main.c\n+++ b/examples/vmdq_dcb/main.c\n@@ -197,6 +197,7 @@ port_init(uint16_t port, struct rte_mempool *mbuf_pool)\n \tuint16_t queues_per_pool;\n \tuint32_t max_nb_pools;\n \tstruct rte_eth_txconf txq_conf;\n+\tuint64_t rss_hf_tmp;\n \n \t/*\n \t * The max pool number from dev_info will be used to validate the pool\n@@ -257,6 +258,18 @@ port_init(uint16_t port, struct rte_mempool *mbuf_pool)\n \tif (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)\n \t\tport_conf.txmode.offloads |=\n \t\t\tDEV_TX_OFFLOAD_MBUF_FAST_FREE;\n+\n+\trss_hf_tmp = port_conf.rx_adv_conf.rss_conf.rss_hf;\n+\tport_conf.rx_adv_conf.rss_conf.rss_hf &=\n+\t\tdev_info.flow_type_rss_offloads;\n+\tif (port_conf.rx_adv_conf.rss_conf.rss_hf != rss_hf_tmp) {\n+\t\tprintf(\"Port %u modified RSS hash function based on hardware support,\"\n+\t\t\t\"requested:%#\"PRIx64\" configured:%#\"PRIx64\"\\n\",\n+\t\t\tport,\n+\t\t\trss_hf_tmp,\n+\t\t\tport_conf.rx_adv_conf.rss_conf.rss_hf);\n+\t}\n+\n \t/*\n \t * Though in this example, all queues including pf queues are setup.\n \t * This is because VMDQ queues doesn't always start from zero, and the\n",
    "prefixes": []
}