get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 58000,
    "url": "http://patches.dpdk.org/api/patches/58000/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20190827070730.11206-6-sachin.saxena@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": "<20190827070730.11206-6-sachin.saxena@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190827070730.11206-6-sachin.saxena@nxp.com",
    "date": "2019-08-27T07:07:05",
    "name": "[v1,05/30] net/dpaa: support Rx interrupt handler",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "3d559efb586f6c66bda84a2febc292bf824810cd",
    "submitter": {
        "id": 1054,
        "url": "http://patches.dpdk.org/api/people/1054/?format=api",
        "name": "Sachin Saxena",
        "email": "sachin.saxena@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/20190827070730.11206-6-sachin.saxena@nxp.com/mbox/",
    "series": [
        {
            "id": 6130,
            "url": "http://patches.dpdk.org/api/series/6130/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=6130",
            "date": "2019-08-27T07:07:00",
            "name": "Enhancements and fixes in NXP dpaax drivers and fsl-mc bus",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/6130/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/58000/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/58000/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 DF3971BFFC;\n\tTue, 27 Aug 2019 09:09:28 +0200 (CEST)",
            "from inva021.nxp.com (inva021.nxp.com [92.121.34.21])\n\tby dpdk.org (Postfix) with ESMTP id 8906B1BF9A\n\tfor <dev@dpdk.org>; Tue, 27 Aug 2019 09:09:17 +0200 (CEST)",
            "from inva021.nxp.com (localhost [127.0.0.1])\n\tby inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 63E522001BC;\n\tTue, 27 Aug 2019 09:09:17 +0200 (CEST)",
            "from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com\n\t[165.114.16.14])\n\tby inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 283122005C9;\n\tTue, 27 Aug 2019 09:09:15 +0200 (CEST)",
            "from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net\n\t[10.232.133.63])\n\tby invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id 9EB3C4031D;\n\tTue, 27 Aug 2019 15:09:11 +0800 (SGT)"
        ],
        "From": "Sachin Saxena <sachin.saxena@nxp.com>",
        "To": "dev@dpdk.org",
        "Cc": "thomas@monjalon.net,\n\tNipun Gupta <nipun.gupta@nxp.com>",
        "Date": "Tue, 27 Aug 2019 12:37:05 +0530",
        "Message-Id": "<20190827070730.11206-6-sachin.saxena@nxp.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20190827070730.11206-1-sachin.saxena@nxp.com>",
        "References": "<20190827070730.11206-1-sachin.saxena@nxp.com>",
        "X-Virus-Scanned": "ClamAV using ClamSMTP",
        "Subject": "[dpdk-dev] [PATCH v1 05/30] net/dpaa: support Rx interrupt handler",
        "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": "From: Nipun Gupta <nipun.gupta@nxp.com>\n\nThis patch adds interrupt handler support for\nthe ethernet devices which are configured with\na dedicated portal for packet Rx\n(i.e. for FQ's in push mode).\n\nSigned-off-by: Nipun Gupta <nipun.gupta@nxp.com>\n---\n drivers/bus/dpaa/base/qbman/qman_driver.c |  3 ++-\n drivers/bus/dpaa/include/fsl_qman.h       | 18 +++++++++++++-\n drivers/bus/dpaa/include/fsl_usd.h        |  2 +-\n drivers/bus/dpaa/rte_dpaa_bus.h           |  1 +\n drivers/net/dpaa/dpaa_ethdev.c            | 29 +++++++++++++++++++++--\n 5 files changed, 48 insertions(+), 5 deletions(-)",
    "diff": "diff --git a/drivers/bus/dpaa/base/qbman/qman_driver.c b/drivers/bus/dpaa/base/qbman/qman_driver.c\nindex 06ed814e1..acd003143 100644\n--- a/drivers/bus/dpaa/base/qbman/qman_driver.c\n+++ b/drivers/bus/dpaa/base/qbman/qman_driver.c\n@@ -121,7 +121,7 @@ void qman_thread_irq(void)\n \tout_be32(qpcfg.addr_virt[DPAA_PORTAL_CI] + 0x36C0, 0);\n }\n \n-struct qman_portal *fsl_qman_fq_portal_create(void)\n+struct qman_portal *fsl_qman_fq_portal_create(int *fd)\n {\n \tstruct qman_portal *portal = NULL;\n \tstruct qm_portal_config *q_pcfg;\n@@ -171,6 +171,7 @@ struct qman_portal *fsl_qman_fq_portal_create(void)\n \tirq_map.portal_cinh = q_map.addr.cinh;\n \tprocess_portal_irq_map(q_fd, &irq_map);\n \n+\t*fd = q_fd;\n \treturn portal;\n err:\n \tif (portal)\ndiff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h\nindex 5f13a5544..064b65aed 100644\n--- a/drivers/bus/dpaa/include/fsl_qman.h\n+++ b/drivers/bus/dpaa/include/fsl_qman.h\n@@ -1215,6 +1215,9 @@ struct qman_fq {\n \tstruct qman_fq_cb cb;\n \n \tu32 fqid_le;\n+\tu32 fqid;\n+\n+\tint q_fd;\n \tu16 ch_id;\n \tu8 cgr_groupid;\n \tu8 is_static:4;\n@@ -1231,7 +1234,6 @@ struct qman_fq {\n \tvolatile unsigned long flags;\n \n \tenum qman_fq_state state;\n-\tu32 fqid;\n \tspinlock_t fqlock;\n \n \tstruct rb_node node;\n@@ -1333,6 +1335,13 @@ u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,\n  */\n int qman_irqsource_add(u32 bits);\n \n+/**\n+ * qman_fq_portal_irqsource_add - samilar to qman_irqsource_add, but it\n+ * takes portal (fq specific) as input rather than using the thread affined\n+ * portal.\n+ */\n+int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);\n+\n /**\n  * qman_irqsource_remove - remove processing sources from being interrupt-driven\n  * @bits: bitmask of QM_PIRQ_**I processing sources\n@@ -1343,6 +1352,13 @@ int qman_irqsource_add(u32 bits);\n  */\n int qman_irqsource_remove(u32 bits);\n \n+/**\n+ * qman_fq_portal_irqsource_remove - similar to qman_irqsource_remove, but it\n+ * takes portal (fq specific) as input rather than using the thread affined\n+ * portal.\n+ */\n+int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);\n+\n /**\n  * qman_affine_channel - return the channel ID of an portal\n  * @cpu: the cpu whose affine portal is the subject of the query\ndiff --git a/drivers/bus/dpaa/include/fsl_usd.h b/drivers/bus/dpaa/include/fsl_usd.h\nindex ea7be38af..a407e2b22 100644\n--- a/drivers/bus/dpaa/include/fsl_usd.h\n+++ b/drivers/bus/dpaa/include/fsl_usd.h\n@@ -75,7 +75,7 @@ int qman_global_init(void);\n int bman_global_init(void);\n \n /* Direct portal create and destroy */\n-struct qman_portal *fsl_qman_fq_portal_create(void);\n+struct qman_portal *fsl_qman_fq_portal_create(int *fd);\n int fsl_qman_fq_portal_destroy(struct qman_portal *qp);\n int fsl_qman_fq_portal_init(struct qman_portal *qp);\n \ndiff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h\nindex 554a56f2e..9601aebdd 100644\n--- a/drivers/bus/dpaa/rte_dpaa_bus.h\n+++ b/drivers/bus/dpaa/rte_dpaa_bus.h\n@@ -75,6 +75,7 @@ struct rte_dpaa_device {\n \t};\n \tstruct rte_dpaa_driver *driver;\n \tstruct dpaa_device_id id;\n+\tstruct rte_intr_handle intr_handle;\n \tenum rte_dpaa_type device_type; /**< Ethernet or crypto type device */\n \tchar name[RTE_ETH_NAME_MAX_LEN];\n };\ndiff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c\nindex 4e2c9471e..1934f85ae 100644\n--- a/drivers/net/dpaa/dpaa_ethdev.c\n+++ b/drivers/net/dpaa/dpaa_ethdev.c\n@@ -628,8 +628,10 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,\n \t\tfman_if_get_sg_enable(dpaa_intf->fif),\n \t\tdev->data->dev_conf.rxmode.max_rx_pkt_len);\n \t/* checking if push mode only, no error check for now */\n-\tif (dpaa_push_mode_max_queue > dpaa_push_queue_idx) {\n+\tif (!rxq->is_static &&\n+\t    dpaa_push_mode_max_queue > dpaa_push_queue_idx) {\n \t\tstruct qman_portal *qp;\n+\t\tint q_fd;\n \n \t\tdpaa_push_queue_idx++;\n \t\topts.we_mask = QM_INITFQ_WE_FQCTRL | QM_INITFQ_WE_CONTEXTA;\n@@ -676,12 +678,35 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,\n \t\trxq->is_static = true;\n \n \t\t/* Allocate qman specific portals */\n-\t\tqp = fsl_qman_fq_portal_create();\n+\t\tqp = fsl_qman_fq_portal_create(&q_fd);\n \t\tif (!qp) {\n \t\t\tDPAA_PMD_ERR(\"Unable to alloc fq portal\");\n \t\t\treturn -1;\n \t\t}\n \t\trxq->qp = qp;\n+\n+\t\t/* Set up the device interrupt handler */\n+\t\tif (!dev->intr_handle) {\n+\t\t\tstruct rte_dpaa_device *dpaa_dev;\n+\t\t\tstruct rte_device *rdev = dev->device;\n+\n+\t\t\tdpaa_dev = container_of(rdev, struct rte_dpaa_device,\n+\t\t\t\t\t\tdevice);\n+\t\t\tdev->intr_handle = &dpaa_dev->intr_handle;\n+\t\t\tdev->intr_handle->intr_vec = rte_zmalloc(NULL,\n+\t\t\t\t\tdpaa_push_mode_max_queue, 0);\n+\t\t\tif (!dev->intr_handle->intr_vec) {\n+\t\t\t\tDPAA_PMD_ERR(\"intr_vec alloc failed\");\n+\t\t\t\treturn -ENOMEM;\n+\t\t\t}\n+\t\t\tdev->intr_handle->nb_efd = dpaa_push_mode_max_queue;\n+\t\t\tdev->intr_handle->max_intr = dpaa_push_mode_max_queue;\n+\t\t}\n+\n+\t\tdev->intr_handle->type = RTE_INTR_HANDLE_EXT;\n+\t\tdev->intr_handle->intr_vec[queue_idx] = queue_idx + 1;\n+\t\tdev->intr_handle->efds[queue_idx] = q_fd;\n+\t\trxq->q_fd = q_fd;\n \t}\n \trxq->bp_array = rte_dpaa_bpid_info;\n \tdev->data->rx_queues[queue_idx] = rxq;\n",
    "prefixes": [
        "v1",
        "05/30"
    ]
}