get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 7454,
    "url": "https://patches.dpdk.org/api/patches/7454/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1444067692-29645-15-git-send-email-adrien.mazarguil@6wind.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": "<1444067692-29645-15-git-send-email-adrien.mazarguil@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1444067692-29645-15-git-send-email-adrien.mazarguil@6wind.com",
    "date": "2015-10-05T17:54:49",
    "name": "[dpdk-dev,14/17] mlx5: use experimental flows in hash RX queues",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "d0588a25ed128f942ce8529ee9fbb6e43d18cd83",
    "submitter": {
        "id": 165,
        "url": "https://patches.dpdk.org/api/people/165/?format=api",
        "name": "Adrien Mazarguil",
        "email": "adrien.mazarguil@6wind.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1444067692-29645-15-git-send-email-adrien.mazarguil@6wind.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/7454/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/7454/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 2F67C9414;\n\tMon,  5 Oct 2015 19:55:46 +0200 (CEST)",
            "from mail-wi0-f176.google.com (mail-wi0-f176.google.com\n\t[209.85.212.176]) by dpdk.org (Postfix) with ESMTP id 516749412\n\tfor <dev@dpdk.org>; Mon,  5 Oct 2015 19:55:44 +0200 (CEST)",
            "by wiclk2 with SMTP id lk2so126024568wic.1\n\tfor <dev@dpdk.org>; Mon, 05 Oct 2015 10:55:44 -0700 (PDT)",
            "from 6wind.com (guy78-3-82-239-227-177.fbx.proxad.net.\n\t[82.239.227.177]) by smtp.gmail.com with ESMTPSA id\n\tjc9sm15826699wic.6.2015.10.05.10.55.43\n\t(version=TLSv1.2 cipher=RC4-SHA bits=128/128);\n\tMon, 05 Oct 2015 10:55:43 -0700 (PDT)"
        ],
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=QZ4Uuwvyf7338ec0o7eipfAj7oavmfrLAvhg35mLXbU=;\n\tb=ONoxHGerd2B+Ud9Jgb+pUcP4ZzeGXqMSVzl31i6VeSA7TBtPN7FLQEPh+GYdzFGUYT\n\tEvT1e/Z+lKAGp0j7DYabUHzpylGGTd/7gOCC2hiATYBjuFjfephX6/A8eVlYSmW94F/W\n\tFneg5WwYf91HimhvWYYjWx2g2H5tG3WmjlvFzCQQh3XfyolxLuhgYO/u7lXtHFyfkr/Y\n\tvQMuBCYVzC2cc9d22Sfa5MctqUgaFVK20Ozuu8325KpNa2AiqfyDzByBUtK49fFDwStx\n\tFP9VdRZIFNPtr12z/K88d1nr9PuBZUAK8oKutHAV4pkaDLbVpRntwRYhcs21L4sphYhm\n\tRKzQ==",
        "X-Gm-Message-State": "ALoCoQkE2z1n/jxu/Nfc2+MDFKJZUBwmFLJZa20GjY3pyafAkRSVKKCdN8P3N7IsAvSC0ZLeot+k",
        "X-Received": "by 10.180.187.141 with SMTP id\n\tfs13mr14213968wic.13.1444067744182; \n\tMon, 05 Oct 2015 10:55:44 -0700 (PDT)",
        "From": "Adrien Mazarguil <adrien.mazarguil@6wind.com>",
        "To": "dev@dpdk.org",
        "Date": "Mon,  5 Oct 2015 19:54:49 +0200",
        "Message-Id": "<1444067692-29645-15-git-send-email-adrien.mazarguil@6wind.com>",
        "X-Mailer": "git-send-email 2.1.0",
        "In-Reply-To": "<1444067692-29645-1-git-send-email-adrien.mazarguil@6wind.com>",
        "References": "<1444067692-29645-1-git-send-email-adrien.mazarguil@6wind.com>",
        "Subject": "[dpdk-dev] [PATCH 14/17] mlx5: use experimental flows in hash RX\n\tqueues",
        "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": "This is done because normal flows cannot support IPv6 at the moment.\n\nSigned-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>\nSigned-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>\n---\n drivers/net/mlx5/mlx5_mac.c    | 18 +++++++++---------\n drivers/net/mlx5/mlx5_rxmode.c | 18 +++++++++---------\n drivers/net/mlx5/mlx5_rxq.c    | 14 +++++++-------\n drivers/net/mlx5/mlx5_rxtx.h   | 14 +++++++-------\n 4 files changed, 32 insertions(+), 32 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx5/mlx5_mac.c b/drivers/net/mlx5/mlx5_mac.c\nindex bf69095..05e2484 100644\n--- a/drivers/net/mlx5/mlx5_mac.c\n+++ b/drivers/net/mlx5/mlx5_mac.c\n@@ -116,8 +116,8 @@ hash_rxq_del_flow(struct hash_rxq *hash_rxq, unsigned int mac_index,\n \t      (void *)hash_rxq,\n \t      (*mac)[0], (*mac)[1], (*mac)[2], (*mac)[3], (*mac)[4], (*mac)[5],\n \t      mac_index, priv->vlan_filter[vlan_index].id);\n-\tclaim_zero(ibv_destroy_flow(hash_rxq->mac_flow\n-\t\t\t\t    [mac_index][vlan_index]));\n+\tclaim_zero(ibv_exp_destroy_flow(hash_rxq->mac_flow\n+\t\t\t\t\t[mac_index][vlan_index]));\n \thash_rxq->mac_flow[mac_index][vlan_index] = NULL;\n }\n \n@@ -246,15 +246,15 @@ static int\n hash_rxq_add_flow(struct hash_rxq *hash_rxq, unsigned int mac_index,\n \t\t  unsigned int vlan_index)\n {\n-\tstruct ibv_flow *flow;\n+\tstruct ibv_exp_flow *flow;\n \tstruct priv *priv = hash_rxq->priv;\n \tconst uint8_t (*mac)[ETHER_ADDR_LEN] =\n \t\t\t(const uint8_t (*)[ETHER_ADDR_LEN])\n \t\t\tpriv->mac[mac_index].addr_bytes;\n \tFLOW_ATTR_SPEC_ETH(data, priv_populate_flow_attr(priv, NULL, 0,\n \t\t\t\t\t\t\t hash_rxq->type));\n-\tstruct ibv_flow_attr *attr = &data->attr;\n-\tstruct ibv_flow_spec_eth *spec = &data->spec;\n+\tstruct ibv_exp_flow_attr *attr = &data->attr;\n+\tstruct ibv_exp_flow_spec_eth *spec = &data->spec;\n \n \tassert(mac_index < RTE_DIM(priv->mac));\n \tassert((vlan_index < RTE_DIM(priv->vlan_filter)) || (vlan_index == -1u));\n@@ -265,10 +265,10 @@ hash_rxq_add_flow(struct hash_rxq *hash_rxq, unsigned int mac_index,\n \tassert(((uint8_t *)attr + sizeof(*attr)) == (uint8_t *)spec);\n \tpriv_populate_flow_attr(priv, attr, sizeof(data), hash_rxq->type);\n \t/* The first specification must be Ethernet. */\n-\tassert(spec->type == IBV_FLOW_SPEC_ETH);\n+\tassert(spec->type == IBV_EXP_FLOW_SPEC_ETH);\n \tassert(spec->size == sizeof(*spec));\n-\t*spec = (struct ibv_flow_spec_eth){\n-\t\t.type = IBV_FLOW_SPEC_ETH,\n+\t*spec = (struct ibv_exp_flow_spec_eth){\n+\t\t.type = IBV_EXP_FLOW_SPEC_ETH,\n \t\t.size = sizeof(*spec),\n \t\t.val = {\n \t\t\t.dst_mac = {\n@@ -293,7 +293,7 @@ hash_rxq_add_flow(struct hash_rxq *hash_rxq, unsigned int mac_index,\n \t      ((vlan_index != -1u) ? priv->vlan_filter[vlan_index].id : -1u));\n \t/* Create related flow. */\n \terrno = 0;\n-\tflow = ibv_create_flow(hash_rxq->qp, attr);\n+\tflow = ibv_exp_create_flow(hash_rxq->qp, attr);\n \tif (flow == NULL) {\n \t\t/* It's not clear whether errno is always set in this case. */\n \t\tERROR(\"%p: flow configuration failed, errno=%d: %s\",\ndiff --git a/drivers/net/mlx5/mlx5_rxmode.c b/drivers/net/mlx5/mlx5_rxmode.c\nindex 578f2fb..9b1551f 100644\n--- a/drivers/net/mlx5/mlx5_rxmode.c\n+++ b/drivers/net/mlx5/mlx5_rxmode.c\n@@ -73,11 +73,11 @@ static void hash_rxq_allmulticast_disable(struct hash_rxq *);\n static int\n hash_rxq_promiscuous_enable(struct hash_rxq *hash_rxq)\n {\n-\tstruct ibv_flow *flow;\n+\tstruct ibv_exp_flow *flow;\n \tstruct priv *priv = hash_rxq->priv;\n \tFLOW_ATTR_SPEC_ETH(data, priv_populate_flow_attr(priv, NULL, 0,\n \t\t\t\t\t\t\t hash_rxq->type));\n-\tstruct ibv_flow_attr *attr = &data->attr;\n+\tstruct ibv_exp_flow_attr *attr = &data->attr;\n \n \tif (hash_rxq->priv->vf)\n \t\treturn 0;\n@@ -88,7 +88,7 @@ hash_rxq_promiscuous_enable(struct hash_rxq *hash_rxq)\n \t * on specific MAC addresses. */\n \tpriv_populate_flow_attr(priv, attr, sizeof(data), hash_rxq->type);\n \terrno = 0;\n-\tflow = ibv_create_flow(hash_rxq->qp, attr);\n+\tflow = ibv_exp_create_flow(hash_rxq->qp, attr);\n \tif (flow == NULL) {\n \t\t/* It's not clear whether errno is always set in this case. */\n \t\tERROR(\"%p: flow configuration failed, errno=%d: %s\",\n@@ -176,7 +176,7 @@ hash_rxq_promiscuous_disable(struct hash_rxq *hash_rxq)\n \tDEBUG(\"%p: disabling promiscuous mode\", (void *)hash_rxq);\n \tif (hash_rxq->promisc_flow == NULL)\n \t\treturn;\n-\tclaim_zero(ibv_destroy_flow(hash_rxq->promisc_flow));\n+\tclaim_zero(ibv_exp_destroy_flow(hash_rxq->promisc_flow));\n \thash_rxq->promisc_flow = NULL;\n \tDEBUG(\"%p: promiscuous mode disabled\", (void *)hash_rxq);\n }\n@@ -234,9 +234,9 @@ mlx5_promiscuous_disable(struct rte_eth_dev *dev)\n static int\n hash_rxq_allmulticast_enable(struct hash_rxq *hash_rxq)\n {\n-\tstruct ibv_flow *flow;\n-\tstruct ibv_flow_attr attr = {\n-\t\t.type = IBV_FLOW_ATTR_MC_DEFAULT,\n+\tstruct ibv_exp_flow *flow;\n+\tstruct ibv_exp_flow_attr attr = {\n+\t\t.type = IBV_EXP_FLOW_ATTR_MC_DEFAULT,\n \t\t.num_of_specs = 0,\n \t\t.port = hash_rxq->priv->port,\n \t\t.flags = 0\n@@ -246,7 +246,7 @@ hash_rxq_allmulticast_enable(struct hash_rxq *hash_rxq)\n \tif (hash_rxq->allmulti_flow != NULL)\n \t\treturn EBUSY;\n \terrno = 0;\n-\tflow = ibv_create_flow(hash_rxq->qp, &attr);\n+\tflow = ibv_exp_create_flow(hash_rxq->qp, &attr);\n \tif (flow == NULL) {\n \t\t/* It's not clear whether errno is always set in this case. */\n \t\tERROR(\"%p: flow configuration failed, errno=%d: %s\",\n@@ -327,7 +327,7 @@ hash_rxq_allmulticast_disable(struct hash_rxq *hash_rxq)\n \tDEBUG(\"%p: disabling allmulticast mode\", (void *)hash_rxq);\n \tif (hash_rxq->allmulti_flow == NULL)\n \t\treturn;\n-\tclaim_zero(ibv_destroy_flow(hash_rxq->allmulti_flow));\n+\tclaim_zero(ibv_exp_destroy_flow(hash_rxq->allmulti_flow));\n \thash_rxq->allmulti_flow = NULL;\n \tDEBUG(\"%p: allmulticast mode disabled\", (void *)hash_rxq);\n }\ndiff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c\nindex 283e56b..717824c 100644\n--- a/drivers/net/mlx5/mlx5_rxq.c\n+++ b/drivers/net/mlx5/mlx5_rxq.c\n@@ -74,7 +74,7 @@ const struct hash_rxq_init hash_rxq_init[] = {\n \t\t.dpdk_rss_hf = ETH_RSS_NONFRAG_IPV4_TCP,\n \t\t.flow_priority = 0,\n \t\t.flow_spec.tcp_udp = {\n-\t\t\t.type = IBV_FLOW_SPEC_TCP,\n+\t\t\t.type = IBV_EXP_FLOW_SPEC_TCP,\n \t\t\t.size = sizeof(hash_rxq_init[0].flow_spec.tcp_udp),\n \t\t},\n \t\t.underlayer = &hash_rxq_init[HASH_RXQ_IPv4],\n@@ -87,7 +87,7 @@ const struct hash_rxq_init hash_rxq_init[] = {\n \t\t.dpdk_rss_hf = ETH_RSS_NONFRAG_IPV4_UDP,\n \t\t.flow_priority = 0,\n \t\t.flow_spec.tcp_udp = {\n-\t\t\t.type = IBV_FLOW_SPEC_UDP,\n+\t\t\t.type = IBV_EXP_FLOW_SPEC_UDP,\n \t\t\t.size = sizeof(hash_rxq_init[0].flow_spec.tcp_udp),\n \t\t},\n \t\t.underlayer = &hash_rxq_init[HASH_RXQ_IPv4],\n@@ -99,7 +99,7 @@ const struct hash_rxq_init hash_rxq_init[] = {\n \t\t\t\tETH_RSS_FRAG_IPV4),\n \t\t.flow_priority = 1,\n \t\t.flow_spec.ipv4 = {\n-\t\t\t.type = IBV_FLOW_SPEC_IPV4,\n+\t\t\t.type = IBV_EXP_FLOW_SPEC_IPV4,\n \t\t\t.size = sizeof(hash_rxq_init[0].flow_spec.ipv4),\n \t\t},\n \t\t.underlayer = &hash_rxq_init[HASH_RXQ_ETH],\n@@ -109,7 +109,7 @@ const struct hash_rxq_init hash_rxq_init[] = {\n \t\t.dpdk_rss_hf = 0,\n \t\t.flow_priority = 2,\n \t\t.flow_spec.eth = {\n-\t\t\t.type = IBV_FLOW_SPEC_ETH,\n+\t\t\t.type = IBV_EXP_FLOW_SPEC_ETH,\n \t\t\t.size = sizeof(hash_rxq_init[0].flow_spec.eth),\n \t\t},\n \t\t.underlayer = NULL,\n@@ -176,7 +176,7 @@ const size_t rss_hash_default_key_len = sizeof(rss_hash_default_key);\n  */\n size_t\n priv_populate_flow_attr(const struct priv *priv,\n-\t\t\tstruct ibv_flow_attr *flow_attr,\n+\t\t\tstruct ibv_exp_flow_attr *flow_attr,\n \t\t\tsize_t flow_attr_size,\n \t\t\tenum hash_rxq_type type)\n {\n@@ -192,8 +192,8 @@ priv_populate_flow_attr(const struct priv *priv,\n \t\treturn offset;\n \tflow_attr_size = offset;\n \tinit = &hash_rxq_init[type];\n-\t*flow_attr = (struct ibv_flow_attr){\n-\t\t.type = IBV_FLOW_ATTR_NORMAL,\n+\t*flow_attr = (struct ibv_exp_flow_attr){\n+\t\t.type = IBV_EXP_FLOW_ATTR_NORMAL,\n \t\t.priority = init->flow_priority,\n \t\t.num_of_specs = 0,\n \t\t.port = priv->port,\ndiff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h\nindex 0db4393..4018ac1 100644\n--- a/drivers/net/mlx5/mlx5_rxtx.h\n+++ b/drivers/net/mlx5/mlx5_rxtx.h\n@@ -133,8 +133,8 @@ enum hash_rxq_type {\n /* Flow structure with Ethernet specification. It is packed to prevent padding\n  * between attr and spec as this layout is expected by libibverbs. */\n struct flow_attr_spec_eth {\n-\tstruct ibv_flow_attr attr;\n-\tstruct ibv_flow_spec_eth spec;\n+\tstruct ibv_exp_flow_attr attr;\n+\tstruct ibv_exp_flow_spec_eth spec;\n } __attribute__((packed));\n \n /* Define a struct flow_attr_spec_eth object as an array of at least\n@@ -150,7 +150,7 @@ struct hash_rxq_init {\n \tuint64_t hash_fields; /* Fields that participate in the hash. */\n \tuint64_t dpdk_rss_hf; /* Matching DPDK RSS hash fields. */\n \tunsigned int flow_priority; /* Flow priority to use. */\n-\tstruct ibv_flow_spec flow_spec; /* Flow specification template. */\n+\tstruct ibv_exp_flow_spec flow_spec; /* Flow specification template. */\n \tconst struct hash_rxq_init *underlayer; /* Pointer to underlayer. */\n };\n \n@@ -168,9 +168,9 @@ struct hash_rxq {\n \tenum hash_rxq_type type; /* Hash RX queue type. */\n \t/* Each VLAN ID requires a separate flow steering rule. */\n \tBITFIELD_DECLARE(mac_configured, uint32_t, MLX5_MAX_MAC_ADDRESSES);\n-\tstruct ibv_flow *mac_flow[MLX5_MAX_MAC_ADDRESSES][MLX5_MAX_VLAN_IDS];\n-\tstruct ibv_flow *promisc_flow; /* Promiscuous flow. */\n-\tstruct ibv_flow *allmulti_flow; /* Multicast flow. */\n+\tstruct ibv_exp_flow *mac_flow[MLX5_MAX_MAC_ADDRESSES][MLX5_MAX_VLAN_IDS];\n+\tstruct ibv_exp_flow *promisc_flow; /* Promiscuous flow. */\n+\tstruct ibv_exp_flow *allmulti_flow; /* Multicast flow. */\n };\n \n /* TX element. */\n@@ -223,7 +223,7 @@ extern const unsigned int hash_rxq_init_n;\n extern uint8_t rss_hash_default_key[];\n extern const size_t rss_hash_default_key_len;\n \n-size_t priv_populate_flow_attr(const struct priv *, struct ibv_flow_attr *,\n+size_t priv_populate_flow_attr(const struct priv *, struct ibv_exp_flow_attr *,\n \t\t\t       size_t, enum hash_rxq_type);\n int priv_create_hash_rxqs(struct priv *);\n void priv_destroy_hash_rxqs(struct priv *);\n",
    "prefixes": [
        "dpdk-dev",
        "14/17"
    ]
}