get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 13691,
    "url": "https://patches.dpdk.org/api/patches/13691/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1465931200-23912-16-git-send-email-jerin.jacob@caviumnetworks.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<1465931200-23912-16-git-send-email-jerin.jacob@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1465931200-23912-16-git-send-email-jerin.jacob@caviumnetworks.com",
    "date": "2016-06-14T19:06:30",
    "name": "[dpdk-dev,v5,15/25] net/thunderx: add RSS and reta query and update support",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "751d514b15da4c2ddbb8abcd7117068608281d54",
    "submitter": {
        "id": 305,
        "url": "https://patches.dpdk.org/api/people/305/?format=api",
        "name": "Jerin Jacob",
        "email": "jerin.jacob@caviumnetworks.com"
    },
    "delegate": {
        "id": 10,
        "url": "https://patches.dpdk.org/api/users/10/?format=api",
        "username": "bruce",
        "first_name": "Bruce",
        "last_name": "Richardson",
        "email": "bruce.richardson@intel.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1465931200-23912-16-git-send-email-jerin.jacob@caviumnetworks.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/13691/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/13691/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 [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id F066EAD8A;\n\tTue, 14 Jun 2016 21:08:09 +0200 (CEST)",
            "from na01-by2-obe.outbound.protection.outlook.com\n\t(mail-by2on0079.outbound.protection.outlook.com [207.46.100.79])\n\tby dpdk.org (Postfix) with ESMTP id 200C7AD88\n\tfor <dev@dpdk.org>; Tue, 14 Jun 2016 21:08:08 +0200 (CEST)",
            "from localhost.caveonetworks.com (111.93.218.67) by\n\tBY1PR0701MB1723.namprd07.prod.outlook.com (10.162.111.142) with\n\tMicrosoft\n\tSMTP Server (TLS) id 15.1.511.8; Tue, 14 Jun 2016 19:08:04 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=ceg4TwyUh/73pvJfEQ5sxo+bbCo8udDlmkRZ4yGWrro=;\n\tb=RoAkC/5UXfRnCQ37UB0AL3+JltyIZkPIq7bcmC8GVhoXfEyYI/UP/iF5XSc00C/eza/X9JZV+rSd6J9/oMC7WtiAFJTEct5YWgJWjHw7ZsdDRCKlyZOUASsyBaXLRG3P5ynLY4w0BcV4jwjfDk1tPzkvLQsMROy1J7C/jXxAPnM=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Jerin.Jacob@cavium.com; ",
        "From": "Jerin Jacob <jerin.jacob@caviumnetworks.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<thomas.monjalon@6wind.com>, <bruce.richardson@intel.com>,\n\t<ferruh.yigit@intel.com>, Jerin Jacob <jerin.jacob@caviumnetworks.com>,\n\tMaciej Czekaj <maciej.czekaj@caviumnetworks.com>, Kamil Rytarowski\n\t<Kamil.Rytarowski@caviumnetworks.com>,\n\tZyta Szpak <zyta.szpak@semihalf.com>, \n\tSlawomir Rosek <slawomir.rosek@semihalf.com>, Radoslaw Biernacki\n\t<rad@semihalf.com>",
        "Date": "Wed, 15 Jun 2016 00:36:30 +0530",
        "Message-ID": "<1465931200-23912-16-git-send-email-jerin.jacob@caviumnetworks.com>",
        "X-Mailer": "git-send-email 2.5.5",
        "In-Reply-To": "<1465931200-23912-1-git-send-email-jerin.jacob@caviumnetworks.com>",
        "References": "<1465826143-22159-1-git-send-email-jerin.jacob@caviumnetworks.com>\n\t<1465931200-23912-1-git-send-email-jerin.jacob@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[111.93.218.67]",
        "X-ClientProxiedBy": "MA1PR01CA0040.INDPRD01.PROD.OUTLOOK.COM (10.164.116.140)\n\tTo\n\tBY1PR0701MB1723.namprd07.prod.outlook.com (10.162.111.142)",
        "X-MS-Office365-Filtering-Correlation-Id": "d5935657-de91-432e-4103-08d3948737c3",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BY1PR0701MB1723;\n\t2:8saXnjuVILanIiibALZgMQjoFF0UvmfptcVDmdKfcEL4obD84lnXcZsgg7/9C4BiC+q0Q5WqRJ5XAarlaIefPu7OqNEh5HMKk+6X0NkMzqqezOPcOOklPl9wPmb26sVXrlEIOcqEr8DtLXOFQAreVD1yt0awlbpnKBfJ8W8LNGJBmF122Y9nP4boxtF1sjiN;\n\t3:TwMYXWPCXIjaljb/cUJQuBRZl/eyffXFw/jecD1FyQaoEQLlJaySN/Q+UGUV802YcDEDBmktRIvUInb96V8MAedcIBih/vj6sP9isMFzOA0+9oKUFAiHttcokxYvdq2O;\n\t25:vZ62jOAf+uVBTbTZTlKmepv1goo9eBxyebemGOfRI8qOzUE4GLLdiE1WTE6xe/JQYPjtnC6l4wYkn+NZwoBydCfyYtdq3EwrsmDiBluZYBAxDVViTsNw+VwXO17Se+7ZTxidPWeAj4qN7MnM3RBRXRaO8AxEiY75OfjH0AKFhrEtTpehhVwwFWT+FECxpUGlnFg9bYdliiaGL6bG83DO4Xp0uls9GR1DrsV1K28whViQrgmEy0n2vGS8hMLmx+f2Lox67D4igYY0DWxWjrSXWoOEC2zqHD7YyWkpu+8RuO6bYagSyBDHUlkkiv+Nd63/u807G3/1btKvfF3sHqO3h5L0GXzCEWvv7qqmoKZ3bdH0dxIVo48WBkNM08pzvU39SS6rtAxm7qq+tOc96IOnDon8aDKxrZ6duyDFHY1nUtI=",
            "1; BY1PR0701MB1723;\n\t20:ZckSBGyTAtNUMYDwna1saqc+APlo5QDGUxzfmveOhriR/NPzJguyg0kOiZM91kX4IBvX9W2IH5a+feD0HUPSGyW0IfixlYtqef6XFNwtPWo63XPj/qMqXfMafH/8mrDe9L5OTBClwiJLQU6349Dy2yFDJlE9f8lwvsnSZrrpl/MyCi2epIvfr8XTpKVSl5kOeU49t7rk7WiLRUdMkta/QN0LqQc4Z5pBshJDNysuygATa0dJUio9nL8ykDnYLfnGtx10SMquwlMWziKvh+/hdIn81qkz/Ug0d4KWsb+LAuzXqAUjgJoYkhBTSTfpdzTHXYgl5kMqB54Fa2Sg35LcKqpahodJa90Eslmcevp64pNMai9DrgieF6euPPGyi6vqqGapnqQ05zIxUJsuMhF4JZsHXyWKMC66dsNjFHnIe+JcvTGHxaERtqMOcHEM3GSi4jSCs54MvMKodbw89tjJWp6aF4fnJ716rzj1CcSbsOXcgwUSFvOMeoLEY/Y4R5BSfXxGqMi6Sz/RZjBHVhUI5XH8OtDHe6etyx/VID9r4DrsfaVneOXNdBEVXH8GmfXwS5m9NyUXuPrZiHmo7ik41frgqn7vIlZ96PvkCAux8oU=",
            "1; BY1PR0701MB1723;\n\t4:deNaAOyEULptZfU2AdhN+m8x8Jv4TlOGxqUd70V42WRjlq9Kg1FGIeERlOf2gY7cVPrG76VBrp8kSzZbUHok+p8sb6e3ZpyLBHLZNzqNeJj7wjE1mBK4q3qm5Emb4Hg4Qmg0KJ7z28n8ltOROwYynnK1SmaGYLu3oCXTVh1EEH2aDuuUQgn3eC2Pad4gTGhaTGcoOgAaJ8/p6SQ0scC3BX5oxeCEQ/KycNvabxk+1LTbv90T+CVAen88gfyB3r9kdJMXlNkJmOyLI7I3bYNb6VuhMuC3n6OgJaswkyfxUxEyBc6WhbmPVFLfnf3363NSXBKMMB8oIxRSqN5jfCEpvMA5XFO+Q+rA9QJmVZTzpYgx4XWMXymm3HUhwGTaHRHeB4De/kjfkCacm+blIX6DI4k0euQcvxMCAp0032dy45s=",
            "=?us-ascii?Q?1; BY1PR0701MB1723;\n\t23:DNd7kV3olmmhVHs+Evgjd6AI+dlPU9cWtbH8gfP?=\n\t=?us-ascii?Q?D9325EIUnVIXebABzfuvGShiqJqm2JHC3yMy2691UXsdSbu4xaiDtxKi1M1I?=\n\t=?us-ascii?Q?0vLq6Z7tfd0VCmy9klc1dOqLcidPFr6fes4Hgm/ih8qBh8rjYb8OiFDp/Mrp?=\n\t=?us-ascii?Q?morDXG7IDSxeSXs3QeROrweWQP2ar57GHhotPboY9cn4vSCriZ+QpC9C0TiD?=\n\t=?us-ascii?Q?PM1r3ZP35TlXxdMqqHWqUOl8G3T+mQl5gMGqhoOSSc9nB/8PInlbkV0+CAPx?=\n\t=?us-ascii?Q?bUAk0UgDvIKnAX9hECNy/dMuZkc4ZGMDmwZweaZk0B/DyPwiWBqIUOI3e2M2?=\n\t=?us-ascii?Q?O7HusDpVscWK8uhJMCMlsYbnqQ97WuVoQwWSo9L0JGB/a674V5k0MZpCHMLn?=\n\t=?us-ascii?Q?yhHB6Fkmlg92BjGfzavFLFkk6o4C02EUdMSipaaASj1wP6g4xwvAoDTHI52U?=\n\t=?us-ascii?Q?9cznSkMmN/3Af5qtMPP+MEiYEQcEGi18oyU9gLR0v/ilShqctIBw2/9lsIze?=\n\t=?us-ascii?Q?x9iaj2S75FG8ddj4Ln5sMwSkoyBoilNvv6g6AyFUw3n6vvN7uyTruibYdbi6?=\n\t=?us-ascii?Q?ZA/URvdArTHx7j54QW2eoXCy5utkD0Ty+oMy/I3Eyp0QDCRRIS8JsZbZTdU8?=\n\t=?us-ascii?Q?Rl0Ci8IubOnhbnY7Lj5qZj+bEZd99Yw6VWtjDVRneqbQCTxTkihfJraVncG/?=\n\t=?us-ascii?Q?wZi9Lqjt6hc55xi+mtBkMYDl2f/ZbgkrsDb34ha7nukLZuk7fEecGocPFCYA?=\n\t=?us-ascii?Q?nHdN3CdtLUWJkl0kEzC1aZfHiIZtUCUhVjkddjcX9SjrjYdKJg6gb7A03K8x?=\n\t=?us-ascii?Q?exuRb6eHlpR0akzxpbzOBZmf5VGk9+uJW9vH9gtm0c9xzdnoqIQnQWdZexoR?=\n\t=?us-ascii?Q?KYaNDEFTSqLpqZW6QNvuSP6BEovjtglArub3PwCy6r94qbmNGhjS3nAyrnsZ?=\n\t=?us-ascii?Q?umAL87xh4C6DoijLNQBxpQ5ftbHe4B7i0u0sYVtZ3HL5Wsa9O9F2xL9amBKi?=\n\t=?us-ascii?Q?W8z1Wl6NbpiFinPzLzRau/4CDQ3wUFXtaFrhizUiDhHT23EGUNwLkr1aqENX?=\n\t=?us-ascii?Q?3GSgu5UL9ZYhjEwcfj3NF7eCbusq5tkoC+VcVlmXjW61VpBw4O2P5H4vyh7X?=\n\t=?us-ascii?Q?DH+JRe4xWf8N2qFhKv8ejAiigrMD/tjrj2W/iDjcXl437NS4sF0tPmAK5A6m?=\n\t=?us-ascii?Q?srvokDEq5OqJ4MMI=3D?=",
            "1; BY1PR0701MB1723;\n\t5:6gg3Z1HEqFDNhOAuSuGn1Se5YL0/6l/LfIXxb5M1pUU+ULKp90NW+HdyD+rYqS+fn3qBd1CvW13m6fVQnXmJ358XwmpYp/AkzNBinRqsCnroIfhgXp//aZX5dEQ+BZA8xT1jz3JaSqyIGl52UBc5Lg==;\n\t24:0PLOD8wWym0d/PAZmJ1RdtMNoJlB8jI/IYjRM3oBabGQdbV0lYaRuujB/sEQXMY/+DveBfTnA0WJGW1KCifGJUdrl1dyXXklkk4yQmUpTww=;\n\t7:pm215oyllDpLNCJfKbtMzM8LnSWHiHO/6Ece7CNuogI8JkHhu4jTSqFSFxno7nAMu1lmEZN87xjqNcBCWILLtz2yEZCvuQphcGjY17CNQ063rytBc84lRo4tHgMFgzhEXtkxHeHftixAi+gyBumF7FfdgQLjHgusT5FPeMjvUh5KhCbcgzVIQQi5odXNAKQvjS1TrucQkJgfw6jM3f3lZg=="
        ],
        "X-Microsoft-Antispam": "UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1723;",
        "X-Microsoft-Antispam-PRVS": "<BY1PR0701MB172356504D7B9E0C4184C76381540@BY1PR0701MB1723.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(228905959029699);",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046); \n\tSRVR:BY1PR0701MB1723; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1723; ",
        "X-Forefront-PRVS": "09730BD177",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(189002)(199003)(69596002)(189998001)(2950100001)(48376002)(77096005)(36756003)(19580405001)(5004730100002)(19580395003)(76176999)(5009440100003)(50986999)(97736004)(5003940100001)(68736007)(110136002)(92566002)(101416001)(5008740100001)(81166006)(8676002)(229853001)(81156014)(66066001)(4326007)(50466002)(2906002)(105586002)(106356001)(2351001)(47776003)(53416004)(76506005)(42186005)(33646002)(586003)(3846002)(6116002)(50226002)(7099028);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1723;\n\tH:localhost.caveonetworks.com; \n\tFPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; ",
        "Received-SPF": "None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "14 Jun 2016 19:08:04.0315\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BY1PR0701MB1723",
        "Subject": "[dpdk-dev] [PATCH v5 15/25] net/thunderx: add RSS and reta query\n\tand update support",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>\nSigned-off-by: Maciej Czekaj <maciej.czekaj@caviumnetworks.com>\nSigned-off-by: Kamil Rytarowski <Kamil.Rytarowski@caviumnetworks.com>\nSigned-off-by: Zyta Szpak <zyta.szpak@semihalf.com>\nSigned-off-by: Slawomir Rosek <slawomir.rosek@semihalf.com>\nSigned-off-by: Radoslaw Biernacki <rad@semihalf.com>\nReviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>\n---\n drivers/net/thunderx/nicvf_ethdev.c | 172 ++++++++++++++++++++++++++++++++++++\n 1 file changed, 172 insertions(+)",
    "diff": "diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c\nindex 167149e..1d5bea7 100644\n--- a/drivers/net/thunderx/nicvf_ethdev.c\n+++ b/drivers/net/thunderx/nicvf_ethdev.c\n@@ -168,6 +168,174 @@ nicvf_dev_get_regs(struct rte_eth_dev *dev, struct rte_dev_reg_info *regs)\n \treturn -ENOTSUP;\n }\n \n+static inline uint64_t\n+nicvf_rss_ethdev_to_nic(struct nicvf *nic, uint64_t ethdev_rss)\n+{\n+\tuint64_t nic_rss = 0;\n+\n+\tif (ethdev_rss & ETH_RSS_IPV4)\n+\t\tnic_rss |= RSS_IP_ENA;\n+\n+\tif (ethdev_rss & ETH_RSS_IPV6)\n+\t\tnic_rss |= RSS_IP_ENA;\n+\n+\tif (ethdev_rss & ETH_RSS_NONFRAG_IPV4_UDP)\n+\t\tnic_rss |= (RSS_IP_ENA | RSS_UDP_ENA);\n+\n+\tif (ethdev_rss & ETH_RSS_NONFRAG_IPV4_TCP)\n+\t\tnic_rss |= (RSS_IP_ENA | RSS_TCP_ENA);\n+\n+\tif (ethdev_rss & ETH_RSS_NONFRAG_IPV6_UDP)\n+\t\tnic_rss |= (RSS_IP_ENA | RSS_UDP_ENA);\n+\n+\tif (ethdev_rss & ETH_RSS_NONFRAG_IPV6_TCP)\n+\t\tnic_rss |= (RSS_IP_ENA | RSS_TCP_ENA);\n+\n+\tif (ethdev_rss & ETH_RSS_PORT)\n+\t\tnic_rss |= RSS_L2_EXTENDED_HASH_ENA;\n+\n+\tif (nicvf_hw_cap(nic) & NICVF_CAP_TUNNEL_PARSING) {\n+\t\tif (ethdev_rss & ETH_RSS_VXLAN)\n+\t\t\tnic_rss |= RSS_TUN_VXLAN_ENA;\n+\n+\t\tif (ethdev_rss & ETH_RSS_GENEVE)\n+\t\t\tnic_rss |= RSS_TUN_GENEVE_ENA;\n+\n+\t\tif (ethdev_rss & ETH_RSS_NVGRE)\n+\t\t\tnic_rss |= RSS_TUN_NVGRE_ENA;\n+\t}\n+\n+\treturn nic_rss;\n+}\n+\n+static inline uint64_t\n+nicvf_rss_nic_to_ethdev(struct nicvf *nic,  uint64_t nic_rss)\n+{\n+\tuint64_t ethdev_rss = 0;\n+\n+\tif (nic_rss & RSS_IP_ENA)\n+\t\tethdev_rss |= (ETH_RSS_IPV4 | ETH_RSS_IPV6);\n+\n+\tif ((nic_rss & RSS_IP_ENA) && (nic_rss & RSS_TCP_ENA))\n+\t\tethdev_rss |= (ETH_RSS_NONFRAG_IPV4_TCP |\n+\t\t\t\tETH_RSS_NONFRAG_IPV6_TCP);\n+\n+\tif ((nic_rss & RSS_IP_ENA) && (nic_rss & RSS_UDP_ENA))\n+\t\tethdev_rss |= (ETH_RSS_NONFRAG_IPV4_UDP |\n+\t\t\t\tETH_RSS_NONFRAG_IPV6_UDP);\n+\n+\tif (nic_rss & RSS_L2_EXTENDED_HASH_ENA)\n+\t\tethdev_rss |= ETH_RSS_PORT;\n+\n+\tif (nicvf_hw_cap(nic) & NICVF_CAP_TUNNEL_PARSING) {\n+\t\tif (nic_rss & RSS_TUN_VXLAN_ENA)\n+\t\t\tethdev_rss |= ETH_RSS_VXLAN;\n+\n+\t\tif (nic_rss & RSS_TUN_GENEVE_ENA)\n+\t\t\tethdev_rss |= ETH_RSS_GENEVE;\n+\n+\t\tif (nic_rss & RSS_TUN_NVGRE_ENA)\n+\t\t\tethdev_rss |= ETH_RSS_NVGRE;\n+\t}\n+\treturn ethdev_rss;\n+}\n+\n+static int\n+nicvf_dev_reta_query(struct rte_eth_dev *dev,\n+\t\t     struct rte_eth_rss_reta_entry64 *reta_conf,\n+\t\t     uint16_t reta_size)\n+{\n+\tstruct nicvf *nic = nicvf_pmd_priv(dev);\n+\tuint8_t tbl[NIC_MAX_RSS_IDR_TBL_SIZE];\n+\tint ret, i, j;\n+\n+\tif (reta_size != NIC_MAX_RSS_IDR_TBL_SIZE) {\n+\t\tRTE_LOG(ERR, PMD, \"The size of hash lookup table configured \"\n+\t\t\t\"(%d) doesn't match the number hardware can supported \"\n+\t\t\t\"(%d)\", reta_size, NIC_MAX_RSS_IDR_TBL_SIZE);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tret = nicvf_rss_reta_query(nic, tbl, NIC_MAX_RSS_IDR_TBL_SIZE);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\t/* Copy RETA table */\n+\tfor (i = 0; i < (NIC_MAX_RSS_IDR_TBL_SIZE / RTE_RETA_GROUP_SIZE); i++) {\n+\t\tfor (j = 0; j < RTE_RETA_GROUP_SIZE; j++)\n+\t\t\tif ((reta_conf[i].mask >> j) & 0x01)\n+\t\t\t\treta_conf[i].reta[j] = tbl[j];\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static int\n+nicvf_dev_reta_update(struct rte_eth_dev *dev,\n+\t\t      struct rte_eth_rss_reta_entry64 *reta_conf,\n+\t\t      uint16_t reta_size)\n+{\n+\tstruct nicvf *nic = nicvf_pmd_priv(dev);\n+\tuint8_t tbl[NIC_MAX_RSS_IDR_TBL_SIZE];\n+\tint ret, i, j;\n+\n+\tif (reta_size != NIC_MAX_RSS_IDR_TBL_SIZE) {\n+\t\tRTE_LOG(ERR, PMD, \"The size of hash lookup table configured \"\n+\t\t\t\"(%d) doesn't match the number hardware can supported \"\n+\t\t\t\"(%d)\", reta_size, NIC_MAX_RSS_IDR_TBL_SIZE);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tret = nicvf_rss_reta_query(nic, tbl, NIC_MAX_RSS_IDR_TBL_SIZE);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\t/* Copy RETA table */\n+\tfor (i = 0; i < (NIC_MAX_RSS_IDR_TBL_SIZE / RTE_RETA_GROUP_SIZE); i++) {\n+\t\tfor (j = 0; j < RTE_RETA_GROUP_SIZE; j++)\n+\t\t\tif ((reta_conf[i].mask >> j) & 0x01)\n+\t\t\t\ttbl[j] = reta_conf[i].reta[j];\n+\t}\n+\n+\treturn nicvf_rss_reta_update(nic, tbl, NIC_MAX_RSS_IDR_TBL_SIZE);\n+}\n+\n+static int\n+nicvf_dev_rss_hash_conf_get(struct rte_eth_dev *dev,\n+\t\t\t    struct rte_eth_rss_conf *rss_conf)\n+{\n+\tstruct nicvf *nic = nicvf_pmd_priv(dev);\n+\n+\tif (rss_conf->rss_key)\n+\t\tnicvf_rss_get_key(nic, rss_conf->rss_key);\n+\n+\trss_conf->rss_key_len =  RSS_HASH_KEY_BYTE_SIZE;\n+\trss_conf->rss_hf = nicvf_rss_nic_to_ethdev(nic, nicvf_rss_get_cfg(nic));\n+\treturn 0;\n+}\n+\n+static int\n+nicvf_dev_rss_hash_update(struct rte_eth_dev *dev,\n+\t\t\t  struct rte_eth_rss_conf *rss_conf)\n+{\n+\tstruct nicvf *nic = nicvf_pmd_priv(dev);\n+\tuint64_t nic_rss;\n+\n+\tif (rss_conf->rss_key &&\n+\t\trss_conf->rss_key_len != RSS_HASH_KEY_BYTE_SIZE) {\n+\t\tRTE_LOG(ERR, PMD, \"Hash key size mismatch %d\",\n+\t\t\t\trss_conf->rss_key_len);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (rss_conf->rss_key)\n+\t\tnicvf_rss_set_key(nic, rss_conf->rss_key);\n+\n+\tnic_rss = nicvf_rss_ethdev_to_nic(nic, rss_conf->rss_hf);\n+\tnicvf_rss_set_cfg(nic, nic_rss);\n+\treturn 0;\n+}\n+\n static int\n nicvf_qset_cq_alloc(struct nicvf *nic, struct nicvf_rxq *rxq, uint16_t qidx,\n \t\t    uint32_t desc_cnt)\n@@ -601,6 +769,10 @@ static const struct eth_dev_ops nicvf_eth_dev_ops = {\n \t.dev_configure            = nicvf_dev_configure,\n \t.link_update              = nicvf_dev_link_update,\n \t.dev_infos_get            = nicvf_dev_info_get,\n+\t.reta_update              = nicvf_dev_reta_update,\n+\t.reta_query               = nicvf_dev_reta_query,\n+\t.rss_hash_update          = nicvf_dev_rss_hash_update,\n+\t.rss_hash_conf_get        = nicvf_dev_rss_hash_conf_get,\n \t.rx_queue_setup           = nicvf_dev_rx_queue_setup,\n \t.rx_queue_release         = nicvf_dev_rx_queue_release,\n \t.tx_queue_setup           = nicvf_dev_tx_queue_setup,\n",
    "prefixes": [
        "dpdk-dev",
        "v5",
        "15/25"
    ]
}