get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 53969,
    "url": "http://patches.dpdk.org/api/patches/53969/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20190531180440.41795-1-harry.van.haaren@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": "<20190531180440.41795-1-harry.van.haaren@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190531180440.41795-1-harry.van.haaren@intel.com",
    "date": "2019-05-31T18:04:40",
    "name": "net/i40e: add flow mark support to sse path",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "1e2cd303b24c293ff2f14e64d26bcbe0cbfb2475",
    "submitter": {
        "id": 317,
        "url": "http://patches.dpdk.org/api/people/317/?format=api",
        "name": "Van Haaren, Harry",
        "email": "harry.van.haaren@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/20190531180440.41795-1-harry.van.haaren@intel.com/mbox/",
    "series": [
        {
            "id": 4842,
            "url": "http://patches.dpdk.org/api/series/4842/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=4842",
            "date": "2019-05-31T18:04:40",
            "name": "net/i40e: add flow mark support to sse path",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/4842/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/53969/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/53969/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 24EA31B945;\n\tFri, 31 May 2019 20:03:31 +0200 (CEST)",
            "from mga06.intel.com (mga06.intel.com [134.134.136.31])\n\tby dpdk.org (Postfix) with ESMTP id 014A72C19\n\tfor <dev@dpdk.org>; Fri, 31 May 2019 20:03:29 +0200 (CEST)",
            "from fmsmga005.fm.intel.com ([10.253.24.32])\n\tby orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t31 May 2019 11:03:28 -0700",
            "from silpixa00399779.ir.intel.com (HELO\n\tsilpixa00399779.ger.corp.intel.com) ([10.237.222.100])\n\tby fmsmga005.fm.intel.com with ESMTP; 31 May 2019 11:03:27 -0700"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "Harry van Haaren <harry.van.haaren@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "qi.z.zhang@intel.com, beilei.xing@intel.com,\n\tHarry van Haaren <harry.van.haaren@intel.com>",
        "Date": "Fri, 31 May 2019 19:04:40 +0100",
        "Message-Id": "<20190531180440.41795-1-harry.van.haaren@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "Subject": "[dpdk-dev] [PATCH] net/i40e: add flow mark support to sse path",
        "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": "This commit enables the \"FD ID\" or flow-director mark\ncapability with the SSE vector PMD for 32 byte descriptors.\n\nSuggested-by: Mesut Ergin <mesut.a.ergin@intel.com>\nSigned-off-by: Harry van Haaren <harry.van.haaren@intel.com>\n\n---\n\nHey Folks,\n\nThis v1 is expected to have some performance impact due to adding stores\nto the data path. These can be reduced by blending the data into the register\nwhich is later stored - however this would require larger code changes, and\nbe more difficult to review. As a v1 patch, this achieves the same goal.\n\nPlease review the concept, and I'll rework the implementation to be more\nperformant for the v2 by adding the required blending for ol_flags.\n\nCheers, -Harry\n\n---\n\n drivers/net/i40e/i40e_rxtx.c         |  6 -----\n drivers/net/i40e/i40e_rxtx.h         |  7 ++++++\n drivers/net/i40e/i40e_rxtx_vec_sse.c | 37 ++++++++++++++++++++++++++++\n 3 files changed, 44 insertions(+), 6 deletions(-)",
    "diff": "diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c\nindex 7618153e2..6190ddd07 100644\n--- a/drivers/net/i40e/i40e_rxtx.c\n+++ b/drivers/net/i40e/i40e_rxtx.c\n@@ -172,12 +172,6 @@ i40e_get_iee15888_flags(struct rte_mbuf *mb, uint64_t qword)\n }\n #endif\n \n-#define I40E_RX_DESC_EXT_STATUS_FLEXBH_MASK   0x03\n-#define I40E_RX_DESC_EXT_STATUS_FLEXBH_FD_ID  0x01\n-#define I40E_RX_DESC_EXT_STATUS_FLEXBH_FLEX   0x02\n-#define I40E_RX_DESC_EXT_STATUS_FLEXBL_MASK   0x03\n-#define I40E_RX_DESC_EXT_STATUS_FLEXBL_FLEX   0x01\n-\n static inline uint64_t\n i40e_rxd_build_fdir(volatile union i40e_rx_desc *rxdp, struct rte_mbuf *mb)\n {\ndiff --git a/drivers/net/i40e/i40e_rxtx.h b/drivers/net/i40e/i40e_rxtx.h\nindex 3fc619af9..23de35e42 100644\n--- a/drivers/net/i40e/i40e_rxtx.h\n+++ b/drivers/net/i40e/i40e_rxtx.h\n@@ -32,6 +32,13 @@\n \n #define I40E_TX_MIN_PKT_LEN 17\n \n+/* Shared FDIR masks between scalar / vector drivers */\n+#define I40E_RX_DESC_EXT_STATUS_FLEXBH_MASK   0x03\n+#define I40E_RX_DESC_EXT_STATUS_FLEXBH_FD_ID  0x01\n+#define I40E_RX_DESC_EXT_STATUS_FLEXBH_FLEX   0x02\n+#define I40E_RX_DESC_EXT_STATUS_FLEXBL_MASK   0x03\n+#define I40E_RX_DESC_EXT_STATUS_FLEXBL_FLEX   0x01\n+\n #undef container_of\n #define container_of(ptr, type, member) ({ \\\n \t\ttypeof(((type *)0)->member)(*__mptr) = (ptr); \\\ndiff --git a/drivers/net/i40e/i40e_rxtx_vec_sse.c b/drivers/net/i40e/i40e_rxtx_vec_sse.c\nindex 3b22588c5..180d00b79 100644\n--- a/drivers/net/i40e/i40e_rxtx_vec_sse.c\n+++ b/drivers/net/i40e/i40e_rxtx_vec_sse.c\n@@ -206,6 +206,31 @@ desc_to_ptype_v(__m128i descs[4], struct rte_mbuf **rx_pkts,\n \trx_pkts[3]->packet_type = ptype_tbl[_mm_extract_epi8(ptype1, 8)];\n }\n \n+/* Reads the FDIR ID flags from the 32B descriptors' extended status,\n+ * and if FDIR_ID mark is set, pushes the data to the mbuf->hash.fdir.hi.\n+ */\n+static inline void\n+desc_to_fdir_mark(__m128i v_desc_qw23, struct rte_mbuf *rx_pkt)\n+{\n+\t/* Extract the extended status */\n+\tuint32_t ext_sts = _mm_extract_epi16(v_desc_qw23, 0);\n+\tuint32_t fdir_data = rte_le_to_cpu_32(\n+\t\t\t_mm_extract_epi32(v_desc_qw23, 3));\n+\n+\t/* Check for FD ID mark valid */\n+\tuint32_t flexbh = (rte_le_to_cpu_32(ext_sts) >>\n+\t\tI40E_RX_DESC_EXT_STATUS_FLEXBH_SHIFT) &\n+\t\tI40E_RX_DESC_EXT_STATUS_FLEXBH_MASK;\n+\n+\t/* Branch-free generation of mask for data */\n+\tuint32_t fd_id_valid = (flexbh == I40E_RX_DESC_EXT_STATUS_FLEXBH_FD_ID);\n+\tuint64_t use_data_mask = (!fd_id_valid) - 1;\n+\n+\t/* Always store, mask will zero out if not valid */\n+\trx_pkt->hash.fdir.hi = (use_data_mask & fdir_data);\n+\trx_pkt->ol_flags |= (PKT_RX_FDIR_ID & use_data_mask);\n+}\n+\n  /*\n  * Notice:\n  * - nb_pkts < RTE_I40E_DESCS_PER_LOOP, just return no packet\n@@ -441,6 +466,18 @@ _recv_raw_pkts_vec(struct i40e_rx_queue *rxq, struct rte_mbuf **rx_pkts,\n \t\t_mm_storeu_si128((void *)&rx_pkts[pos]->rx_descriptor_fields1,\n \t\t\t\t pkt_mb1);\n \t\tdesc_to_ptype_v(descs, &rx_pkts[pos], ptype_tbl);\n+\n+\t\t/* Extract FDIR ID from 2nd half of descriptor, update mbuf */\n+\t\t__m128i descs_qw23;\n+\t\tdescs_qw23 = _mm_loadu_si128((__m128i*)&(rxdp + 0)->wb.qword2);\n+\t\tdesc_to_fdir_mark(descs_qw23, rx_pkts[pos + 0]);\n+\t\tdescs_qw23 = _mm_loadu_si128((__m128i*)&(rxdp + 1)->wb.qword2);\n+\t\tdesc_to_fdir_mark(descs_qw23, rx_pkts[pos + 1]);\n+\t\tdescs_qw23 = _mm_loadu_si128((__m128i*)&(rxdp + 2)->wb.qword2);\n+\t\tdesc_to_fdir_mark(descs_qw23, rx_pkts[pos + 2]);\n+\t\tdescs_qw23 = _mm_loadu_si128((__m128i*)&(rxdp + 3)->wb.qword2);\n+\t\tdesc_to_fdir_mark(descs_qw23, rx_pkts[pos + 3]);\n+\n \t\t/* C.4 calc avaialbe number of desc */\n \t\tvar = __builtin_popcountll(_mm_cvtsi128_si64(staterr));\n \t\tnb_pkts_recd += var;\n",
    "prefixes": []
}