get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 28952,
    "url": "https://patches.dpdk.org/api/patches/28952/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1505831512-127244-2-git-send-email-xuemingl@mellanox.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": "<1505831512-127244-2-git-send-email-xuemingl@mellanox.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1505831512-127244-2-git-send-email-xuemingl@mellanox.com",
    "date": "2017-09-19T14:31:48",
    "name": "[dpdk-dev,v4,1/5] net/mlx5: change eth device reference for secondary process",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "5dacbad7543ad2523dddd3f020ab591c0190b83b",
    "submitter": {
        "id": 814,
        "url": "https://patches.dpdk.org/api/people/814/?format=api",
        "name": "Xueming Li",
        "email": "xuemingl@mellanox.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1505831512-127244-2-git-send-email-xuemingl@mellanox.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/28952/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/28952/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 F15841B1BD;\n\tTue, 19 Sep 2017 16:32:21 +0200 (CEST)",
            "from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])\n\tby dpdk.org (Postfix) with ESMTP id A523D1B1BC\n\tfor <dev@dpdk.org>; Tue, 19 Sep 2017 16:32:20 +0200 (CEST)",
            "from Internal Mail-Server by MTLPINE1 (envelope-from\n\txuemingl@mellanox.com)\n\twith ESMTPS (AES256-SHA encrypted); 19 Sep 2017 17:32:15 +0300",
            "from dev-r630-05.mtbc.labs.mlnx (dev-r630-05.mtbc.labs.mlnx\n\t[10.12.205.160])\n\tby labmailer.mlnx (8.13.8/8.13.8) with ESMTP id v8JEWEGd013103;\n\tTue, 19 Sep 2017 17:32:15 +0300",
            "from dev-r630-05.mtbc.labs.mlnx (localhost [127.0.0.1])\n\tby dev-r630-05.mtbc.labs.mlnx (8.14.7/8.14.7) with ESMTP id\n\tv8JEWExV127304; Tue, 19 Sep 2017 22:32:14 +0800",
            "(from xuemingl@localhost)\n\tby dev-r630-05.mtbc.labs.mlnx (8.14.7/8.14.7/Submit) id\n\tv8JEWE4T127303; Tue, 19 Sep 2017 22:32:14 +0800"
        ],
        "From": "Xueming Li <xuemingl@mellanox.com>",
        "To": "Nelio Laranjeiro <nelio.laranjeiro@6wind.com>,\n\tAdrien Mazarguil <adrien.mazarguil@6wind.com>",
        "Cc": "Xueming Li <xuemingl@mellanox.com>, dev@dpdk.org",
        "Date": "Tue, 19 Sep 2017 22:31:48 +0800",
        "Message-Id": "<1505831512-127244-2-git-send-email-xuemingl@mellanox.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": [
            "<1505831512-127244-1-git-send-email-xuemingl@mellanox.com>",
            "<20170824140341.95471-1-xuemingl@mellanox.com>"
        ],
        "References": [
            "<1505831512-127244-1-git-send-email-xuemingl@mellanox.com>",
            "<20170824140341.95471-1-xuemingl@mellanox.com>"
        ],
        "Subject": "[dpdk-dev] [PATCH v4 1/5] net/mlx5: change eth device reference for\n\tsecondary process",
        "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": "rte_eth_dev created by primary process were not available in secondary\nprocess, it was not possible to use the primary process local memory\nobject from a secondary process.\n\nThis patch modify the reference of primary rte_eth_dev object, use\nlocal rte_eth_dev secondary process instead.\n\nSigned-off-by: Xueming Li <xuemingl@mellanox.com>\nAcked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>\n---\n drivers/net/mlx5/mlx5.h         |  6 +++---\n drivers/net/mlx5/mlx5_ethdev.c  | 47 ++++++++++++++++++++++++-----------------\n drivers/net/mlx5/mlx5_fdir.c    |  2 ++\n drivers/net/mlx5/mlx5_rss.c     |  1 +\n drivers/net/mlx5/mlx5_rxq.c     |  1 +\n drivers/net/mlx5/mlx5_trigger.c |  4 ++--\n 6 files changed, 37 insertions(+), 24 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h\nindex ab03fe0..78b27ed 100644\n--- a/drivers/net/mlx5/mlx5.h\n+++ b/drivers/net/mlx5/mlx5.h\n@@ -87,7 +87,7 @@ struct mlx5_xstats_ctrl {\n };\n \n struct priv {\n-\tstruct rte_eth_dev *dev; /* Ethernet device. */\n+\tstruct rte_eth_dev *dev; /* Ethernet device of master process. */\n \tstruct ibv_context *ctx; /* Verbs context. */\n \tstruct ibv_device_attr_ex device_attr; /* Device properties. */\n \tstruct ibv_pd *pd; /* Protection Domain. */\n@@ -208,8 +208,8 @@ int mlx5_ibv_device_to_pci_addr(const struct ibv_device *,\n void priv_dev_interrupt_handler_install(struct priv *, struct rte_eth_dev *);\n int mlx5_set_link_down(struct rte_eth_dev *dev);\n int mlx5_set_link_up(struct rte_eth_dev *dev);\n-void priv_select_tx_function(struct priv *);\n-void priv_select_rx_function(struct priv *);\n+void priv_dev_select_tx_function(struct priv *priv, struct rte_eth_dev *dev);\n+void priv_dev_select_rx_function(struct priv *priv, struct rte_eth_dev *dev);\n \n /* mlx5_mac.c */\n \ndiff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c\nindex 6f17a95..c1affba 100644\n--- a/drivers/net/mlx5/mlx5_ethdev.c\n+++ b/drivers/net/mlx5/mlx5_ethdev.c\n@@ -1260,7 +1260,9 @@ struct priv *\n  * Change the link state (UP / DOWN).\n  *\n  * @param priv\n- *   Pointer to Ethernet device structure.\n+ *   Pointer to private data structure.\n+ * @param dev\n+ *   Pointer to rte_eth_dev structure.\n  * @param up\n  *   Nonzero for link up, otherwise link down.\n  *\n@@ -1268,17 +1270,16 @@ struct priv *\n  *   0 on success, errno value on failure.\n  */\n static int\n-priv_set_link(struct priv *priv, int up)\n+priv_dev_set_link(struct priv *priv, struct rte_eth_dev *dev, int up)\n {\n-\tstruct rte_eth_dev *dev = priv->dev;\n \tint err;\n \n \tif (up) {\n \t\terr = priv_set_flags(priv, ~IFF_UP, IFF_UP);\n \t\tif (err)\n \t\t\treturn err;\n-\t\tpriv_select_tx_function(priv);\n-\t\tpriv_select_rx_function(priv);\n+\t\tpriv_dev_select_tx_function(priv, dev);\n+\t\tpriv_dev_select_rx_function(priv, dev);\n \t} else {\n \t\terr = priv_set_flags(priv, ~IFF_UP, ~IFF_UP);\n \t\tif (err)\n@@ -1305,7 +1306,7 @@ struct priv *\n \tint err;\n \n \tpriv_lock(priv);\n-\terr = priv_set_link(priv, 0);\n+\terr = priv_dev_set_link(priv, dev, 0);\n \tpriv_unlock(priv);\n \treturn err;\n }\n@@ -1326,7 +1327,7 @@ struct priv *\n \tint err;\n \n \tpriv_lock(priv);\n-\terr = priv_set_link(priv, 1);\n+\terr = priv_dev_set_link(priv, dev, 1);\n \tpriv_unlock(priv);\n \treturn err;\n }\n@@ -1335,29 +1336,33 @@ struct priv *\n  * Configure the TX function to use.\n  *\n  * @param priv\n- *   Pointer to private structure.\n+ *   Pointer to private data structure.\n+ * @param dev\n+ *   Pointer to rte_eth_dev structure.\n  */\n void\n-priv_select_tx_function(struct priv *priv)\n+priv_dev_select_tx_function(struct priv *priv, struct rte_eth_dev *dev)\n {\n-\tpriv->dev->tx_pkt_burst = mlx5_tx_burst;\n+\tassert(priv != NULL);\n+\tassert(dev != NULL);\n+\tdev->tx_pkt_burst = mlx5_tx_burst;\n \t/* Select appropriate TX function. */\n \tif (priv->mps == MLX5_MPW_ENHANCED) {\n \t\tif (priv_check_vec_tx_support(priv) > 0) {\n \t\t\tif (priv_check_raw_vec_tx_support(priv) > 0)\n-\t\t\t\tpriv->dev->tx_pkt_burst = mlx5_tx_burst_raw_vec;\n+\t\t\t\tdev->tx_pkt_burst = mlx5_tx_burst_raw_vec;\n \t\t\telse\n-\t\t\t\tpriv->dev->tx_pkt_burst = mlx5_tx_burst_vec;\n+\t\t\t\tdev->tx_pkt_burst = mlx5_tx_burst_vec;\n \t\t\tDEBUG(\"selected Enhanced MPW TX vectorized function\");\n \t\t} else {\n-\t\t\tpriv->dev->tx_pkt_burst = mlx5_tx_burst_empw;\n+\t\t\tdev->tx_pkt_burst = mlx5_tx_burst_empw;\n \t\t\tDEBUG(\"selected Enhanced MPW TX function\");\n \t\t}\n \t} else if (priv->mps && priv->txq_inline) {\n-\t\tpriv->dev->tx_pkt_burst = mlx5_tx_burst_mpw_inline;\n+\t\tdev->tx_pkt_burst = mlx5_tx_burst_mpw_inline;\n \t\tDEBUG(\"selected MPW inline TX function\");\n \t} else if (priv->mps) {\n-\t\tpriv->dev->tx_pkt_burst = mlx5_tx_burst_mpw;\n+\t\tdev->tx_pkt_burst = mlx5_tx_burst_mpw;\n \t\tDEBUG(\"selected MPW TX function\");\n \t}\n }\n@@ -1366,15 +1371,19 @@ struct priv *\n  * Configure the RX function to use.\n  *\n  * @param priv\n- *   Pointer to private structure.\n+ *   Pointer to private data structure.\n+ * @param dev\n+ *   Pointer to rte_eth_dev structure.\n  */\n void\n-priv_select_rx_function(struct priv *priv)\n+priv_dev_select_rx_function(struct priv *priv, struct rte_eth_dev *dev)\n {\n+\tassert(priv != NULL);\n+\tassert(dev != NULL);\n \tif (priv_check_vec_rx_support(priv) > 0) {\n-\t\tpriv->dev->rx_pkt_burst = mlx5_rx_burst_vec;\n+\t\tdev->rx_pkt_burst = mlx5_rx_burst_vec;\n \t\tDEBUG(\"selected RX vectorized function\");\n \t} else {\n-\t\tpriv->dev->rx_pkt_burst = mlx5_rx_burst;\n+\t\tdev->rx_pkt_burst = mlx5_rx_burst;\n \t}\n }\ndiff --git a/drivers/net/mlx5/mlx5_fdir.c b/drivers/net/mlx5/mlx5_fdir.c\nindex acae668..66e3818 100644\n--- a/drivers/net/mlx5/mlx5_fdir.c\n+++ b/drivers/net/mlx5/mlx5_fdir.c\n@@ -1068,6 +1068,8 @@ struct mlx5_fdir_filter {\n \tint ret = EINVAL;\n \tstruct priv *priv = dev->data->dev_private;\n \n+\tif (mlx5_is_secondary())\n+\t\treturn -E_RTE_SECONDARY;\n \tswitch (filter_type) {\n \tcase RTE_ETH_FILTER_GENERIC:\n \t\tif (filter_op != RTE_ETH_FILTER_GET)\ndiff --git a/drivers/net/mlx5/mlx5_rss.c b/drivers/net/mlx5/mlx5_rss.c\nindex 1249943..d3d2603 100644\n--- a/drivers/net/mlx5/mlx5_rss.c\n+++ b/drivers/net/mlx5/mlx5_rss.c\n@@ -350,6 +350,7 @@\n \tint ret;\n \tstruct priv *priv = dev->data->dev_private;\n \n+\tassert(!mlx5_is_secondary());\n \tmlx5_dev_stop(dev);\n \tpriv_lock(priv);\n \tret = priv_dev_rss_reta_update(priv, reta_conf, reta_size);\ndiff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c\nindex 22448c9..b71f72f 100644\n--- a/drivers/net/mlx5/mlx5_rxq.c\n+++ b/drivers/net/mlx5/mlx5_rxq.c\n@@ -1250,6 +1250,7 @@\n \tunsigned int count = 0;\n \tstruct rte_intr_handle *intr_handle = priv->dev->intr_handle;\n \n+\tassert(!mlx5_is_secondary());\n \tif (!priv->dev->data->dev_conf.intr_conf.rxq)\n \t\treturn 0;\n \tpriv_rx_intr_vec_disable(priv);\ndiff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c\nindex 3fa9401..51c31aa 100644\n--- a/drivers/net/mlx5/mlx5_trigger.c\n+++ b/drivers/net/mlx5/mlx5_trigger.c\n@@ -66,8 +66,8 @@\n \t\treturn 0;\n \t}\n \t/* Update Rx/Tx callback. */\n-\tpriv_select_tx_function(priv);\n-\tpriv_select_rx_function(priv);\n+\tpriv_dev_select_tx_function(priv, dev);\n+\tpriv_dev_select_rx_function(priv, dev);\n \tDEBUG(\"%p: allocating and configuring hash RX queues\", (void *)dev);\n \terr = priv_create_hash_rxqs(priv);\n \tif (!err)\n",
    "prefixes": [
        "dpdk-dev",
        "v4",
        "1/5"
    ]
}