get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 27971,
    "url": "https://patches.dpdk.org/api/patches/27971/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1503658183-4078-17-git-send-email-hemant.agrawal@nxp.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": "<1503658183-4078-17-git-send-email-hemant.agrawal@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1503658183-4078-17-git-send-email-hemant.agrawal@nxp.com",
    "date": "2017-08-25T10:49:32",
    "name": "[dpdk-dev,16/27] bus/fslmc: cleanup the dpaa2 interrupt support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "e812591190a4aca6dc0c5e747671ba993f298e5c",
    "submitter": {
        "id": 477,
        "url": "https://patches.dpdk.org/api/people/477/?format=api",
        "name": "Hemant Agrawal",
        "email": "hemant.agrawal@nxp.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1503658183-4078-17-git-send-email-hemant.agrawal@nxp.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/27971/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/27971/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 CF9AD998A;\n\tFri, 25 Aug 2017 12:50:38 +0200 (CEST)",
            "from NAM01-BY2-obe.outbound.protection.outlook.com\n\t(mail-by2nam01on0045.outbound.protection.outlook.com [104.47.34.45])\n\tby dpdk.org (Postfix) with ESMTP id 895629957\n\tfor <dev@dpdk.org>; Fri, 25 Aug 2017 12:50:33 +0200 (CEST)",
            "from MWHPR03CA0014.namprd03.prod.outlook.com (10.175.133.152) by\n\tMWHPR03MB3328.namprd03.prod.outlook.com (10.174.249.146) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id\n\t15.1.1385.9; Fri, 25 Aug 2017 10:50:31 +0000",
            "from BY2FFO11FD015.protection.gbl (2a01:111:f400:7c0c::100) by\n\tMWHPR03CA0014.outlook.office365.com (2603:10b6:300:117::24) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1362.18\n\tvia Frontend Transport; Fri, 25 Aug 2017 10:50:31 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBY2FFO11FD015.mail.protection.outlook.com (10.1.14.131) with\n\tMicrosoft SMTP Server (version=TLS1_0,\n\tcipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1341.15\n\tvia Frontend Transport; Fri, 25 Aug 2017 10:50:31 +0000",
            "from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net\n\t[10.232.134.28])\n\tby tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id\n\tv7PAnw6K032070; Fri, 25 Aug 2017 03:50:29 -0700"
        ],
        "Authentication-Results": "spf=fail (sender IP is 192.88.168.50)\n\tsmtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed)\n\theader.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com;",
        "Received-SPF": "Fail (protection.outlook.com: domain of nxp.com does not\n\tdesignate 192.88.168.50 as permitted sender)\n\treceiver=protection.outlook.com; \n\tclient-ip=192.88.168.50; helo=tx30smr01.am.freescale.net;",
        "From": "Hemant Agrawal <hemant.agrawal@nxp.com>",
        "To": "<ferruh.yigit@intel.com>",
        "CC": "<dev@dpdk.org>, <shreyansh.jain@nxp.com>",
        "Date": "Fri, 25 Aug 2017 16:19:32 +0530",
        "Message-ID": "<1503658183-4078-17-git-send-email-hemant.agrawal@nxp.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1503658183-4078-1-git-send-email-hemant.agrawal@nxp.com>",
        "References": "<1503658183-4078-1-git-send-email-hemant.agrawal@nxp.com>",
        "X-EOPAttributedMessage": "0",
        "X-Matching-Connectors": "131481318316173680;\n\t(91ab9b29-cfa4-454e-5278-08d120cd25b8); ()",
        "X-Forefront-Antispam-Report": "CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI;\n\tSFV:NSPM;\n\tSFS:(10009020)(6009001)(336005)(39860400002)(39380400002)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(356003)(305945005)(50466002)(104016004)(110136004)(53936002)(36756003)(48376002)(2906002)(6666003)(189998001)(54906002)(85426001)(68736007)(8676002)(498600001)(77096006)(81166006)(86362001)(81156014)(76176999)(105606002)(106466001)(50986999)(5003940100001)(8656003)(8936002)(2950100002)(4326008)(97736004)(47776003)(626005)(33646002)(5660300001)(6916009)(2351001)(50226002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR03MB3328;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BY2FFO11FD015;\n\t1:kw9nj4ubbSJEvQ1XlC2QzbPwr1dT7D9WNBdH7JX2Ul+pOn4Ckc9zuNLuQQrZ3nqIeNpdRj2BSqv4DB4uS2ahSJiqr/OvFyTELoDrLCeOMewMTqA/+sRnh9xdTfE4mzef",
            "1; MWHPR03MB3328;\n\t3:Qb1rM0xCUEIBLFRE2A3GHXnrfr2l+s0rNH+zIfn5nSXZIaJnzsfp9ehUhCSS8TZv9l/4covTU/VVFPXZfw79Ehc+gnTE2nI3TDiGGGJS8LnlNLtl5e0o6ieHcfqQDKQbF1IL+/EXsHEJlbdjB1lg0t7JWLmt2GFxQrgA5aGgyfL2u/9dUNTbXy9mcwlsEqzOThMN7jJ9yseeeVflBTKW46UG1qfdgvXuU/Q9Yzg1RQ/BvXvAf7MjMi3f8jK/EO/P896ca6DnmVY0u4b+q6Xmr2aUcxGP9v/AWg6of5HbG2/eN8y3S4pAu5lHZMHj20yX2JR+JFddZjSYpTsE/q+VT6FsCDpk4LW9L3rGZRYAv1Y=;\n\t25:JzE0p/XFQ6HazSYDx3d562k62LUD8ZN2888QED8VEbYC5D3kU1zYTlsvyK86GPzvnwivqbuREs51tKWWYuaYuSgG2W75bUsWgT8JQjrjEeUEkeNzAix/aSgxpx9BMSD55jVqRmyIP5tEtJUv3kyvYN/t3eKLYx7oeglb0MJ1qitpG2rfAefU8IVjJ+eL/Ksq3/zelsBhN5WrPRu6/4fcCMrsTJWvLIWRwr4t5r7stuYwtHUxPBx6BFZ4otzHih2zSrdOjou6RaRc2LFhBNLDJPVedoFkuDZbmTbAbwt+/Fzi6hCZ41ztQxvV0ZtLS+4zY6eY2s5LFibqZVbhJQFH0w==",
            "1; MWHPR03MB3328;\n\t31:PWxaklhFJ881Zz+MWow0kLSz+6rmsFX3SYi3cNqFpagKxmKEiQ3dxKIys4j4LKWTlTwGeFmHIb37jgKx6E8NLim/JzJtpR1z+awUYPIKhRIiCt9Q0vatiQYRJ2Myk1Cgqv9Fx8+ZN+qlSUn0apLBMG4ddex2tr4XhHg6R30hw3QacvMWzczkFrX/x7B6lPzYMjZkF34zF7g2KuFj3xQLksQGZUghq4M6q+YffdobvaI=;\n\t4:v/Jat5FaptwyRSSlRkIFmLmh10uV+Eqgrlk+AfP0B7njbo87dAGF3m8gifGvEeFY0mYyB0EXzmOZbIT9B5v04BA7LBJPsb6T52icHf40ni98Vu/HWuThVa5T6OjYXfX1/Sdp3vZwtNAvI+vhJGkZrkmL96yCjUKGnZiYXwwMfGU4F5ur+SUcK9jofTUV8YxfDpVFrMSCNzjDwHonGJlX/IvX52e9IsDke7fhn30ALFW0wB8OFaS7SxhBADUwIrmSBkhQ2ZnqHgEhQrZ/0AAUWAgWNJgTyOCZtmn5fEVWBS3YcHSkmD1SYLwR3DRYmsBoec5bOqAO51UltjKdYDRNcg==",
            "=?us-ascii?Q?1; MWHPR03MB3328;\n\t23:oboN9OWuVw7PJxx/SFG/e7FUIuqy4XRD8iZps3xSy?=\n\tk2KhG8FHE4HKPivsQqXzKlZJSwG9cUOXAiUO3XYWPboRKzvitwomXJyB4BVuc6+PCOrnKb1fZk9Cun+jbMGlUz3G/XT8sJUb6Cg/Fkgz6rvDZQ1SPWeGLQxiaJkOCyh4eI7EbFAmgzoS0RnHzbGS5HHCirh9eQUeJs/Y7OZUf9olVhIOjqlE7ca1baGvST9FSDxdY/onc/+69CXCYNyBZMTZ9Wq1Sl+AbpkD+3QewK59/bgFLufv8ZTs0InZsO4uPFkfvHEBQie3hvSpLB9m5AkYlAC3Wl3efadyxE5cqD5qVbn2z1X7K0G2V3B5hm3PeKs2u95RBbPZBDVBuiO5LrKkdrE6rWNvjuay5P39hmh+wUfV6VMLUQzbXchBOKVF4hESZZKi0U8DtIr6cmojC9lEYzXcpEgRObVFun99fBe4S/GaujY4misRqs+Bje4yydwaEDL8WbW4qYx50rLdr4bytwLJQo6WUGDj1yLmM8J5WDI8MITeTLnuiv2iEHu89fTNq+XWpKkkz0p9ovoax1Tf8/bmwgulWf9HkHlrCImrSzQZWCR9CIRtqGUglKEHIABVKdMNU9e2wm8ewv3DCWqVT7G7vciKz1NtREYasgGBirHxVrUdGqLk7O9JdFUDDt0VJ5u6oJClZnYcnOBS3VWXFIBlFOgrpnR7e530DBYX5ZDpgmkj+yuwwnGYv3kASKhB6f/iaTruSwBISeHvjoPzNC/uEDHiXG5N8WiHhvdBzcR0jedXTUPQOCxqta70X3ri8rdmVXAiTnnkSHdQWu2+8Gfks7u+PiJrLJeIA+MIAYJxIznkMmKBgh2HtpblxUaWs7RubfMJpk+gDD78ghd6qMfsmVuwgwRYtyZ06v05+2rJWOKe9fLvhhPbe597eRr+0qyhkizZwM2/pRsoSU5XM2d6SBjJjbXZok915HnQTYqUHkp7qtYegK7aZ4VpoTjguIt9boU0kEtq17+3nPUkKsPviOODPIIfuK7mjWpCXxd9y2cMdyd37uBvDNNwzyvME9wCKKOT7p0zEEcDfURufqMwob7f4B0nY08jJM2EC6H9gGWxOhn4JP3oquNPW55GGLTeEnRjR4nuhlNYsDo",
            "1; MWHPR03MB3328;\n\t6:ek1uh6p+4WD6cZ4VvKgzI99Pl/BJJTfLTZgGnnM/sqlAth/7b9KgKCsqbz/BCDdlGADXBfQai+SghRc/7sikcjA4+Upyg6pmkXVVrDfOjbEDlp9KYSsDSnU3qGVzMILn+fcroYp+egzFZwoikjmY4Cke8Vx0tg++Ci1OHlMLKLGchrQbak1AyoRflORd4R/vWY23A3tOoCLjhVjG2oioiSFKnfkNwiVmm9K+RC8pL8Ikn2dQFJCB+yIdYdPVYOdRB0h2lxc67NTL7/M3YFVV0BaWrJcaorpo1Zn5DsoXRxtWaCeJPD90qFKUneonOnSN87R0EJOPNPuGCXpU7FxlRQ==;\n\t5:dn61d7cKn2HackCGjzsUtusqx0PmvR9b8DZQl7mqooC+Y3HWoeBPrfn6uSI0MUzJDjzR4gJKeoytwj4XPScZ9LaHKCBmyy17YpmKwgNsFHAg4DGw6Reu4tRAmiUbQ4Ik2iigM4GT+0NeKgKaxoUZmg==;\n\t24:xkEuRIjs17J1LPlQuXDs+aVwnqSoJcNgFeZcHfLwwMTCxL4ZEFQWsZeyFlrPH1D6RA0umOiZtLOnUAkq2ym17Ts00si52TOELlZLsH5JwsY=;\n\t7:4ghinVgkJrcpz6ZFwNc5T/TpsBpzgqPjnSWskfuUZqzeatQXgWZj83w7wut74YqvJ7+ER+K7Sdq7JUDVbu35yIpp0uS+pA/JxgN+SeCrGPuHhub38DhlnEJD9EUYZMhfCvKt3WfnEpfOMRVqL7HYEwzVRIsnMgpUKSXGpOdJ/0lmoacxh6+WHS5kd1UsnjDv5zkWbtGJ4Dn0vRgv9KP3L8cjsFg1Sy0GYFpjNf8UnQA="
        ],
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "427a0a2d-8d3e-43e7-de60-08d4eba71b39",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(300000503095)(300135400095)(2017052603199)(201703131430075)(201703131517081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:MWHPR03MB3328; ",
        "X-MS-TrafficTypeDiagnostic": "MWHPR03MB3328:",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197)(275809806118684); ",
        "X-Microsoft-Antispam-PRVS": "<MWHPR03MB3328DBCBB7462A89150FC456899B0@MWHPR03MB3328.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(601004)(2401047)(13018025)(8121501046)(13016025)(5005006)(3002001)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(6055026)(6096035)(20161123556025)(201703131430075)(201703131441075)(201703131448075)(201703131433075)(201703161259150)(20161123561025)(20161123563025)(20161123559100)(20161123565025)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:MWHPR03MB3328; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:MWHPR03MB3328; ",
        "X-Forefront-PRVS": "041032FF37",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "25 Aug 2017 10:50:31.3053\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Id": "5afe0b00-7697-4969-b663-5eab37d5f47e",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;\n\tIp=[192.88.168.50]; \n\tHelo=[tx30smr01.am.freescale.net]",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MWHPR03MB3328",
        "Subject": "[dpdk-dev] [PATCH 16/27] bus/fslmc: cleanup the dpaa2 interrupt\n\tsupport",
        "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: Hemant Agrawal <hemant.agrawal@nxp.com>\n---\n drivers/bus/fslmc/Makefile                  |   1 +\n drivers/bus/fslmc/fslmc_vfio.c              | 108 +++++++++++++++++++++++-----\n drivers/bus/fslmc/fslmc_vfio.h              |   8 ++-\n drivers/bus/fslmc/portal/dpaa2_hw_dpio.c    |  18 +++--\n drivers/bus/fslmc/rte_bus_fslmc_version.map |   2 +\n 5 files changed, 110 insertions(+), 27 deletions(-)",
    "diff": "diff --git a/drivers/bus/fslmc/Makefile b/drivers/bus/fslmc/Makefile\nindex d1b790b..37da1b0 100644\n--- a/drivers/bus/fslmc/Makefile\n+++ b/drivers/bus/fslmc/Makefile\n@@ -51,6 +51,7 @@ CFLAGS += -I$(RTE_SDK)/drivers/bus/fslmc\n CFLAGS += -I$(RTE_SDK)/drivers/bus/fslmc/mc\n CFLAGS += -I$(RTE_SDK)/drivers/bus/fslmc/qbman/include\n CFLAGS += -I$(RTE_SDK)/lib/librte_eal/linuxapp/eal\n+CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common\n \n # versioning export map\n EXPORT_MAP := rte_bus_fslmc_version.map\ndiff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c\nindex cdc982b..ab1df36 100644\n--- a/drivers/bus/fslmc/fslmc_vfio.c\n+++ b/drivers/bus/fslmc/fslmc_vfio.c\n@@ -46,6 +46,7 @@\n #include <dirent.h>\n #include <sys/eventfd.h>\n \n+#include <eal_filesystem.h>\n #include <rte_mbuf.h>\n #include <rte_ethdev.h>\n #include <rte_malloc.h>\n@@ -335,36 +336,107 @@ static int64_t vfio_map_mcp_obj(struct fslmc_vfio_group *group, char *mcp_obj)\n \n #define IRQ_SET_BUF_LEN  (sizeof(struct vfio_irq_set) + sizeof(int))\n \n-int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle,\n-\t\t\t  uint32_t index)\n+int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index)\n {\n-\tstruct vfio_irq_set *irq_set;\n+\tint len, ret;\n \tchar irq_set_buf[IRQ_SET_BUF_LEN];\n-\tint *fd_ptr, fd, ret;\n+\tstruct vfio_irq_set *irq_set;\n+\tint *fd_ptr;\n+\n+\tlen = sizeof(irq_set_buf);\n \n-\t/* Prepare vfio_irq_set structure and SET the IRQ in VFIO */\n-\t/* Give the eventfd to VFIO */\n-\tfd = eventfd(0, 0);\n \tirq_set = (struct vfio_irq_set *)irq_set_buf;\n-\tirq_set->argsz = sizeof(irq_set_buf);\n+\tirq_set->argsz = len;\n \tirq_set->count = 1;\n-\tirq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD |\n-\t\t\t VFIO_IRQ_SET_ACTION_TRIGGER;\n+\tirq_set->flags =\n+\t\tVFIO_IRQ_SET_DATA_EVENTFD | VFIO_IRQ_SET_ACTION_TRIGGER;\n \tirq_set->index = index;\n \tirq_set->start = 0;\n \tfd_ptr = (int *)&irq_set->data;\n-\t*fd_ptr = fd;\n+\t*fd_ptr = intr_handle->fd;\n \n \tret = ioctl(intr_handle->vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set);\n-\tif (ret < 0) {\n-\t\tFSLMC_VFIO_LOG(ERR, \"Unable to set IRQ in VFIO, ret: %d\\n\",\n-\t\t\t       ret);\n-\t\treturn -1;\n+\tif (ret) {\n+\t\tRTE_LOG(ERR, EAL, \"Error:dpaa2 SET IRQs fd=%d, err = %d(%s)\\n\",\n+\t\t\tintr_handle->fd, errno, strerror(errno));\n+\t\treturn ret;\n \t}\n \n-\t/* Set the FD and update the flags */\n-\tintr_handle->fd = fd;\n-\treturn 0;\n+\treturn ret;\n+}\n+\n+int rte_dpaa2_intr_disable(struct rte_intr_handle *intr_handle, int index)\n+{\n+\tstruct vfio_irq_set *irq_set;\n+\tchar irq_set_buf[IRQ_SET_BUF_LEN];\n+\tint len, ret;\n+\n+\tlen = sizeof(struct vfio_irq_set);\n+\n+\tirq_set = (struct vfio_irq_set *)irq_set_buf;\n+\tirq_set->argsz = len;\n+\tirq_set->flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_TRIGGER;\n+\tirq_set->index = index;\n+\tirq_set->start = 0;\n+\tirq_set->count = 0;\n+\n+\tret = ioctl(intr_handle->vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set);\n+\tif (ret)\n+\t\tRTE_LOG(ERR, EAL,\n+\t\t\t\"Error disabling dpaa2 interrupts for fd %d\\n\",\n+\t\t\tintr_handle->fd);\n+\n+\treturn ret;\n+}\n+\n+/* set up interrupt support (but not enable interrupts) */\n+int\n+rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle,\n+\t\t\t  int vfio_dev_fd,\n+\t\t\t  int num_irqs)\n+{\n+\tint i, ret;\n+\n+\t/* start from MSI-X interrupt type */\n+\tfor (i = 0; i < num_irqs; i++) {\n+\t\tstruct vfio_irq_info irq_info = { .argsz = sizeof(irq_info) };\n+\t\tint fd = -1;\n+\n+\t\tirq_info.index = i;\n+\n+\t\tret = ioctl(vfio_dev_fd, VFIO_DEVICE_GET_IRQ_INFO, &irq_info);\n+\t\tif (ret < 0) {\n+\t\t\tFSLMC_VFIO_LOG(ERR,\n+\t\t\t\t       \"cannot get IRQ(%d) info, error %i (%s)\",\n+\t\t\t\t       i, errno, strerror(errno));\n+\t\t\treturn -1;\n+\t\t}\n+\n+\t\t/* if this vector cannot be used with eventfd,\n+\t\t * fail if we explicitly\n+\t\t * specified interrupt type, otherwise continue\n+\t\t */\n+\t\tif ((irq_info.flags & VFIO_IRQ_INFO_EVENTFD) == 0)\n+\t\t\tcontinue;\n+\n+\t\t/* set up an eventfd for interrupts */\n+\t\tfd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);\n+\t\tif (fd < 0) {\n+\t\t\tFSLMC_VFIO_LOG(ERR,\n+\t\t\t\t       \"cannot set up eventfd, error %i (%s)\\n\",\n+\t\t\t\t       errno, strerror(errno));\n+\t\t\treturn -1;\n+\t\t}\n+\n+\t\tintr_handle->fd = fd;\n+\t\tintr_handle->type = RTE_INTR_HANDLE_VFIO_MSI;\n+\t\tintr_handle->vfio_dev_fd = vfio_dev_fd;\n+\n+\t\treturn 0;\n+\t}\n+\n+\t/* if we're here, we haven't found a suitable interrupt vector */\n+\treturn -1;\n }\n \n /*\ndiff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h\nindex edb86d0..5470a41 100644\n--- a/drivers/bus/fslmc/fslmc_vfio.h\n+++ b/drivers/bus/fslmc/fslmc_vfio.h\n@@ -64,8 +64,12 @@ typedef struct fslmc_vfio_container {\n \tstruct fslmc_vfio_group *group;\n } fslmc_vfio_container;\n \n-int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle,\n-\t\t\t  uint32_t index);\n+int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index);\n+int rte_dpaa2_intr_disable(struct rte_intr_handle *intr_handle, int index);\n+\n+int rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle,\n+\t\t\t      int vfio_dev_fd,\n+\t\t\t      int num_irqs);\n \n int fslmc_vfio_setup_group(void);\n int fslmc_vfio_process_group(void);\ndiff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c\nindex 8db1f6c..ff41ce4 100644\n--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c\n+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c\n@@ -440,7 +440,6 @@ dpaa2_create_dpio_device(int vdev_fd,\n {\n \tstruct dpaa2_dpio_dev *dpio_dev;\n \tstruct vfio_region_info reg_info = { .argsz = sizeof(reg_info)};\n-\tint vfio_dev_fd;\n \n \tif (obj_info->num_regions < NUM_DPIO_REGIONS) {\n \t\tPMD_INIT_LOG(ERR, \"ERROR, Not sufficient number \"\n@@ -457,14 +456,12 @@ dpaa2_create_dpio_device(int vdev_fd,\n \n \tdpio_dev->dpio = NULL;\n \tdpio_dev->hw_id = object_id;\n-\tdpio_dev->intr_handle.vfio_dev_fd = vdev_fd;\n \trte_atomic16_init(&dpio_dev->ref_count);\n \t/* Using single portal  for all devices */\n \tdpio_dev->mc_portal = rte_mcp_ptr_list[MC_PORTAL_INDEX];\n \n \treg_info.index = 0;\n-\tvfio_dev_fd = dpio_dev->intr_handle.vfio_dev_fd;\n-\tif (ioctl(vfio_dev_fd, VFIO_DEVICE_GET_REGION_INFO, &reg_info)) {\n+\tif (ioctl(vdev_fd, VFIO_DEVICE_GET_REGION_INFO, &reg_info)) {\n \t\tPMD_INIT_LOG(ERR, \"vfio: error getting region info\\n\");\n \t\trte_free(dpio_dev);\n \t\treturn -1;\n@@ -473,10 +470,10 @@ dpaa2_create_dpio_device(int vdev_fd,\n \tdpio_dev->ce_size = reg_info.size;\n \tdpio_dev->qbman_portal_ce_paddr = (uint64_t)mmap(NULL, reg_info.size,\n \t\t\t\tPROT_WRITE | PROT_READ, MAP_SHARED,\n-\t\t\t\tvfio_dev_fd, reg_info.offset);\n+\t\t\t\tvdev_fd, reg_info.offset);\n \n \treg_info.index = 1;\n-\tif (ioctl(vfio_dev_fd, VFIO_DEVICE_GET_REGION_INFO, &reg_info)) {\n+\tif (ioctl(vdev_fd, VFIO_DEVICE_GET_REGION_INFO, &reg_info)) {\n \t\tPMD_INIT_LOG(ERR, \"vfio: error getting region info\\n\");\n \t\trte_free(dpio_dev);\n \t\treturn -1;\n@@ -485,7 +482,7 @@ dpaa2_create_dpio_device(int vdev_fd,\n \tdpio_dev->ci_size = reg_info.size;\n \tdpio_dev->qbman_portal_ci_paddr = (uint64_t)mmap(NULL, reg_info.size,\n \t\t\t\tPROT_WRITE | PROT_READ, MAP_SHARED,\n-\t\t\t\tvfio_dev_fd, reg_info.offset);\n+\t\t\t\tvdev_fd, reg_info.offset);\n \n \tif (configure_dpio_qbman_swp(dpio_dev)) {\n \t\tPMD_INIT_LOG(ERR,\n@@ -497,6 +494,13 @@ dpaa2_create_dpio_device(int vdev_fd,\n \n \tio_space_count++;\n \tdpio_dev->index = io_space_count;\n+\n+\tif (rte_dpaa2_vfio_setup_intr(&dpio_dev->intr_handle, vdev_fd, 1)) {\n+\t\tPMD_INIT_LOG(ERR, \"Fail to setup interrupt for %d\\n\",\n+\t\t\t     dpio_dev->hw_id);\n+\t\trte_free(dpio_dev);\n+\t}\n+\n \tTAILQ_INSERT_TAIL(&dpio_dev_list, dpio_dev, next);\n \tPMD_INIT_LOG(DEBUG, \"DPAA2: Added [dpio.%d]\", object_id);\n \ndiff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map\nindex 7b25248..51a2ac6 100644\n--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map\n+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map\n@@ -85,5 +85,7 @@ DPDK_17.11 {\n \n \tdpaa2_dpbp_supported;\n \trte_dpaa2_dev_type;\n+\trte_dpaa2_intr_disable;\n+\trte_dpaa2_intr_enable;\n \n } DPDK_17.08;\n",
    "prefixes": [
        "dpdk-dev",
        "16/27"
    ]
}