get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 28783,
    "url": "http://patches.dpdk.org/api/patches/28783/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1505559161-29222-14-git-send-email-hemant.agrawal@nxp.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": "<1505559161-29222-14-git-send-email-hemant.agrawal@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1505559161-29222-14-git-send-email-hemant.agrawal@nxp.com",
    "date": "2017-09-16T10:52:27",
    "name": "[dpdk-dev,v3,13/27] bus/fslmc: cleanup the dpaa2 interrupt support",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "e812591190a4aca6dc0c5e747671ba993f298e5c",
    "submitter": {
        "id": 477,
        "url": "http://patches.dpdk.org/api/people/477/?format=api",
        "name": "Hemant Agrawal",
        "email": "hemant.agrawal@nxp.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1505559161-29222-14-git-send-email-hemant.agrawal@nxp.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/28783/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/28783/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 50F7C1B209;\n\tSat, 16 Sep 2017 12:53:44 +0200 (CEST)",
            "from NAM01-SN1-obe.outbound.protection.outlook.com\n\t(mail-sn1nam01on0047.outbound.protection.outlook.com [104.47.32.47])\n\tby dpdk.org (Postfix) with ESMTP id E8BEB1B1BC\n\tfor <dev@dpdk.org>; Sat, 16 Sep 2017 12:53:34 +0200 (CEST)",
            "from BN6PR03CA0023.namprd03.prod.outlook.com (2603:10b6:404:23::33)\n\tby SN2PR03MB2366.namprd03.prod.outlook.com (2603:10b6:804:e::17) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.9;\n\tSat, 16 Sep 2017 10:53:33 +0000",
            "from BL2FFO11FD034.protection.gbl (2a01:111:f400:7c09::171) by\n\tBN6PR03CA0023.outlook.office365.com (2603:10b6:404:23::33) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.11 via\n\tFrontend Transport; Sat, 16 Sep 2017 10:53:33 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBL2FFO11FD034.mail.protection.outlook.com (10.173.161.130) with\n\tMicrosoft\n\tSMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id\n\t15.20.13.11 via Frontend Transport; Sat, 16 Sep 2017 10:53:32 +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\tv8GAr6v0028328; Sat, 16 Sep 2017 03:53:31 -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": "<dev@dpdk.org>",
        "CC": "<ferruh.yigit@intel.com>, <shreyansh.jain@nxp.com>",
        "Date": "Sat, 16 Sep 2017 16:22:27 +0530",
        "Message-ID": "<1505559161-29222-14-git-send-email-hemant.agrawal@nxp.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1505559161-29222-1-git-send-email-hemant.agrawal@nxp.com>",
        "References": "<1504860327-18451-1-git-send-email-hemant.agrawal@nxp.com>\n\t<1505559161-29222-1-git-send-email-hemant.agrawal@nxp.com>",
        "X-EOPAttributedMessage": "0",
        "X-Matching-Connectors": "131500328126223019;\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)(376002)(346002)(39860400002)(39380400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(8676002)(5660300001)(50986999)(97736004)(85426001)(76176999)(81156014)(53936002)(77096006)(68736007)(54906002)(81166006)(5003940100001)(305945005)(104016004)(47776003)(106466001)(50226002)(2351001)(110136004)(8936002)(105606002)(4326008)(2950100002)(498600001)(86362001)(356003)(189998001)(33646002)(2906002)(50466002)(48376002)(36756003)(316002)(6666003)(6916009)(8656003)(16586007);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:SN2PR03MB2366;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BL2FFO11FD034;\n\t1:XUuIVMjO8Fb299bxRLcunZaR5f03W6Sxvegkd1YECJi9uFaOTijPlEaihIbLALWDqoTDGVJp+g7AIEOa5Jf7eu3KawoCEklL05poMiRzw58IWRPsXPJI6abIhW9F+GAm",
            "1; SN2PR03MB2366;\n\t3:C6H6ClUXr450oRhgyomxIPt4jM0ef8p0VJm5TLELlz4JhfqTPFJsYaihb+LmKLKXvicCYwrO1tuU8widIEJg2b0YA4gTB8TantQFcKIZXrB/3SWc5F7haLUmWs/ulWsXtEr74/t56EZ9l6+aW1tP76xyX8jJwTqekvliaLE0BxlLWl3vlBGsI9HkhDUjPlJO2//KxH4C49l3NhKs8HQ1Ppnfb8QT2sgOTjo8TcsRZvbMEUIWCOmjHvTdG4yJ1cvTqr4/crvwHv00Ad6nVogwt1ZphqfW6bn86k0YWzNFwrvnfN0aVPna1Xc0Ktfxc5GJKrv/2pG2oxNnLgECVFPedk5vQKoWYXFwIdCBxMcHGZI=;\n\t25:r4v1pwAbHDkULqyieg4tDg0XXFdh7d6hLWC2bAxELd+zBjWjAdOm8YSiDGFX642Ryvt5sF2Byl+cmFx0hpdDRN7PxIW+1VtMPKUeioQv2dwnkLz9r4SdVNdzLhD8slB9tB6NiYgCvi5WCdpbTgpAhVJ1ovd7OYzZb6TbRNo4A71vXFVKyVqxJCjF9O1i5uLQuV7CnDfjJchvRnL3fZvlgYH8oJKfjplxo+bf7Cyx7weLqLvsFahrhFeseRwBdt8fsoJOOi5cy+Uz7Nh0148/4n+TKjn0k70lvHFe+X5R+dv20hCr79Ue/UYE/4yMyA1Jj61hGrDdGKxbh5ATIxZysg==",
            "1; SN2PR03MB2366;\n\t31:Wif0oOHTYQejOFSCN2rPdpnIcTboasFyqTHZoV13vHSQ1s973eDTSJt8+pp3nUrQJzdw+jOaUaGJgZR/+zAyV/LpEQzvgU68C7fzIJMgq3LVJjAJh2yHe3rBEV8SKjKiY3pj0mEc8TpwelfbKhTFkFjv/juDLmbzjfrR3NkcUjAD0s8LdLy5dx7XVt2nOJkI//2Nzt9T+ExD0idzRbyttwTSZqNpYCGSLyV1IMsg9uw=;\n\t4:o4NFphjfGm/V7CuW0MZgpAFYP9t6wDsXdBQ7gQiFqCkkaCtxyXPlu1ZR98gGzKnH3lJQFQcJEA7OmrlAI5sfABIZctLLoXpTjz+ajCRfhvnwQJILHmmtUOwbhrxham+0rIWLigViofcMW6NrQ1zp3gL1lyQyDKTEV128J6+CBYGLRlx1z7MDpp6O+szM+iww+wMarnnwoXYsjQ+5S2HpYke7I0aj8DTpin6DPfyfAdSRPL67JmG74C5aRNyS9UPvwyoy+ITkMK9tqkfYimWLYfunw9htrnSkzubAHjkvrStZ7eLnWgjoK/tNtPJx2AnSiXYhXYyECiQTegAqMPRrTw==",
            "=?us-ascii?Q?1; SN2PR03MB2366;\n\t23:1aKeUx54yM8jIHnxq6DbdcBIo6kLN0z1aSn9DGler?=\n\t39MWodLlvqVp5ED9UNeydeQaWcv7J6eNd1pB+q3xdW6RL0KdHoP6spp0Vxk6W9jJ+0+aeGLTOymsiUUTVpGL08Ks826rXpMeFZSvoUAmm022w/YEl7BNFgyYA/8ae0E0LUl3ey0ozplHvlTI+c5s85A5hlNT5MtjKvvue+utVa0VZFyhddI0QUWbZ+8sfaLC5qKWAuB86Yk5KYRLMP9bYY5LptcWCDbr1QRsjmL0E2aaKyUx57iea93Rdl/h7gD//Bi0BnCk40+HEXm1IV/0Vz5hbv6wacZEPM4zDUZC/u+pv6vagDgvlKVzu6cUJ5Y3Ak3JAkb+vJJ7vhBgsHXSRKVY16tPot8kW0mrwh1zGy7zxx0wsdNiM1eWAXFGN3V7gENzxvCKNds3/Wua+RInmdYdOoCejGxx3l3mAlQxq+JsLKxM1EGZ0WyvzKkA+0A8Tz2k6jicgbJx854eSCa15eUw67yHd/tUjfBTUwhrNORXMntjnT0d2y85UVDWFAZNYIBGXqvWleGJ8xirR33NG+VfVIok8YH6SYcg6KMV8ZpxNIJbDnqOAl/tXH/MJVF0x65vPOhDXK1ffHse+2qyUo1So4HNr2Wlpjj5LWCPDxFOOZG0/JqRCZJ8XIstc+UMFwDuaJed595YGWYoyz4dHLbpUTHoaRCGTEo/cv2q4l20huSGDOqeSw+4KSjTkCwhH/aw2zlaOu+4r7VAEseZWq4HDHWpdpZou8j6mL+kNM94VtP3UNBkgjTHe5DVN+p6pIk/TwdoMSgI+snYo130qJLvZmLyFaywjT/SKH2XqoR6lI162gowGIkamaFaCNfXD7yfwBdRV5tPZMnkuys7IoFrbWdTNAFMxaublpzBAB2dxibDznqbJAtEKm/kWFFmnjRoQiEF5vhuqxBMpR/xZ5clLJZvef2R67Ot7I9p1A4L+uBTv+1HDXu4oGgVue2SZZQi/LQAGlPifXZrTWxWI+v9MuIyMHdPgY92ZTQq2C+WOeAUtzs1Alf6s6VBiHZpsf5YECnq0FvQzVGGohAWbI5lYHYtBVdRTvzcisHbIfNCZtA6xnWUPNRtW6+G5O7w2zDyT88cFLMnWuZmNMPDmvu2ch+GTuGN5xtRr6WVq1Yno5SPrF+4El0pXQr0C10rYk=",
            "1; SN2PR03MB2366;\n\t6:4La+iciPyDrLXHrTciY/nEvY4wIFNHZEE082+g6UL/3BMV3p1hIH/hYx51Z8YXPUAqsbhGQna3O8/5AskhsO/IVaHjmHgcJVWibEbRD8wSmI+3HdqPBhOrvnV6vf83ySlyV0uBoI25ShHwp6cyzgqr2pPYw1HeooVaj1vCQJ14IEh4LxqE7GNC97G0zGHMOabaOcpkBxG1MYSUVh3bs8SzRnbi9iYn1eJHwmjWO28SGpDAEPf+L4V1Gv9gp2GoVWcDXnD1wpEwtQOI3r/J0xwociGrlmCbhdLDdA+pqqld2cfCT2qbC73uJ5fgzEaZAwhQNg7BLZZIjzlcg/U5NrKg==;\n\t5:xzzrOvjiR/CCKUlLHtdmYTKs3av0n8CLIcZCvdcEOHcG+SbqrcyQY2Iwn4vTjuiQV1FsZ/O4FU+JY5ZW8Dcj9RkTbJyHx3lcyi6HdDXJFdnf+yOiX2Ynzyyq09kqM2LwUjgflFKMd4dzU7BhihkbE7b8KiOhDZkdQWDesL8VBjM=;\n\t24:8QORTR2srR+1w/Jtti4qk0piczRiporhEckDCFSTvEktGlTXWVT4pr378+CtZbsFdz1SHWkF78S3XVOWIsREsOQihNbcVtUHV7DVjRefuGc=;\n\t7:+gu2Hr+Maij05V23mgP87Ruy1IRug+/qZwb3v7XTnQ0hWYOLmSfGgrAkHB20YMyZCnMvNcMC2PpVzqB9YuM3yHriVp7I+J8VTJXFRhXmpmqrQ0XHv3b3g7nQ4zugMFCGElA4dCY3MDppldpZ6oHFobpsWI42AXw/GnLjPJ/7n2qGOmVkwkSTBtGl3K1yhcOJttUr8axgQ2KXgiope7/7c41ljFoxsXtWnVUmbJiV+FE="
        ],
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "b9daa2bb-b0c6-4868-314a-08d4fcf12c44",
        "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:SN2PR03MB2366; ",
        "X-MS-TrafficTypeDiagnostic": "SN2PR03MB2366:",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197)(275809806118684); ",
        "X-Microsoft-Antispam-PRVS": "<SN2PR03MB2366664CC52D63518CEE47CD896D0@SN2PR03MB2366.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(2401047)(8121501046)(5005006)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3002001)(6055026)(6096035)(20161123561025)(20161123556025)(20161123563025)(20161123565025)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123559100)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:SN2PR03MB2366; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:SN2PR03MB2366; ",
        "X-Forefront-PRVS": "0432A04947",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "16 Sep 2017 10:53:32.4507\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": "SN2PR03MB2366",
        "Subject": "[dpdk-dev] [PATCH v3 13/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 3de5238..b2413c2 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",
        "v3",
        "13/27"
    ]
}