get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 30038,
    "url": "http://patches.dpdk.org/api/patches/30038/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1507634341-72277-5-git-send-email-cristian.dumitrescu@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": "<1507634341-72277-5-git-send-email-cristian.dumitrescu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1507634341-72277-5-git-send-email-cristian.dumitrescu@intel.com",
    "date": "2017-10-10T11:19:00",
    "name": "[dpdk-dev,V2,4/5] ip_pipeline: update due to api changes in librte_table",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "a745af179077e6e06f0201f3b4d3429b4c2ea463",
    "submitter": {
        "id": 19,
        "url": "http://patches.dpdk.org/api/people/19/?format=api",
        "name": "Cristian Dumitrescu",
        "email": "cristian.dumitrescu@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1507634341-72277-5-git-send-email-cristian.dumitrescu@intel.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/30038/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/30038/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 9D8041B290;\n\tTue, 10 Oct 2017 13:19:26 +0200 (CEST)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n\tby dpdk.org (Postfix) with ESMTP id DC89E1B235\n\tfor <dev@dpdk.org>; Tue, 10 Oct 2017 13:19:19 +0200 (CEST)",
            "from fmsmga006.fm.intel.com ([10.253.24.20])\n\tby fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t10 Oct 2017 04:19:07 -0700",
            "from silpixa00382658.ir.intel.com ([10.237.223.29])\n\tby fmsmga006.fm.intel.com with ESMTP; 10 Oct 2017 04:19:06 -0700"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.42,504,1500966000\"; d=\"scan'208\";a=\"161404174\"",
        "From": "Cristian Dumitrescu <cristian.dumitrescu@intel.com>",
        "To": "dev@dpdk.org",
        "Date": "Tue, 10 Oct 2017 12:19:00 +0100",
        "Message-Id": "<1507634341-72277-5-git-send-email-cristian.dumitrescu@intel.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1507634341-72277-1-git-send-email-cristian.dumitrescu@intel.com>",
        "References": "<1503582789-121358-2-git-send-email-cristian.dumitrescu@intel.com>\n\t<1507634341-72277-1-git-send-email-cristian.dumitrescu@intel.com>",
        "Subject": "[dpdk-dev] [PATCH V2 4/5] ip_pipeline: update due to api changes in\n\tlibrte_table",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <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: Cristian Dumitrescu <cristian.dumitrescu@intel.com>\n---\nChanges in V2:\n- Added one file that was not picked up in V2 by mistake (hash_func.h)\n- Fixed minor style issue\n\n examples/ip_pipeline/pipeline/hash_func.h          | 178 ++++++++++++---------\n .../pipeline/pipeline_flow_classification.c        |  12 +-\n .../pipeline/pipeline_flow_classification_be.c     |  51 +-----\n .../ip_pipeline/pipeline/pipeline_passthrough_be.c |  18 +--\n .../ip_pipeline/pipeline/pipeline_routing_be.c     |  18 ++-\n 5 files changed, 138 insertions(+), 139 deletions(-)",
    "diff": "diff --git a/examples/ip_pipeline/pipeline/hash_func.h b/examples/ip_pipeline/pipeline/hash_func.h\nindex b112369..49fb44b 100644\n--- a/examples/ip_pipeline/pipeline/hash_func.h\n+++ b/examples/ip_pipeline/pipeline/hash_func.h\n@@ -34,48 +34,56 @@\n #define __INCLUDE_HASH_FUNC_H__\n \n static inline uint64_t\n-hash_xor_key8(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_xor_key8(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t xor0;\n \n-\txor0 = seed ^ k[0];\n+\txor0 = seed ^ (k[0] & m[0]);\n \n \treturn (xor0 >> 32) ^ xor0;\n }\n \n static inline uint64_t\n-hash_xor_key16(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_xor_key16(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t xor0;\n \n-\txor0 = (k[0] ^ seed) ^ k[1];\n+\txor0 = ((k[0] & m[0]) ^ seed) ^ (k[1] & m[1]);\n \n \treturn (xor0 >> 32) ^ xor0;\n }\n \n static inline uint64_t\n-hash_xor_key24(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_xor_key24(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t xor0;\n \n-\txor0 = (k[0] ^ seed) ^ k[1];\n+\txor0 = ((k[0] & m[0]) ^ seed) ^ (k[1] & m[1]);\n \n-\txor0 ^= k[2];\n+\txor0 ^= k[2] & m[2];\n \n \treturn (xor0 >> 32) ^ xor0;\n }\n \n static inline uint64_t\n-hash_xor_key32(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_xor_key32(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t xor0, xor1;\n \n-\txor0 = (k[0] ^ seed) ^ k[1];\n-\txor1 = k[2] ^ k[3];\n+\txor0 = ((k[0] & m[0]) ^ seed) ^ (k[1] & m[1]);\n+\txor1 = (k[2] & m[2]) ^ (k[3] & m[3]);\n \n \txor0 ^= xor1;\n \n@@ -83,30 +91,34 @@ hash_xor_key32(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n }\n \n static inline uint64_t\n-hash_xor_key40(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_xor_key40(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t xor0, xor1;\n \n-\txor0 = (k[0] ^ seed) ^ k[1];\n-\txor1 = k[2] ^ k[3];\n+\txor0 = ((k[0] & m[0]) ^ seed) ^ (k[1] & m[1]);\n+\txor1 = (k[2] & m[2]) ^ (k[3] & m[3]);\n \n \txor0 ^= xor1;\n \n-\txor0 ^= k[4];\n+\txor0 ^= k[4] & m[4];\n \n \treturn (xor0 >> 32) ^ xor0;\n }\n \n static inline uint64_t\n-hash_xor_key48(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_xor_key48(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t xor0, xor1, xor2;\n \n-\txor0 = (k[0] ^ seed) ^ k[1];\n-\txor1 = k[2] ^ k[3];\n-\txor2 = k[4] ^ k[5];\n+\txor0 = ((k[0] & m[0]) ^ seed) ^ (k[1] & m[1]);\n+\txor1 = (k[2] & m[2]) ^ (k[3] & m[3]);\n+\txor2 = (k[4] & m[4]) ^ (k[5] & m[5]);\n \n \txor0 ^= xor1;\n \n@@ -116,17 +128,19 @@ hash_xor_key48(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n }\n \n static inline uint64_t\n-hash_xor_key56(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_xor_key56(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t xor0, xor1, xor2;\n \n-\txor0 = (k[0] ^ seed) ^ k[1];\n-\txor1 = k[2] ^ k[3];\n-\txor2 = k[4] ^ k[5];\n+\txor0 = ((k[0] & m[0]) ^ seed) ^ (k[1] & m[1]);\n+\txor1 = (k[2] & m[2]) ^ (k[3] & m[3]);\n+\txor2 = (k[4] & m[4]) ^ (k[5] & m[5]);\n \n \txor0 ^= xor1;\n-\txor2 ^= k[6];\n+\txor2 ^= k[6] & m[6];\n \n \txor0 ^= xor2;\n \n@@ -134,15 +148,17 @@ hash_xor_key56(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n }\n \n static inline uint64_t\n-hash_xor_key64(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_xor_key64(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t xor0, xor1, xor2, xor3;\n \n-\txor0 = (k[0] ^ seed) ^ k[1];\n-\txor1 = k[2] ^ k[3];\n-\txor2 = k[4] ^ k[5];\n-\txor3 = k[6] ^ k[7];\n+\txor0 = ((k[0] & m[0]) ^ seed) ^ (k[1] & m[1]);\n+\txor1 = (k[2] & m[2]) ^ (k[3] & m[3]);\n+\txor2 = (k[4] & m[4]) ^ (k[5] & m[5]);\n+\txor3 = (k[6] & m[6]) ^ (k[7] & m[7]);\n \n \txor0 ^= xor1;\n \txor2 ^= xor3;\n@@ -152,31 +168,35 @@ hash_xor_key64(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n \treturn (xor0 >> 32) ^ xor0;\n }\n \n-#if defined(RTE_ARCH_X86_64)\n+#if defined(RTE_ARCH_X86_64) && defined(RTE_MACHINE_CPUFLAG_SSE4_2)\n \n #include <x86intrin.h>\n \n static inline uint64_t\n-hash_crc_key8(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_crc_key8(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t crc0;\n \n-\tcrc0 = _mm_crc32_u64(seed, k[0]);\n+\tcrc0 = _mm_crc32_u64(seed, k[0] & m[0]);\n \n \treturn crc0;\n }\n \n static inline uint64_t\n-hash_crc_key16(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_crc_key16(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t k0, crc0, crc1;\n \n-\tk0 = k[0];\n+\tk0 = k[0] & m[0];\n \n \tcrc0 = _mm_crc32_u64(k0, seed);\n-\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1]);\n+\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1] & m[1]);\n \n \tcrc0 ^= crc1;\n \n@@ -184,16 +204,18 @@ hash_crc_key16(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n }\n \n static inline uint64_t\n-hash_crc_key24(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_crc_key24(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t k0, k2, crc0, crc1;\n \n-\tk0 = k[0];\n-\tk2 = k[2];\n+\tk0 = k[0] & m[0];\n+\tk2 = k[2] & m[2];\n \n \tcrc0 = _mm_crc32_u64(k0, seed);\n-\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1]);\n+\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1] & m[1]);\n \n \tcrc0 = _mm_crc32_u64(crc0, k2);\n \n@@ -203,18 +225,20 @@ hash_crc_key24(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n }\n \n static inline uint64_t\n-hash_crc_key32(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_crc_key32(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t k0, k2, crc0, crc1, crc2, crc3;\n \n-\tk0 = k[0];\n-\tk2 = k[2];\n+\tk0 = k[0] & m[0];\n+\tk2 = k[2] & m[2];\n \n \tcrc0 = _mm_crc32_u64(k0, seed);\n-\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1]);\n+\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1] & m[1]);\n \n-\tcrc2 = _mm_crc32_u64(k2, k[3]);\n+\tcrc2 = _mm_crc32_u64(k2, k[3] & m[3]);\n \tcrc3 = k2 >> 32;\n \n \tcrc0 = _mm_crc32_u64(crc0, crc1);\n@@ -226,19 +250,21 @@ hash_crc_key32(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n }\n \n static inline uint64_t\n-hash_crc_key40(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_crc_key40(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t k0, k2, crc0, crc1, crc2, crc3;\n \n-\tk0 = k[0];\n-\tk2 = k[2];\n+\tk0 = k[0] & m[0];\n+\tk2 = k[2] & m[2];\n \n \tcrc0 = _mm_crc32_u64(k0, seed);\n-\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1]);\n+\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1] & m[1]);\n \n-\tcrc2 = _mm_crc32_u64(k2, k[3]);\n-\tcrc3 = _mm_crc32_u64(k2 >> 32, k[4]);\n+\tcrc2 = _mm_crc32_u64(k2, k[3] & m[3]);\n+\tcrc3 = _mm_crc32_u64(k2 >> 32, k[4] & m[4]);\n \n \tcrc0 = _mm_crc32_u64(crc0, crc1);\n \tcrc1 = _mm_crc32_u64(crc2, crc3);\n@@ -249,20 +275,22 @@ hash_crc_key40(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n }\n \n static inline uint64_t\n-hash_crc_key48(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_crc_key48(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t k0, k2, k5, crc0, crc1, crc2, crc3;\n \n-\tk0 = k[0];\n-\tk2 = k[2];\n-\tk5 = k[5];\n+\tk0 = k[0] & m[0];\n+\tk2 = k[2] & m[2];\n+\tk5 = k[5] & m[5];\n \n \tcrc0 = _mm_crc32_u64(k0, seed);\n-\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1]);\n+\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1] & m[1]);\n \n-\tcrc2 = _mm_crc32_u64(k2, k[3]);\n-\tcrc3 = _mm_crc32_u64(k2 >> 32, k[4]);\n+\tcrc2 = _mm_crc32_u64(k2, k[3] & m[3]);\n+\tcrc3 = _mm_crc32_u64(k2 >> 32, k[4] & m[4]);\n \n \tcrc0 = _mm_crc32_u64(crc0, (crc1 << 32) ^ crc2);\n \tcrc1 = _mm_crc32_u64(crc3, k5);\n@@ -273,22 +301,24 @@ hash_crc_key48(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n }\n \n static inline uint64_t\n-hash_crc_key56(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_crc_key56(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t k0, k2, k5, crc0, crc1, crc2, crc3, crc4, crc5;\n \n-\tk0 = k[0];\n-\tk2 = k[2];\n-\tk5 = k[5];\n+\tk0 = k[0] & m[0];\n+\tk2 = k[2] & m[2];\n+\tk5 = k[5] & m[5];\n \n \tcrc0 = _mm_crc32_u64(k0, seed);\n-\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1]);\n+\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1] & m[1]);\n \n-\tcrc2 = _mm_crc32_u64(k2, k[3]);\n-\tcrc3 = _mm_crc32_u64(k2 >> 32, k[4]);\n+\tcrc2 = _mm_crc32_u64(k2, k[3] & m[3]);\n+\tcrc3 = _mm_crc32_u64(k2 >> 32, k[4] & m[4]);\n \n-\tcrc4 = _mm_crc32_u64(k5, k[6]);\n+\tcrc4 = _mm_crc32_u64(k5, k[6] & m[6]);\n \tcrc5 = k5 >> 32;\n \n \tcrc0 = _mm_crc32_u64(crc0, (crc1 << 32) ^ crc2);\n@@ -300,23 +330,25 @@ hash_crc_key56(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n }\n \n static inline uint64_t\n-hash_crc_key64(void *key, __rte_unused uint32_t key_size, uint64_t seed)\n+hash_crc_key64(void *key, void *mask, __rte_unused uint32_t key_size,\n+\tuint64_t seed)\n {\n \tuint64_t *k = key;\n+\tuint64_t *m = mask;\n \tuint64_t k0, k2, k5, crc0, crc1, crc2, crc3, crc4, crc5;\n \n-\tk0 = k[0];\n-\tk2 = k[2];\n-\tk5 = k[5];\n+\tk0 = k[0] & m[0];\n+\tk2 = k[2] & m[2];\n+\tk5 = k[5] & m[5];\n \n \tcrc0 = _mm_crc32_u64(k0, seed);\n-\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1]);\n+\tcrc1 = _mm_crc32_u64(k0 >> 32, k[1] & m[1]);\n \n-\tcrc2 = _mm_crc32_u64(k2, k[3]);\n-\tcrc3 = _mm_crc32_u64(k2 >> 32, k[4]);\n+\tcrc2 = _mm_crc32_u64(k2, k[3] & m[3]);\n+\tcrc3 = _mm_crc32_u64(k2 >> 32, k[4] & m[4]);\n \n-\tcrc4 = _mm_crc32_u64(k5, k[6]);\n-\tcrc5 = _mm_crc32_u64(k5 >> 32, k[7]);\n+\tcrc4 = _mm_crc32_u64(k5, k[6] & m[6]);\n+\tcrc5 = _mm_crc32_u64(k5 >> 32, k[7] & m[7]);\n \n \tcrc0 = _mm_crc32_u64(crc0, (crc1 << 32) ^ crc2);\n \tcrc1 = _mm_crc32_u64(crc3, (crc4 << 32) ^ crc5);\ndiff --git a/examples/ip_pipeline/pipeline/pipeline_flow_classification.c b/examples/ip_pipeline/pipeline/pipeline_flow_classification.c\nindex 9ef50cc..3ee7266 100644\n--- a/examples/ip_pipeline/pipeline/pipeline_flow_classification.c\n+++ b/examples/ip_pipeline/pipeline/pipeline_flow_classification.c\n@@ -88,8 +88,11 @@ app_pipeline_fc_key_convert(struct pipeline_fc_key *key_in,\n \tuint32_t *signature)\n {\n \tuint8_t buffer[PIPELINE_FC_FLOW_KEY_MAX_SIZE];\n+\tuint8_t m[PIPELINE_FC_FLOW_KEY_MAX_SIZE]; /* key mask */\n \tvoid *key_buffer = (key_out) ? key_out : buffer;\n \n+\tmemset(m, 0xFF, sizeof(m));\n+\n \tswitch (key_in->type) {\n \tcase FLOW_KEY_QINQ:\n \t{\n@@ -101,7 +104,7 @@ app_pipeline_fc_key_convert(struct pipeline_fc_key *key_in,\n \t\tqinq->cvlan = rte_cpu_to_be_16(key_in->key.qinq.cvlan);\n \n \t\tif (signature)\n-\t\t\t*signature = (uint32_t) hash_default_key8(qinq, 8, 0);\n+\t\t\t*signature = (uint32_t) hash_default_key8(qinq, m, 8, 0);\n \t\treturn 0;\n \t}\n \n@@ -118,7 +121,7 @@ app_pipeline_fc_key_convert(struct pipeline_fc_key *key_in,\n \t\tipv4->port_dst = rte_cpu_to_be_16(key_in->key.ipv4_5tuple.port_dst);\n \n \t\tif (signature)\n-\t\t\t*signature = (uint32_t) hash_default_key16(ipv4, 16, 0);\n+\t\t\t*signature = (uint32_t) hash_default_key16(ipv4, m, 16, 0);\n \t\treturn 0;\n \t}\n \n@@ -136,7 +139,7 @@ app_pipeline_fc_key_convert(struct pipeline_fc_key *key_in,\n \t\tipv6->port_dst = rte_cpu_to_be_16(key_in->key.ipv6_5tuple.port_dst);\n \n \t\tif (signature)\n-\t\t\t*signature = (uint32_t) hash_default_key64(ipv6, 64, 0);\n+\t\t\t*signature = (uint32_t) hash_default_key64(ipv6, m, 64, 0);\n \t\treturn 0;\n \t}\n \n@@ -832,12 +835,11 @@ app_pipeline_fc_add_bulk(struct app_params *app,\n \t}\n \n \t/* Free resources */\n-\tapp_msg_free(app, rsp);\n-\n \tfor (i = rsp->n_keys; i < n_keys; i++)\n \t\tif (new_flow[i])\n \t\t\trte_free(flow[i]);\n \n+\tapp_msg_free(app, rsp);\n \trte_free(flow_rsp);\n \trte_free(flow_req);\n \trte_free(new_flow);\ndiff --git a/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c b/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c\nindex 026f00c..9846777 100644\n--- a/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c\n+++ b/examples/ip_pipeline/pipeline/pipeline_flow_classification_be.c\n@@ -492,40 +492,16 @@ static void *pipeline_fc_init(struct pipeline_params *params,\n \t/* Tables */\n \tp->n_tables = 1;\n \t{\n-\t\tstruct rte_table_hash_key8_ext_params\n-\t\t\ttable_hash_key8_params = {\n-\t\t\t.n_entries = p_fc->n_flows,\n-\t\t\t.n_entries_ext = p_fc->n_flows,\n-\t\t\t.signature_offset = p_fc->hash_offset,\n+\t\tstruct rte_table_hash_params table_hash_params = {\n+\t\t\t.name = p->name,\n+\t\t\t.key_size = p_fc->key_size,\n \t\t\t.key_offset = p_fc->key_offset,\n-\t\t\t.f_hash = hash_func[(p_fc->key_size / 8) - 1],\n \t\t\t.key_mask = (p_fc->key_mask_present) ?\n \t\t\t\tp_fc->key_mask : NULL,\n-\t\t\t.seed = 0,\n-\t\t};\n-\n-\t\tstruct rte_table_hash_key16_ext_params\n-\t\t\ttable_hash_key16_params = {\n-\t\t\t.n_entries = p_fc->n_flows,\n-\t\t\t.n_entries_ext = p_fc->n_flows,\n-\t\t\t.signature_offset = p_fc->hash_offset,\n-\t\t\t.key_offset = p_fc->key_offset,\n-\t\t\t.f_hash = hash_func[(p_fc->key_size / 8) - 1],\n-\t\t\t.key_mask = (p_fc->key_mask_present) ?\n-\t\t\t\tp_fc->key_mask : NULL,\n-\t\t\t.seed = 0,\n-\t\t};\n-\n-\t\tstruct rte_table_hash_ext_params\n-\t\t\ttable_hash_params = {\n-\t\t\t.key_size = p_fc->key_size,\n \t\t\t.n_keys = p_fc->n_flows,\n \t\t\t.n_buckets = p_fc->n_flows / 4,\n-\t\t\t.n_buckets_ext = p_fc->n_flows / 4,\n \t\t\t.f_hash = hash_func[(p_fc->key_size / 8) - 1],\n \t\t\t.seed = 0,\n-\t\t\t.signature_offset = p_fc->hash_offset,\n-\t\t\t.key_offset = p_fc->key_offset,\n \t\t};\n \n \t\tstruct rte_pipeline_table_params table_params = {\n@@ -542,32 +518,19 @@ static void *pipeline_fc_init(struct pipeline_params *params,\n \n \t\tswitch (p_fc->key_size) {\n \t\tcase 8:\n-\t\t\tif (p_fc->hash_offset != 0) {\n-\t\t\t\ttable_params.ops =\n-\t\t\t\t\t&rte_table_hash_key8_ext_ops;\n-\t\t\t} else {\n-\t\t\t\ttable_params.ops =\n-\t\t\t\t\t&rte_table_hash_key8_ext_dosig_ops;\n-\t\t\t}\n-\t\t\ttable_params.arg_create = &table_hash_key8_params;\n+\t\t\ttable_params.ops = &rte_table_hash_key8_ext_ops;\n \t\t\tbreak;\n \n \t\tcase 16:\n-\t\t\tif (p_fc->hash_offset != 0) {\n-\t\t\t\ttable_params.ops =\n-\t\t\t\t\t&rte_table_hash_key16_ext_ops;\n-\t\t\t} else {\n-\t\t\t\ttable_params.ops =\n-\t\t\t\t\t&rte_table_hash_key16_ext_dosig_ops;\n-\t\t\t}\n-\t\t\ttable_params.arg_create = &table_hash_key16_params;\n+\t\t\ttable_params.ops = &rte_table_hash_key16_ext_ops;\n \t\t\tbreak;\n \n \t\tdefault:\n \t\t\ttable_params.ops = &rte_table_hash_ext_ops;\n-\t\t\ttable_params.arg_create = &table_hash_params;\n \t\t}\n \n+\t\ttable_params.arg_create = &table_hash_params;\n+\n \t\tstatus = rte_pipeline_table_create(p->p,\n \t\t\t&table_params,\n \t\t\t&p->table_id[0]);\ndiff --git a/examples/ip_pipeline/pipeline/pipeline_passthrough_be.c b/examples/ip_pipeline/pipeline/pipeline_passthrough_be.c\nindex 8cb2f0c..2500332 100644\n--- a/examples/ip_pipeline/pipeline/pipeline_passthrough_be.c\n+++ b/examples/ip_pipeline/pipeline/pipeline_passthrough_be.c\n@@ -76,7 +76,7 @@ static pipeline_msg_req_handler handlers[] = {\n \t\tpipeline_msg_req_invalid_handler,\n };\n \n-static __rte_always_inline void\n+static inline __attribute__((always_inline)) void\n pkt_work_dma(\n \tstruct rte_mbuf *pkt,\n \tvoid *arg,\n@@ -102,7 +102,7 @@ pkt_work_dma(\n \n \t/* Read (dma_dst), compute (hash), write (hash) */\n \tif (hash_enabled) {\n-\t\tuint32_t hash = p->f_hash(dma_dst, dma_size, 0);\n+\t\tuint32_t hash = p->f_hash(dma_src, dma_mask, dma_size, 0);\n \t\t*dma_hash = hash;\n \n \t\tif (lb_hash) {\n@@ -121,7 +121,7 @@ pkt_work_dma(\n \t}\n }\n \n-static __rte_always_inline void\n+static inline __attribute__((always_inline)) void\n pkt4_work_dma(\n \tstruct rte_mbuf **pkts,\n \tvoid *arg,\n@@ -173,10 +173,10 @@ pkt4_work_dma(\n \n \t/* Read (dma_dst), compute (hash), write (hash) */\n \tif (hash_enabled) {\n-\t\tuint32_t hash0 = p->f_hash(dma_dst0, dma_size, 0);\n-\t\tuint32_t hash1 = p->f_hash(dma_dst1, dma_size, 0);\n-\t\tuint32_t hash2 = p->f_hash(dma_dst2, dma_size, 0);\n-\t\tuint32_t hash3 = p->f_hash(dma_dst3, dma_size, 0);\n+\t\tuint32_t hash0 = p->f_hash(dma_src0, dma_mask, dma_size, 0);\n+\t\tuint32_t hash1 = p->f_hash(dma_src1, dma_mask, dma_size, 0);\n+\t\tuint32_t hash2 = p->f_hash(dma_src2, dma_mask, dma_size, 0);\n+\t\tuint32_t hash3 = p->f_hash(dma_src3, dma_mask, dma_size, 0);\n \n \t\t*dma_hash0 = hash0;\n \t\t*dma_hash1 = hash1;\n@@ -217,7 +217,7 @@ pkt4_work_dma(\n \t}\n }\n \n-static __rte_always_inline void\n+static inline __attribute__((always_inline)) void\n pkt_work_swap(\n \tstruct rte_mbuf *pkt,\n \tvoid *arg)\n@@ -241,7 +241,7 @@ pkt_work_swap(\n \t}\n }\n \n-static __rte_always_inline void\n+static inline __attribute__((always_inline)) void\n pkt4_work_swap(\n \tstruct rte_mbuf **pkts,\n \tvoid *arg)\ndiff --git a/examples/ip_pipeline/pipeline/pipeline_routing_be.c b/examples/ip_pipeline/pipeline/pipeline_routing_be.c\nindex 7831716..d281e65 100644\n--- a/examples/ip_pipeline/pipeline/pipeline_routing_be.c\n+++ b/examples/ip_pipeline/pipeline/pipeline_routing_be.c\n@@ -191,7 +191,7 @@ struct layout {\n \tdst->c = src->c;\t\t\t\t\t\\\n }\n \n-static __rte_always_inline void\n+static inline __attribute__((always_inline)) void\n pkt_work_routing(\n \tstruct rte_mbuf *pkt,\n \tstruct rte_pipeline_table_entry *table_entry,\n@@ -317,7 +317,7 @@ pkt_work_routing(\n \t}\n }\n \n-static __rte_always_inline void\n+static inline __attribute__((always_inline)) void\n pkt4_work_routing(\n \tstruct rte_mbuf **pkts,\n \tstruct rte_pipeline_table_entry **table_entries,\n@@ -1349,17 +1349,19 @@ pipeline_routing_init(struct pipeline_params *params,\n \n \t/* ARP table configuration */\n \tif (p_rt->params.n_arp_entries) {\n-\t\tstruct rte_table_hash_key8_ext_params table_arp_params = {\n-\t\t\t.n_entries = p_rt->params.n_arp_entries,\n-\t\t\t.n_entries_ext = p_rt->params.n_arp_entries,\n+\t\tstruct rte_table_hash_params table_arp_params = {\n+\t\t\t.name = p->name,\n+\t\t\t.key_size = 8,\n+\t\t\t.key_offset = p_rt->params.arp_key_offset,\n+\t\t\t.key_mask = NULL,\n+\t\t\t.n_keys = p_rt->params.n_arp_entries,\n+\t\t\t.n_buckets = p_rt->params.n_arp_entries / 4,\n \t\t\t.f_hash = hash_default_key8,\n \t\t\t.seed = 0,\n-\t\t\t.signature_offset = 0, /* Unused */\n-\t\t\t.key_offset = p_rt->params.arp_key_offset,\n \t\t};\n \n \t\tstruct rte_pipeline_table_params table_params = {\n-\t\t\t.ops = &rte_table_hash_key8_ext_dosig_ops,\n+\t\t\t.ops = &rte_table_hash_key8_ext_ops,\n \t\t\t.arg_create = &table_arp_params,\n \t\t\t.f_action_hit = get_arp_table_ah_hit(p_rt),\n \t\t\t.f_action_miss = NULL,\n",
    "prefixes": [
        "dpdk-dev",
        "V2",
        "4/5"
    ]
}