get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 41111,
    "url": "http://patches.dpdk.org/api/patches/41111/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1528968979-25656-1-git-send-email-rakesh.kudurumalla@cavium.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": "<1528968979-25656-1-git-send-email-rakesh.kudurumalla@cavium.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1528968979-25656-1-git-send-email-rakesh.kudurumalla@cavium.com",
    "date": "2018-06-14T09:36:19",
    "name": "[V2] net/thunderx: add support for hardware first skip feature",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "f6ebecf347bf9d6053271de5657b8dd51b8b7391",
    "submitter": {
        "id": 1055,
        "url": "http://patches.dpdk.org/api/people/1055/?format=api",
        "name": "rkudurumalla",
        "email": "rakesh.kudurumalla@cavium.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/1528968979-25656-1-git-send-email-rakesh.kudurumalla@cavium.com/mbox/",
    "series": [
        {
            "id": 122,
            "url": "http://patches.dpdk.org/api/series/122/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=122",
            "date": "2018-06-14T09:36:19",
            "name": "[V2] net/thunderx: add support for hardware first skip feature",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/122/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/41111/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/41111/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 1B9371DED8;\n\tThu, 14 Jun 2018 12:47:35 +0200 (CEST)",
            "from NAM04-CO1-obe.outbound.protection.outlook.com\n\t(mail-eopbgr690087.outbound.protection.outlook.com [40.107.69.87])\n\tby dpdk.org (Postfix) with ESMTP id D41491DFFE\n\tfor <dev@dpdk.org>; Thu, 14 Jun 2018 11:40:37 +0200 (CEST)",
            "from rkudurumalla.caveonetworks.com (115.113.156.2) by\n\tBLUPR07MB657.namprd07.prod.outlook.com (2a01:111:e400:89e::16) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.863.16; Thu, 14 Jun 2018 09:36:48 +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:X-MS-Exchange-SenderADCheck;\n\tbh=SawQfTWYTnKTLBMTq4fWCA31WtEH1UK/oh3smUzFonI=;\n\tb=kHvOOKDErwwGXLs6hi94Tv4SFKbzkABKH78e8D7szGHakF9fJf+ErjVkTRvnlAFLLXoLl6YRpUc4OHPOcpnJWmtySzOiWp75qMlTaPptlPewl2dicFp17mF822BD0d+AkGNgojsCt2/4oYahFyavXsfsRBLsRzZElO0fauGO0Uk=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Rakesh.Kudurumalla@cavium.com; ",
        "From": "rkudurumalla <rakesh.kudurumalla@cavium.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com, jerin.jacob@caviumnetworks.com,\n\tRakesh Kudurumalla <rkudurumalla@caviumnetworks.com>",
        "Date": "Thu, 14 Jun 2018 15:06:19 +0530",
        "Message-Id": "<1528968979-25656-1-git-send-email-rakesh.kudurumalla@cavium.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[115.113.156.2]",
        "X-ClientProxiedBy": "BM1PR0101CA0011.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:b00:18::21) To BLUPR07MB657.namprd07.prod.outlook.com\n\t(2a01:111:e400:89e::16)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "c62a8683-9f6f-42d1-e893-08d5d1da5a70",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652020)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(5600026)(711020)(2017052603328)(7153060)(7193020);\n\tSRVR:BLUPR07MB657; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BLUPR07MB657;\n\t3:gan7mZlr3mKu0KGzVwPgzshyVzJRgh+zH9T3zVRyEEMGbCsLts5oBTeegndiEk1yes+skPH0rEMJEVUKD/OEW6IakaLF0MzrLYCmP+uMFK1mrh85AFCMF6XCj2gHpYHWcgMVuATRKAnlGqLkM8z1dlYl1lUj/8ro3OQ1su3t+7esyBWioy22H1JAH3C0Z1f3VeiR0hBoTQ3ZfqHUh6KRy7eDM+vdFF4QnZp4qOdMvk4hvkwfYJLWpDtoR0wJ/Vew;\n\t25:9FOQ4aPd99TdsjxrBSRy7G8K9HuyFMBSELii3+r+0c0WcBxFpmdcLlkwHNbCTKXke/ayfuJSIGHXOyy6CEULtSa5HFUx7OVNQMzIvODKIDSLdY92D6Tmv9VrvHCDwXi/HUe9K9Bnm9asFW/z40TstK/gVnrPmouAzIkr6VlaEFjec5oXMMMiCcZKdHlIQghW8d/AfVL6wjDzfWdNblZHaJj7enP5LMSMBDxGqHnYAkTpZB3FL9XVrAfG4J1BlFvO5wY5aibhHXCJv9T2+OhMGxH+yQ7TCJNWiRYV19NggGrfGpWAkseJFj6w7yKYzrIhUMAZEkrVt3R6W7ZGkGKVvQ==;\n\t31:km0CiaRH0Dxqn26WprgKJTTpIxEbsXwp34bTAvOB4wD2/89N4AY5NRqBFfV2YWJp/Uv4n/vUOh0DXcDMlm5HDjlfhHwETyp3IL40BTYakaQSvtUdrKebv/f4oVvmnkk/Ko9Dq0QJyfJcK0yihrTQWWOcG8smzm6zUJ3n50GLmSJod8bY4EwRomeJx/1VBz0JnDRYRWTtKqrSePMW6gPwEUiMqKt4YNRJ2FcNbQAqXdA=",
            "1; BLUPR07MB657;\n\t20:9nu2BJ0ch/rO+T0eUzkfILXTr6FdEax1g1gUiwkGF/FAmzPtkdzDsUArQ+1YPamkXcviKy0r+lSvh5lL0PVzNkj1AGFMVj+7o7XvWB5W/sAzO6+PA7lTglY1KFtMi0PBteP2vScoj2kmRs8lX/F/qu5mC6nkVdskcfOsQ4P8EdWQchVMeOk09hlUFGM06yghrJLsLmyOTRj7hiowLeYUCSCbUfQfmteeGVrWlt575iAJ1f2hs919iG9EQCpdjIy39SZWfbLbNLdyF5+X1/ahnfoQoS5PKresIfVfqNCxHVw2t+xjr22KB8pEOCvOYm7hoeLKt9K8D77oohg7d/xcHjZtuu58jqJ84t6WdwYk5lAzAOz9/5MThBsy82cWWznGaBEUdlfIKXYQwM5kV/R7BH2wQSHhbJ9yRq+2vMn4hqG81zCWjRWvMe0BrUDVmdI/ETruvTCs10QTtkK/BXWuxdsFbX1/BfBclfArT9nUZzNyFe8/4tWKSULnLbbkZZgb;\n\t4:rcTJ4tE05yrEu+JGmbMS16Rv4+Tl8mOqUmaQwPdpSDvbm4uj7p4v3QoirExUVN9OoK/9ma7SLgMgiPaMwtadhNb81MwHvqfJRDiJl0OhwC+FkEzvlg8BfGWjgJjj9JeADRwxskKyiLnSDKazRbJeBZzPQHSv7EinsjKwSO9ZqHF8l9/xioDUCzG3zyoHNyJ15ksz/PK47Ls0QUBsCZi0jthZjTsq+1r/XM0u0HgazhKFTBc9+KsNRctUXfqJrZDl8GpC+k6cE5dGDaPWjogXgA==",
            "=?us-ascii?Q?1; BLUPR07MB657;\n\t23:ajovZkjXUIo6GCCqfSvL5cIL/9VArgNd66H26AoSM3?=\n\tlzoAMoHBiEIHhfYgFt1DEqhEF0Y6+F2yQNdY5pm8cb7aQtIYuZHyjl8oJsoMJsAj18NzVapWrkz3WEjEIEljDOgo0xnnUz26zpOIUebaDwfDIDNJpc45YeCo79RXtSInTUk8tbwUegGwCgHrEqHadCBtEGJnOK6O23aZ3Jfhmuyf/Pd/CSg5WzgQ7DKrlMNkDigU3bWTxTNA7za5a0xjqZKwHLXG8N4agnDO57oTVT1Ng261Bm1QzTyerbzJkAQtz5KiIqLAhmujiSJDH/aiWsWoL2nONMiCnfFpQ5g9VTAIVGzPH4DmNhSVOFMZLl4OvS6Bf/oI3vBBF78ea4ugOG4fOSqlVJY5Qoaqq4GZ4osDlYF3b3AdTCL6qUFZsl5ztyEMObMVbbT4KmtyitnJTJho6htC6gwxl/b8rA4meb5WUWlQMbnd3KmwxuigDvZ/0RpsrjOvKp2eYwA15xBoPZvHhyVl9k5s11LJYJ6pCvl5o4fWcAEzBRmHLO0J7K/ezC2WtxFCdn12BjUkQNs1lboq5lR8jQYXAgEvpJW3Dia0VZwPS2aFhMuH1gMFd9oQebQE1tNfPvV7Qxnwd3cTvJLAgOzBEIdl3PA+yWMaseGBly/RTxOpyvI19F/nm6+7kWNlMmO01toISuaHPpS/tinhpwQK8rigKwMIpaFecVWEDgLeX2S+JXqMgbzmbwNa0VJAroRiswWVtN39ldlze4LPKyEupyns/5Ba/8OHsyB23o4XXaVU443V20GOKHHv1iUtGh0isU+VByrw2VN3joySm1OtamMc9zEoDOoXLz/PMsYrydJWrwnD6UuBbM9Oubto2ilU63nhrKkLdjJAFab8TUs94pSrBnCADee5M9rSFI/7wpwELS17xlSspGLp3LXsw0FAbIuVSln/zqsH9pMq7HLJ23ia7UwC4vqR8A5yPSaHXQuuHK2kfRt7fCUH/tM8LaTtY7ERCrYe52azJFSxuflNSB7Ibo3lLD4OoZblf9fR6crtSp2CxVZBVrU13utxj0VJ6iRHMez7hfZ3xGV4+QPnt80/Chx2IbRDDRKOrrYs6iWEnfPISRUUrn48ExrADnmVSQDW2ouo8OKtjjPJK2/5gaMNCjcdRm8Yt/APZoW6b0zNu1dvZWH21B1pzntH6fNYoX/3QQJaOVLEx7Sh6PgSgo0/tj0kw81LZGkOv9Bx/EtrVSrUDeO9WqEhtNPf9g8KVOSVgSZwq4gB84EkLG7p5Y71jY2YAUsO6JaUpqPHohRi6q9DDxK92fuOEschtJz0e30/5IxARPmzoVrzg4eI90g0E9IvzNPHRYzEk6FB4Dqwy56vi6qLgAemeLNS/0QH8QXRPkX9Viws57Q6dYUdA8FrwJuZIjDjgloA==",
            "1; BLUPR07MB657;\n\t6:S2nFLB+ZNjUYmt4l572EJ63TOckdDgCogl/yr0aNHCBAMXPtb4yH3SwNnmCWedcLVQKfJYzP3RVcn9wnGJqb6135zJwDx7aSTvkFjgHxyNDvMGJkrvKiqlSOK5Hgwvw9yGt97oXPGBonfVWn2LA59Z7aF/GA927wb5lWpkB1qWmuSdXRO0rCn/51PhICRYTSyZupfjM7Qa/irROmLh9R1Ck8qWOCiH2ejsnlpTIC0TaE1qQXGt9E7iGRMbJyyZspmoNq5zrWgY0AWq2G5N8Jzqq/QJ96U+9DM48UBpb9xUPBu7hPN1xM8+8YU4RKXoIMQPSWIhZEhpt0+cgko9uB/lq6j1yy/p/rFdxaZpktRUfe4bmxBJF9AGduLZteoZyWvb+MibVgsUmm9xxcoOnmrS+srTnBPG+2iqV4mqhgpaWsF5AeVkpbNE1YTF2sB9GSZPqZ7NlOCBoKSpK+lrVU+Q==;\n\t5:vYDlxNTs5WPkv95Et7JkELUb9cYSgIvmKZ21HtTD/MDyvyfNcnAqsudIwEY8VA1aeR3QNuNxF4C3Y5D6FdfF1hMt6LGEAdP6PfhykibLuPnuyi4rDF4gLdNw3mZEZGdhq4hVy04t+mqOCJagOKd+XJbhTnmewg8tP+cYh1v/yig=;\n\t24:44qOezHrt1acyWsMMCXnAyPjoL/cHPybo3mojDyw5C/ghV6mXd+0vPj4wxczthvyLLliDobZ183IOAukXVg2dwlRWgIZkt2ktH/bJkTRy9A=",
            "1; BLUPR07MB657;\n\t7:neqhdoPDZ5yq6bOLjDUqo78c4ag0N636YxhAGaJgXRKYCYtYe1xbfXgrm103PyMAdPJYqKkP7fSxI9Qyku6JMHwqfybHKVQP6yTqqALC8hZIceNx+te3nGQORAIXcI78kPldybZ6GzrJVlPPeMiqqdNiu2FltESJbBWul5A8ijT3+sdMX6QMzc0geQEpLs3tRCjoRo+yka0yh65IGNcQkJfcv7gKlLekVwMJUQJcmB2ty027BWUu8M/EM4gb7bnf"
        ],
        "X-MS-TrafficTypeDiagnostic": "BLUPR07MB657:",
        "X-Microsoft-Antispam-PRVS": "<BLUPR07MB65724C6E77F000F79B02245FD7D0@BLUPR07MB657.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231254)(944501410)(52105095)(3002001)(10201501046)(149027)(150027)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016);\n\tSRVR:BLUPR07MB657; BCL:0; PCL:0; RULEID:; SRVR:BLUPR07MB657; ",
        "X-Forefront-PRVS": "0703B549E4",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(39380400002)(376002)(366004)(346002)(39860400002)(396003)(189003)(199004)(2351001)(25786009)(478600001)(53936002)(81166006)(51416003)(52116002)(4326008)(107886003)(6116002)(3846002)(105586002)(7736002)(106356001)(53416004)(8676002)(81156014)(8936002)(5890100001)(966005)(72206003)(2361001)(305945005)(16586007)(316002)(69596002)(6486002)(50226002)(486006)(5660300001)(6666003)(50466002)(6916009)(48376002)(68736007)(66066001)(47776003)(36756003)(16526019)(97736004)(2616005)(956004)(26005)(186003)(6512007)(6306002)(86152003)(86362001)(55236004)(476003)(386003)(2906002)(6506007)(575784001)(59450400001)(43062003);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR07MB657;\n\tH:rkudurumalla.caveonetworks.com; \n\tFPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; ",
        "Received-SPF": "None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)",
        "X-Microsoft-Antispam-Message-Info": "v2ZSD1XK/WLvwPSiCCDioF+eRsYpaWSHNyJi8GYO26XCP67sePH7FTiT8MJQENaX5Crtr/nkqPfHFxSywtHbdv5PNSapQnvUuf6lp3sXx4Zq6OAt0K3viCQvF0NOMNkHchiYVXdovaHbtFRdyrWK2hBzHP/zdgMfXoDGg+oiZH38+LpeHoXk5S9HxvPCmQAZ",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "cavium.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "14 Jun 2018 09:36:48.0337\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "c62a8683-9f6f-42d1-e893-08d5d1da5a70",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "711e4ccf-2e9b-4bcf-a551-4094005b6194",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BLUPR07MB657",
        "X-Mailman-Approved-At": "Thu, 14 Jun 2018 12:47:33 +0200",
        "Subject": "[dpdk-dev] [PATCH V2] net/thunderx: add support for hardware first\n\tskip feature",
        "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://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": "<https://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": "This feature is used to create a hole between HEADROOM\nand actual data.Size of hole is specified in bytes as\nmodule param to pmd\n\nSigned-off-by: Rakesh Kudurumalla <rkudurumalla@caviumnetworks.com>\n---\nV1: https://dpdk.org/ml/archives/dev/2018-May/103058.html\nV2: Includes changes in thunder.rst to render outupt correctly in html\n\n doc/guides/nics/thunderx.rst         | 18 +++++++++\n drivers/net/thunderx/base/nicvf_hw.c | 12 ++++++\n drivers/net/thunderx/base/nicvf_hw.h |  1 +\n drivers/net/thunderx/nicvf_ethdev.c  | 76 +++++++++++++++++++++++++++++++++++-\n drivers/net/thunderx/nicvf_ethdev.h  |  1 +\n drivers/net/thunderx/nicvf_struct.h  |  1 +\n 6 files changed, 108 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/doc/guides/nics/thunderx.rst b/doc/guides/nics/thunderx.rst\nindex 2642374..7825b43 100644\n--- a/doc/guides/nics/thunderx.rst\n+++ b/doc/guides/nics/thunderx.rst\n@@ -30,6 +30,7 @@ Features of the ThunderX PMD are:\n - SR-IOV VF\n - NUMA support\n - Multi queue set support (up to 96 queues (12 queue sets)) per port\n+- First skip support\n \n Supported ThunderX SoCs\n -----------------------\n@@ -312,6 +313,18 @@ We will choose four secondary queue sets from the ending of the list (0002:01:01\n \n The nicvf thunderx driver will make use of attached secondary VFs automatically during the interface configuration stage.\n \n+\n+Module params\n+--------------\n+\n+    This feature is used to create a hole between HEADROOM and actual data.Size of hole is specified\n+    in bytes as module param(\"skip_data_bytes\") to pmd.\n+    This scheme is useful when application would like to insert vlan header without disturbing HEADROOM\n+\n+\n+    use ``-w pci_id,skip_data_bytes=\"number of bytes to skip\"``\n+\n+\n Limitations\n -----------\n \n@@ -335,3 +348,8 @@ Maximum packet segments\n The ThunderX SoC family NICs support up to 12 segments per packet when working\n in scatter/gather mode. So, setting MTU will result with ``EINVAL`` when the\n frame size does not fit in the maximum number of segments.\n+\n+First_skip\n+~~~~~~~~~~\n+\n+Maximum limit on first_skip is 128 bytes and number of bytes should be multiple of 8.\ndiff --git a/drivers/net/thunderx/base/nicvf_hw.c b/drivers/net/thunderx/base/nicvf_hw.c\nindex ea8092c..b07a293 100644\n--- a/drivers/net/thunderx/base/nicvf_hw.c\n+++ b/drivers/net/thunderx/base/nicvf_hw.c\n@@ -703,6 +703,18 @@ nicvf_vlan_hw_strip(struct nicvf *nic, bool enable)\n }\n \n void\n+nicvf_first_skip_config(struct nicvf *nic, uint8_t num_dwords)\n+{\n+\tuint64_t val;\n+\n+\tval = nicvf_reg_read(nic, NIC_VNIC_RQ_GEN_CFG);\n+\tval &= ~(0xfULL);\n+\tval |= (num_dwords & 0xf);\n+\n+\tnicvf_reg_write(nic, NIC_VNIC_RQ_GEN_CFG, val);\n+}\n+\n+void\n nicvf_apad_config(struct nicvf *nic, bool enable)\n {\n \tuint64_t val;\ndiff --git a/drivers/net/thunderx/base/nicvf_hw.h b/drivers/net/thunderx/base/nicvf_hw.h\nindex 284d0bd..fd13ea8 100644\n--- a/drivers/net/thunderx/base/nicvf_hw.h\n+++ b/drivers/net/thunderx/base/nicvf_hw.h\n@@ -193,6 +193,7 @@ uint32_t nicvf_qsize_sq_roundup(uint32_t val);\n void nicvf_vlan_hw_strip(struct nicvf *nic, bool enable);\n \n void nicvf_apad_config(struct nicvf *nic, bool enable);\n+void nicvf_first_skip_config(struct nicvf *nic, uint8_t dwords);\n \n int nicvf_rss_config(struct nicvf *nic, uint32_t  qcnt, uint64_t cfg);\n int nicvf_rss_term(struct nicvf *nic);\ndiff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c\nindex 99fcd51..466cb86 100644\n--- a/drivers/net/thunderx/nicvf_ethdev.c\n+++ b/drivers/net/thunderx/nicvf_ethdev.c\n@@ -34,6 +34,8 @@\n #include <rte_pci.h>\n #include <rte_bus_pci.h>\n #include <rte_tailq.h>\n+#include <rte_devargs.h>\n+#include <rte_kvargs.h>\n \n #include \"base/nicvf_plat.h\"\n \n@@ -1230,6 +1232,7 @@ nicvf_rxq_mbuf_setup(struct nicvf_rxq *rxq)\n {\n \tuintptr_t p;\n \tstruct rte_mbuf mb_def;\n+\tstruct nicvf *nic = rxq->nic;\n \n \tRTE_BUILD_BUG_ON(sizeof(union mbuf_initializer) != 8);\n \tRTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, data_off) % 8 != 0);\n@@ -1240,7 +1243,7 @@ nicvf_rxq_mbuf_setup(struct nicvf_rxq *rxq)\n \tRTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, port) -\n \t\t\t\toffsetof(struct rte_mbuf, data_off) != 6);\n \tmb_def.nb_segs = 1;\n-\tmb_def.data_off = RTE_PKTMBUF_HEADROOM;\n+\tmb_def.data_off = RTE_PKTMBUF_HEADROOM + (nic->skip_bytes);\n \tmb_def.port = rxq->port_id;\n \trte_mbuf_refcnt_set(&mb_def, 1);\n \n@@ -1260,9 +1263,19 @@ nicvf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx,\n \tstruct nicvf_rxq *rxq;\n \tstruct nicvf *nic = nicvf_pmd_priv(dev);\n \tuint64_t offloads;\n+\tuint32_t buffsz;\n+\tstruct rte_pktmbuf_pool_private *mbp_priv;\n \n \tPMD_INIT_FUNC_TRACE();\n \n+\t/* First skip check */\n+\tmbp_priv = rte_mempool_get_priv(mp);\n+\tbuffsz = mbp_priv->mbuf_data_room_size - RTE_PKTMBUF_HEADROOM;\n+\tif (buffsz < (uint32_t)(nic->skip_bytes)) {\n+\t\tPMD_INIT_LOG(ERR, \"First skip is more than configured buffer size\");\n+\t\treturn -EINVAL;\n+\t}\n+\n \tif (qidx >= MAX_RCV_QUEUES_PER_QS)\n \t\tnic = nic->snicvf[qidx / MAX_RCV_QUEUES_PER_QS - 1];\n \n@@ -1298,6 +1311,7 @@ nicvf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx,\n \t\treturn -EINVAL;\n \t}\n \n+\n \t/* Check rx_free_thresh upper bound */\n \trx_free_thresh = (uint16_t)((rx_conf->rx_free_thresh) ?\n \t\t\t\trx_conf->rx_free_thresh :\n@@ -1498,6 +1512,7 @@ nicvf_vf_start(struct rte_eth_dev *dev, struct nicvf *nic, uint32_t rbdrsz)\n \t\t\treturn -EINVAL;\n \t\t}\n \t\trxq->mbuf_phys_off -= data_off;\n+\t\trxq->mbuf_phys_off -= nic->skip_bytes;\n \n \t\tif (mbuf_phys_off == 0)\n \t\t\tmbuf_phys_off = rxq->mbuf_phys_off;\n@@ -1978,6 +1993,59 @@ static const struct eth_dev_ops nicvf_eth_dev_ops = {\n \t.get_reg                  = nicvf_dev_get_regs,\n };\n \n+static inline int\n+nicvf_set_first_skip(struct rte_eth_dev *dev)\n+{\n+\tint bytes_to_skip = 0;\n+\tint ret = 0;\n+\tunsigned int i;\n+\tstruct rte_kvargs *kvlist;\n+\tstatic const char *const skip[] = {\n+\t\tSKIP_DATA_BYTES,\n+\t\tNULL};\n+\tstruct nicvf *nic = nicvf_pmd_priv(dev);\n+\n+\tif (!dev->device->devargs) {\n+\t\tnicvf_first_skip_config(nic, 0);\n+\t\treturn ret;\n+\t}\n+\n+\tkvlist = rte_kvargs_parse(dev->device->devargs->args, skip);\n+\tif (!kvlist)\n+\t\treturn -EINVAL;\n+\n+\tif (kvlist->count == 0)\n+\t\tgoto exit;\n+\n+\tfor (i = 0; i != kvlist->count; ++i) {\n+\t\tconst struct rte_kvargs_pair *pair = &kvlist->pairs[i];\n+\n+\t\tif (!strcmp(pair->key, SKIP_DATA_BYTES))\n+\t\t\tbytes_to_skip = atoi(pair->value);\n+\t}\n+\n+\t\t/*128 bytes amounts to one cache line*/\n+\tif (bytes_to_skip >= 0 && bytes_to_skip < 128) {\n+\t\tif (!(bytes_to_skip % 8)) {\n+\t\t\tnicvf_first_skip_config(nic, (bytes_to_skip / 8));\n+\t\t\tnic->skip_bytes = bytes_to_skip;\n+\t\t\tgoto kvlist_free;\n+\t\t} else {\n+\t\t\tPMD_INIT_LOG(ERR, \"skip_data_bytes should be multiple of 8\");\n+\t\t\tret = -EINVAL;\n+\t\t\tgoto exit;\n+\t\t}\n+\t} else {\n+\t\tPMD_INIT_LOG(ERR, \"skip_data_bytes should be less than 128\");\n+\t\tret = -EINVAL;\n+\t\tgoto exit;\n+\t}\n+exit:\n+\tnicvf_first_skip_config(nic, 0);\n+kvlist_free:\n+\trte_kvargs_free(kvlist);\n+\treturn ret;\n+}\n static int\n nicvf_eth_dev_init(struct rte_eth_dev *eth_dev)\n {\n@@ -2087,6 +2155,11 @@ nicvf_eth_dev_init(struct rte_eth_dev *eth_dev)\n \t\tgoto malloc_fail;\n \t}\n \n+\tret = nicvf_set_first_skip(eth_dev);\n+\tif (ret) {\n+\t\tPMD_INIT_LOG(ERR, \"Failed to configure first skip\");\n+\t\tgoto malloc_fail;\n+\t}\n \tPMD_INIT_LOG(INFO, \"Port %d (%x:%x) mac=%02x:%02x:%02x:%02x:%02x:%02x\",\n \t\teth_dev->data->port_id, nic->vendor_id, nic->device_id,\n \t\tnic->mac_addr[0], nic->mac_addr[1], nic->mac_addr[2],\n@@ -2159,3 +2232,4 @@ static struct rte_pci_driver rte_nicvf_pmd = {\n RTE_PMD_REGISTER_PCI(net_thunderx, rte_nicvf_pmd);\n RTE_PMD_REGISTER_PCI_TABLE(net_thunderx, pci_id_nicvf_map);\n RTE_PMD_REGISTER_KMOD_DEP(net_thunderx, \"* igb_uio | uio_pci_generic | vfio-pci\");\n+RTE_PMD_REGISTER_PARAM_STRING(net_thunderx, SKIP_DATA_BYTES \"=<int>\");\ndiff --git a/drivers/net/thunderx/nicvf_ethdev.h b/drivers/net/thunderx/nicvf_ethdev.h\nindex ea8dccd..9af5088 100644\n--- a/drivers/net/thunderx/nicvf_ethdev.h\n+++ b/drivers/net/thunderx/nicvf_ethdev.h\n@@ -51,6 +51,7 @@\n \n #define VLAN_TAG_SIZE                   4\t/* 802.3ac tag */\n \n+#define SKIP_DATA_BYTES \"skip_data_bytes\"\n static inline struct nicvf *\n nicvf_pmd_priv(struct rte_eth_dev *eth_dev)\n {\ndiff --git a/drivers/net/thunderx/nicvf_struct.h b/drivers/net/thunderx/nicvf_struct.h\nindex d4a83c3..cf98f7c 100644\n--- a/drivers/net/thunderx/nicvf_struct.h\n+++ b/drivers/net/thunderx/nicvf_struct.h\n@@ -99,6 +99,7 @@ struct nicvf {\n \tstruct rte_intr_handle intr_handle;\n \tuint8_t cpi_alg;\n \tuint16_t mtu;\n+\tint skip_bytes;\n \tbool vlan_filter_en;\n \tuint8_t mac_addr[ETHER_ADDR_LEN];\n \t/* secondary queue set support */\n",
    "prefixes": [
        "V2"
    ]
}