get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 48803,
    "url": "https://patches.dpdk.org/api/patches/48803/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1544773540-89825-3-git-send-email-jia.guo@intel.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": "<1544773540-89825-3-git-send-email-jia.guo@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1544773540-89825-3-git-send-email-jia.guo@intel.com",
    "date": "2018-12-14T07:45:39",
    "name": "[2/3] ethdev: remove ethdev rmv interrupt",
    "commit_ref": null,
    "pull_url": null,
    "state": "rejected",
    "archived": true,
    "hash": "44c08eb404c3e4a0455a1ffa2db9d509b4ea062b",
    "submitter": {
        "id": 507,
        "url": "https://patches.dpdk.org/api/people/507/?format=api",
        "name": "Guo, Jia",
        "email": "jia.guo@intel.com"
    },
    "delegate": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1544773540-89825-3-git-send-email-jia.guo@intel.com/mbox/",
    "series": [
        {
            "id": 2771,
            "url": "https://patches.dpdk.org/api/series/2771/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=2771",
            "date": "2018-12-14T07:45:37",
            "name": "use a common eal device event for hot-unplug",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/2771/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/48803/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/48803/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 9BB571B70C;\n\tFri, 14 Dec 2018 08:41:36 +0100 (CET)",
            "from mga17.intel.com (mga17.intel.com [192.55.52.151])\n\tby dpdk.org (Postfix) with ESMTP id AB1AC1B70B\n\tfor <dev@dpdk.org>; Fri, 14 Dec 2018 08:41:35 +0100 (CET)",
            "from orsmga006.jf.intel.com ([10.7.209.51])\n\tby fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t13 Dec 2018 23:41:35 -0800",
            "from jeffguo-s2600wt2.sh.intel.com (HELO localhost.localdomain)\n\t([10.67.110.10])\n\tby orsmga006.jf.intel.com with ESMTP; 13 Dec 2018 23:41:32 -0800"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.56,352,1539673200\"; d=\"scan'208\";a=\"100641749\"",
        "From": "Jeff Guo <jia.guo@intel.com>",
        "To": "bernard.iremonger@intel.com, wenzhuo.lu@intel.com, shahafs@mellanox.com, \n\tthomas@monjalon.net, matan@mellanox.com",
        "Cc": "ferruh.yigit@intel.com, konstantin.ananyev@intel.com, dev@dpdk.org,\n\tjia.guo@intel.com, stephen@networkplumber.org, gaetan.rivet@6wind.com,\n\tqi.z.zhang@intel.com, arybchenko@solarflare.com,\n\tbruce.richardson@intel.com, shaopeng.he@intel.com,\n\tanatoly.burakov@intel.com",
        "Date": "Fri, 14 Dec 2018 15:45:39 +0800",
        "Message-Id": "<1544773540-89825-3-git-send-email-jia.guo@intel.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1544773540-89825-1-git-send-email-jia.guo@intel.com>",
        "References": "<1544773540-89825-1-git-send-email-jia.guo@intel.com>",
        "Subject": "[dpdk-dev] [PATCH 2/3] ethdev: remove ethdev rmv interrupt",
        "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": "Since eal device event had been introduced, and application could monitor\neal device event and accordingly handle hot-unplug for device, so the\nethdev rmv event could be replaced by eal device event. This patch aim to\nabandon ethdev rmv interrupt, its every usages in pmd and testpmd will be\nremoved, while use a common way to detect device hotplug.\n\nSigned-off-by: Jeff Guo <jia.guo@intel.com>\n---\n app/test-pmd/parameters.c               |  2 --\n app/test-pmd/testpmd.c                  | 40 +++------------------------------\n drivers/net/failsafe/failsafe_ether.c   | 12 +++++-----\n drivers/net/failsafe/failsafe_ops.c     |  3 +--\n drivers/net/failsafe/failsafe_private.h |  6 ++---\n drivers/net/mlx4/mlx4_intr.c            |  1 -\n drivers/net/mlx5/mlx5_ethdev.c          |  7 +++---\n lib/librte_ethdev/rte_ethdev.h          |  1 -\n 8 files changed, 16 insertions(+), 56 deletions(-)",
    "diff": "diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c\nindex 38b4197..7819b30 100644\n--- a/app/test-pmd/parameters.c\n+++ b/app/test-pmd/parameters.c\n@@ -529,8 +529,6 @@ parse_event_printing_config(const char *optarg, int enable)\n \t\tmask = UINT32_C(1) << RTE_ETH_EVENT_IPSEC;\n \telse if (!strcmp(optarg, \"macsec\"))\n \t\tmask = UINT32_C(1) << RTE_ETH_EVENT_MACSEC;\n-\telse if (!strcmp(optarg, \"intr_rmv\"))\n-\t\tmask = UINT32_C(1) << RTE_ETH_EVENT_INTR_RMV;\n \telse if (!strcmp(optarg, \"dev_probed\"))\n \t\tmask = UINT32_C(1) << RTE_ETH_EVENT_NEW;\n \telse if (!strcmp(optarg, \"dev_released\"))\ndiff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c\nindex 4c75587..bd44b21 100644\n--- a/app/test-pmd/testpmd.c\n+++ b/app/test-pmd/testpmd.c\n@@ -357,7 +357,6 @@ static const char * const eth_event_desc[] = {\n \t[RTE_ETH_EVENT_VF_MBOX] = \"VF mbox\",\n \t[RTE_ETH_EVENT_IPSEC] = \"IPsec\",\n \t[RTE_ETH_EVENT_MACSEC] = \"MACsec\",\n-\t[RTE_ETH_EVENT_INTR_RMV] = \"device removal\",\n \t[RTE_ETH_EVENT_NEW] = \"device probed\",\n \t[RTE_ETH_EVENT_DESTROY] = \"device released\",\n \t[RTE_ETH_EVENT_MAX] = NULL,\n@@ -372,8 +371,8 @@ uint32_t event_print_mask = (UINT32_C(1) << RTE_ETH_EVENT_UNKNOWN) |\n \t\t\t    (UINT32_C(1) << RTE_ETH_EVENT_QUEUE_STATE) |\n \t\t\t    (UINT32_C(1) << RTE_ETH_EVENT_INTR_RESET) |\n \t\t\t    (UINT32_C(1) << RTE_ETH_EVENT_IPSEC) |\n-\t\t\t    (UINT32_C(1) << RTE_ETH_EVENT_MACSEC) |\n-\t\t\t    (UINT32_C(1) << RTE_ETH_EVENT_INTR_RMV);\n+\t\t\t    (UINT32_C(1) << RTE_ETH_EVENT_MACSEC);\n+\n /*\n  * Decide if all memory are locked for performance.\n  */\n@@ -2567,13 +2566,6 @@ eth_event_callback(portid_t port_id, enum rte_eth_event_type type, void *param,\n \t\tports[port_id].need_setup = 1;\n \t\tports[port_id].port_status = RTE_PORT_HANDLING;\n \t\tbreak;\n-\tcase RTE_ETH_EVENT_INTR_RMV:\n-\t\tif (port_id_is_invalid(port_id, DISABLED_WARN))\n-\t\t\tbreak;\n-\t\tif (rte_eal_alarm_set(100000,\n-\t\t\t\trmv_port_callback, (void *)(intptr_t)port_id))\n-\t\t\tfprintf(stderr, \"Could not set up deferred device removal\\n\");\n-\t\tbreak;\n \tdefault:\n \t\tbreak;\n \t}\n@@ -2626,19 +2618,7 @@ dev_event_callback(const char *device_name, enum rte_dev_event_type type,\n \t\t\t\tdevice_name);\n \t\t\treturn;\n \t\t}\n-\t\t/*\n-\t\t * Because the user's callback is invoked in eal interrupt\n-\t\t * callback, the interrupt callback need to be finished before\n-\t\t * it can be unregistered when detaching device. So finish\n-\t\t * callback soon and use a deferred removal to detach device\n-\t\t * is need. It is a workaround, once the device detaching be\n-\t\t * moved into the eal in the future, the deferred removal could\n-\t\t * be deleted.\n-\t\t */\n-\t\tif (rte_eal_alarm_set(100000,\n-\t\t\t\trmv_port_callback, (void *)(intptr_t)port_id))\n-\t\t\tRTE_LOG(ERR, EAL,\n-\t\t\t\t\"Could not set up deferred device removal\\n\");\n+\t\trmv_port_callback((void *)(intptr_t)port_id);\n \t\tbreak;\n \tcase RTE_DEV_EVENT_ADD:\n \t\tRTE_LOG(ERR, EAL, \"The device: %s has been added!\\n\",\n@@ -3170,20 +3150,6 @@ main(int argc, char** argv)\n \tinit_config();\n \n \tif (hot_plug) {\n-\t\tret = rte_dev_hotplug_handle_enable();\n-\t\tif (ret) {\n-\t\t\tRTE_LOG(ERR, EAL,\n-\t\t\t\t\"fail to enable hotplug handling.\");\n-\t\t\treturn -1;\n-\t\t}\n-\n-\t\tret = rte_dev_event_monitor_start();\n-\t\tif (ret) {\n-\t\t\tRTE_LOG(ERR, EAL,\n-\t\t\t\t\"fail to start device event monitoring.\");\n-\t\t\treturn -1;\n-\t\t}\n-\n \t\tret = rte_dev_event_callback_register(NULL,\n \t\t\tdev_event_callback, NULL);\n \t\tif (ret) {\ndiff --git a/drivers/net/failsafe/failsafe_ether.c b/drivers/net/failsafe/failsafe_ether.c\nindex 1783165..e3ddbfa 100644\n--- a/drivers/net/failsafe/failsafe_ether.c\n+++ b/drivers/net/failsafe/failsafe_ether.c\n@@ -345,8 +345,7 @@ failsafe_eth_dev_unregister_callbacks(struct sub_device *sdev)\n \tif (sdev == NULL)\n \t\treturn;\n \tif (sdev->rmv_callback) {\n-\t\tret = rte_eth_dev_callback_unregister(PORT_ID(sdev),\n-\t\t\t\t\t\tRTE_ETH_EVENT_INTR_RMV,\n+\t\tret = rte_dev_event_callback_unregister(sdev->dev->name,\n \t\t\t\t\t\tfailsafe_eth_rmv_event_callback,\n \t\t\t\t\t\tsdev);\n \t\tif (ret)\n@@ -559,10 +558,10 @@ failsafe_stats_increment(struct rte_eth_stats *to, struct rte_eth_stats *from)\n \t}\n }\n \n-int\n-failsafe_eth_rmv_event_callback(uint16_t port_id __rte_unused,\n-\t\t\t\tenum rte_eth_event_type event __rte_unused,\n-\t\t\t\tvoid *cb_arg, void *out __rte_unused)\n+void\n+failsafe_eth_rmv_event_callback(const char *device_name __rte_unused,\n+\t\t\t\tenum rte_dev_event_type event __rte_unused,\n+\t\t\t\tvoid *cb_arg)\n {\n \tstruct sub_device *sdev = cb_arg;\n \n@@ -577,7 +576,6 @@ failsafe_eth_rmv_event_callback(uint16_t port_id __rte_unused,\n \t */\n \tsdev->remove = 1;\n \tfs_unlock(sdev->fs_dev, 0);\n-\treturn 0;\n }\n \n int\ndiff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c\nindex 7f8bcd4..7868f42 100644\n--- a/drivers/net/failsafe/failsafe_ops.c\n+++ b/drivers/net/failsafe/failsafe_ops.c\n@@ -140,8 +140,7 @@ fs_dev_configure(struct rte_eth_dev *dev)\n \t\t\treturn ret;\n \t\t}\n \t\tif (rmv_interrupt && sdev->rmv_callback == 0) {\n-\t\t\tret = rte_eth_dev_callback_register(PORT_ID(sdev),\n-\t\t\t\t\tRTE_ETH_EVENT_INTR_RMV,\n+\t\t\tret = rte_dev_event_callback_register(sdev->dev->name,\n \t\t\t\t\tfailsafe_eth_rmv_event_callback,\n \t\t\t\t\tsdev);\n \t\t\tif (ret)\ndiff --git a/drivers/net/failsafe/failsafe_private.h b/drivers/net/failsafe/failsafe_private.h\nindex 7e31896..163bb98 100644\n--- a/drivers/net/failsafe/failsafe_private.h\n+++ b/drivers/net/failsafe/failsafe_private.h\n@@ -224,9 +224,9 @@ void failsafe_eth_dev_unregister_callbacks(struct sub_device *sdev);\n void failsafe_dev_remove(struct rte_eth_dev *dev);\n void failsafe_stats_increment(struct rte_eth_stats *to,\n \t\t\t\tstruct rte_eth_stats *from);\n-int failsafe_eth_rmv_event_callback(uint16_t port_id,\n-\t\t\t\t    enum rte_eth_event_type type,\n-\t\t\t\t    void *arg, void *out);\n+void failsafe_eth_rmv_event_callback(const char *device_name,\n+\t\t\t\t     enum rte_dev_event_type event,\n+\t\t\t\t     void *cb_arg);\n int failsafe_eth_lsc_event_callback(uint16_t port_id,\n \t\t\t\t    enum rte_eth_event_type event,\n \t\t\t\t    void *cb_arg, void *out);\ndiff --git a/drivers/net/mlx4/mlx4_intr.c b/drivers/net/mlx4/mlx4_intr.c\nindex eeb982a..401cc84 100644\n--- a/drivers/net/mlx4/mlx4_intr.c\n+++ b/drivers/net/mlx4/mlx4_intr.c\n@@ -180,7 +180,6 @@ mlx4_interrupt_handler(struct priv *priv)\n \tenum { LSC, RMV, };\n \tstatic const enum rte_eth_event_type type[] = {\n \t\t[LSC] = RTE_ETH_EVENT_INTR_LSC,\n-\t\t[RMV] = RTE_ETH_EVENT_INTR_RMV,\n \t};\n \tuint32_t caught[RTE_DIM(type)] = { 0 };\n \tstruct ibv_async_event event;\ndiff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c\nindex d178ed6..7d1194f 100644\n--- a/drivers/net/mlx5/mlx5_ethdev.c\n+++ b/drivers/net/mlx5/mlx5_ethdev.c\n@@ -1033,7 +1033,7 @@ mlx5_dev_status_handler(struct rte_eth_dev *dev)\n \t\t\tret |= (1 << RTE_ETH_EVENT_INTR_LSC);\n \t\telse if (event.event_type == IBV_EVENT_DEVICE_FATAL &&\n \t\t\tdev->data->dev_conf.intr_conf.rmv == 1)\n-\t\t\tret |= (1 << RTE_ETH_EVENT_INTR_RMV);\n+\t\t\tret |= (1 << RTE_DEV_EVENT_REMOVE);\n \t\telse\n \t\t\tDRV_LOG(DEBUG,\n \t\t\t\t\"port %u event type %d on not handled\",\n@@ -1060,8 +1060,9 @@ mlx5_dev_interrupt_handler(void *cb_arg)\n \tevents = mlx5_dev_status_handler(dev);\n \tif (events & (1 << RTE_ETH_EVENT_INTR_LSC))\n \t\t_rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_LSC, NULL);\n-\tif (events & (1 << RTE_ETH_EVENT_INTR_RMV))\n-\t\t_rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_RMV, NULL);\n+\tif (events & (1 << RTE_DEV_EVENT_REMOVE))\n+\t\trte_dev_event_callback_process(dev->device->name,\n+\t\t\t\t\t       RTE_DEV_EVENT_REMOVE);\n }\n \n /**\ndiff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h\nindex 1960f3a..6d54743 100644\n--- a/lib/librte_ethdev/rte_ethdev.h\n+++ b/lib/librte_ethdev/rte_ethdev.h\n@@ -2619,7 +2619,6 @@ enum rte_eth_event_type {\n \t\t\t/**< reset interrupt event, sent to VF on PF reset */\n \tRTE_ETH_EVENT_VF_MBOX,  /**< message from the VF received by PF */\n \tRTE_ETH_EVENT_MACSEC,   /**< MACsec offload related event */\n-\tRTE_ETH_EVENT_INTR_RMV, /**< device removal event */\n \tRTE_ETH_EVENT_NEW,      /**< port is probed */\n \tRTE_ETH_EVENT_DESTROY,  /**< port is released */\n \tRTE_ETH_EVENT_IPSEC,    /**< IPsec offload related event */\n",
    "prefixes": [
        "2/3"
    ]
}