get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 55199,
    "url": "http://patches.dpdk.org/api/patches/55199/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20190622132417.32694-11-jerinj@marvell.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": "<20190622132417.32694-11-jerinj@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190622132417.32694-11-jerinj@marvell.com",
    "date": "2019-06-22T13:24:00",
    "name": "[v4,10/27] common/octeontx2: add AF to PF mailbox IRQ and msg handlers",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "a447f0dbd82f1833911b8f0c3729d4ad541e829e",
    "submitter": {
        "id": 1188,
        "url": "http://patches.dpdk.org/api/people/1188/?format=api",
        "name": "Jerin Jacob Kollanukkaran",
        "email": "jerinj@marvell.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20190622132417.32694-11-jerinj@marvell.com/mbox/",
    "series": [
        {
            "id": 5124,
            "url": "http://patches.dpdk.org/api/series/5124/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=5124",
            "date": "2019-06-22T13:23:50",
            "name": "OCTEON TX2 common and mempool driver",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/5124/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/55199/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/55199/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 D266A1C601;\n\tSat, 22 Jun 2019 15:25:13 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n\t[67.231.148.174]) by dpdk.org (Postfix) with ESMTP id E8F201C5B2\n\tfor <dev@dpdk.org>; Sat, 22 Jun 2019 15:24:59 +0200 (CEST)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n\tby mx0a-0016f401.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id\n\tx5MDOmR8028312 for <dev@dpdk.org>; Sat, 22 Jun 2019 06:24:59 -0700",
            "from sc-exch01.marvell.com ([199.233.58.181])\n\tby mx0a-0016f401.pphosted.com with ESMTP id 2t9hpnrgfg-1\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT)\n\tfor <dev@dpdk.org>; Sat, 22 Jun 2019 06:24:59 -0700",
            "from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH01.marvell.com\n\t(10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1367.3;\n\tSat, 22 Jun 2019 06:24:58 -0700",
            "from maili.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com\n\t(10.93.176.83) with Microsoft SMTP Server id 15.0.1367.3 via Frontend\n\tTransport; Sat, 22 Jun 2019 06:24:57 -0700",
            "from jerin-lab.marvell.com (jerin-lab.marvell.com [10.28.34.14])\n\tby maili.marvell.com (Postfix) with ESMTP id 8236B3F703F;\n\tSat, 22 Jun 2019 06:24:56 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n\th=from : to : cc :\n\tsubject : date : message-id : in-reply-to : references : mime-version\n\t: content-transfer-encoding : content-type; s=pfpt0818;\n\tbh=jJHw1KQ35bQ1ZK0RMpBd6iwgzbFXMjKGLrteQWOtCvI=;\n\tb=aVj/I/RqsCRMrVnuIl1FrlvSC1xQcKQteH47gd6RThEwXwG24OV3CdemZCvYcBLanZ5Q\n\tYGyrixzCKwZmKxd0tXG6e7oUAJwDp98WtENVdmgdSUIYuH9h/6ELAd+k6nmICv6+fFXe\n\tMjLDp3MEKbyNoqCJ7i8EPCres/OIscxTbs7WOOSgwbPlwW7CVmhhcQETibnFBrFUAgJ2\n\tMb3DZeL7GmHSsa5VE1KLOkdBrwJyPzYoqgEVPnpJZxSNYPSNHcE00PGhT3XGpZ6yuJAb\n\tWDMXfE8sL8/aUR5SaK9Cu6Y6atv59t9RTjDvsJRpynrwhQXuGmwx67Pg/uTCrQVZJauo\n\tLw== ",
        "From": "<jerinj@marvell.com>",
        "To": "Jerin Jacob <jerinj@marvell.com>, Nithin Dabilpuram\n\t<ndabilpuram@marvell.com>, Vamsi Attunuru <vattunuru@marvell.com>",
        "CC": "<dev@dpdk.org>",
        "Date": "Sat, 22 Jun 2019 18:54:00 +0530",
        "Message-ID": "<20190622132417.32694-11-jerinj@marvell.com>",
        "X-Mailer": "git-send-email 2.21.0",
        "In-Reply-To": "<20190622132417.32694-1-jerinj@marvell.com>",
        "References": "<20190617155537.36144-1-jerinj@marvell.com>\n\t<20190622132417.32694-1-jerinj@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:, ,\n\tdefinitions=2019-06-22_09:, , signatures=0",
        "Subject": "[dpdk-dev] [PATCH v4 10/27] common/octeontx2: add AF to PF mailbox\n\tIRQ and msg handlers",
        "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: Nithin Dabilpuram <ndabilpuram@marvell.com>\n\nThis patch adds support for AF to PF mailbox interrupt and message\nhandling. PF writes the message on mapped mailbox region\nfollowed by writing the mailbox doorbell register. Upon receiving,\nthe mailbox request in AF(In Linux kernel), It processes the messages\nand update the counter memory and update the AF mbox doorbell\nregister. That would trigger a VFIO interrupt to userspace and\notx2_process_msgs() will handle it.\n\nSigned-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>\nSigned-off-by: Vamsi Attunuru <vattunuru@marvell.com>\n---\n drivers/common/octeontx2/otx2_dev.c | 120 +++++++++++++++++++++++++++-\n 1 file changed, 119 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/drivers/common/octeontx2/otx2_dev.c b/drivers/common/octeontx2/otx2_dev.c\nindex c3b3f9be5..090cfc8f1 100644\n--- a/drivers/common/octeontx2/otx2_dev.c\n+++ b/drivers/common/octeontx2/otx2_dev.c\n@@ -14,6 +14,9 @@\n #include \"otx2_dev.h\"\n #include \"otx2_mbox.h\"\n \n+#define RVU_MAX_VF\t\t64 /* RVU_PF_VFPF_MBOX_INT(0..1) */\n+#define RVU_MAX_INT_RETRY\t3\n+\n /* PF/VF message handling timer */\n #define VF_PF_MBOX_TIMER_MS\t(20 * 1000)\n \n@@ -47,6 +50,108 @@ mbox_mem_unmap(void *va, size_t size)\n \t\tmunmap(va, size);\n }\n \n+static void\n+otx2_process_msgs(struct otx2_dev *dev, struct otx2_mbox *mbox)\n+{\n+\tstruct otx2_mbox_dev *mdev = &mbox->dev[0];\n+\tstruct mbox_hdr *req_hdr;\n+\tstruct mbox_msghdr *msg;\n+\tint msgs_acked = 0;\n+\tint offset;\n+\tuint16_t i;\n+\n+\treq_hdr = (struct mbox_hdr *)((uintptr_t)mdev->mbase + mbox->rx_start);\n+\tif (req_hdr->num_msgs == 0)\n+\t\treturn;\n+\n+\toffset = mbox->rx_start + RTE_ALIGN(sizeof(*req_hdr), MBOX_MSG_ALIGN);\n+\tfor (i = 0; i < req_hdr->num_msgs; i++) {\n+\t\tmsg = (struct mbox_msghdr *)((uintptr_t)mdev->mbase + offset);\n+\n+\t\tmsgs_acked++;\n+\t\totx2_base_dbg(\"Message 0x%x (%s) pf:%d/vf:%d\",\n+\t\t\t      msg->id, otx2_mbox_id2name(msg->id),\n+\t\t\t      otx2_get_pf(msg->pcifunc),\n+\t\t\t      otx2_get_vf(msg->pcifunc));\n+\n+\t\tswitch (msg->id) {\n+\t\t\t/* Add message id's that are handled here */\n+\t\tcase MBOX_MSG_READY:\n+\t\t\t/* Get our identity */\n+\t\t\tdev->pf_func = msg->pcifunc;\n+\t\t\tbreak;\n+\n+\t\tdefault:\n+\t\t\tif (msg->rc)\n+\t\t\t\totx2_err(\"Message (%s) response has err=%d\",\n+\t\t\t\t\t otx2_mbox_id2name(msg->id), msg->rc);\n+\t\t\tbreak;\n+\t\t}\n+\t\toffset = mbox->rx_start + msg->next_msgoff;\n+\t}\n+\n+\totx2_mbox_reset(mbox, 0);\n+\t/* Update acked if someone is waiting a message */\n+\tmdev->msgs_acked = msgs_acked;\n+\trte_wmb();\n+}\n+\n+static void\n+otx2_af_pf_mbox_irq(void *param)\n+{\n+\tstruct otx2_dev *dev = param;\n+\tuint64_t intr;\n+\n+\tintr = otx2_read64(dev->bar2 + RVU_PF_INT);\n+\tif (intr == 0)\n+\t\treturn;\n+\n+\totx2_write64(intr, dev->bar2 + RVU_PF_INT);\n+\n+\totx2_base_dbg(\"Irq 0x%\" PRIx64 \"(pf:%d,vf:%d)\", intr, dev->pf, dev->vf);\n+\tif (intr)\n+\t\t/* First process all configuration messages */\n+\t\totx2_process_msgs(dev, dev->mbox);\n+}\n+\n+static int\n+mbox_register_irq(struct rte_pci_device *pci_dev, struct otx2_dev *dev)\n+{\n+\tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n+\tint rc;\n+\n+\totx2_write64(~0ull, dev->bar2 + RVU_PF_INT_ENA_W1C);\n+\n+\tdev->timer_set = 0;\n+\n+\t/* MBOX interrupt AF <-> PF */\n+\trc = otx2_register_irq(intr_handle, otx2_af_pf_mbox_irq,\n+\t\t\t       dev, RVU_PF_INT_VEC_AFPF_MBOX);\n+\tif (rc) {\n+\t\totx2_err(\"Fail to register AF<->PF mbox irq\");\n+\t\treturn rc;\n+\t}\n+\n+\totx2_write64(~0ull, dev->bar2 + RVU_PF_INT);\n+\totx2_write64(~0ull, dev->bar2 + RVU_PF_INT_ENA_W1S);\n+\n+\treturn rc;\n+}\n+\n+static void\n+mbox_unregister_irq(struct rte_pci_device *pci_dev, struct otx2_dev *dev)\n+{\n+\tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n+\n+\totx2_write64(~0ull, dev->bar2 + RVU_PF_INT_ENA_W1C);\n+\n+\tdev->timer_set = 0;\n+\n+\t/* MBOX interrupt AF <-> PF */\n+\totx2_unregister_irq(intr_handle, otx2_af_pf_mbox_irq, dev,\n+\t\t\t    RVU_PF_INT_VEC_AFPF_MBOX);\n+}\n+\n static void\n otx2_update_pass_hwcap(struct rte_pci_device *pci_dev, struct otx2_dev *dev)\n {\n@@ -120,10 +225,15 @@ otx2_dev_init(struct rte_pci_device *pci_dev, void *otx2_dev)\n \tif (rc)\n \t\tgoto error;\n \n+\t/* Register mbox interrupts */\n+\trc = mbox_register_irq(pci_dev, dev);\n+\tif (rc)\n+\t\tgoto mbox_fini;\n+\n \t/* Check the readiness of PF/VF */\n \trc = otx2_send_ready_msg(dev->mbox, &dev->pf_func);\n \tif (rc)\n-\t\tgoto mbox_fini;\n+\t\tgoto mbox_unregister;\n \n \tdev->pf = otx2_get_pf(dev->pf_func);\n \tdev->vf = otx2_get_vf(dev->pf_func);\n@@ -162,6 +272,8 @@ otx2_dev_init(struct rte_pci_device *pci_dev, void *otx2_dev)\n \n iounmap:\n \tmbox_mem_unmap(hwbase, MBOX_SIZE * pci_dev->max_vfs);\n+mbox_unregister:\n+\tmbox_unregister_irq(pci_dev, dev);\n mbox_fini:\n \totx2_mbox_fini(dev->mbox);\n \totx2_mbox_fini(&dev->mbox_up);\n@@ -176,6 +288,7 @@ otx2_dev_init(struct rte_pci_device *pci_dev, void *otx2_dev)\n void\n otx2_dev_fini(struct rte_pci_device *pci_dev, void *otx2_dev)\n {\n+\tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \tstruct otx2_dev *dev = otx2_dev;\n \tstruct otx2_idev_cfg *idev;\n \tstruct otx2_mbox *mbox;\n@@ -185,6 +298,8 @@ otx2_dev_fini(struct rte_pci_device *pci_dev, void *otx2_dev)\n \tif (idev->npa_lf && idev->npa_lf->pci_dev == pci_dev)\n \t\tidev->npa_lf = NULL;\n \n+\tmbox_unregister_irq(pci_dev, dev);\n+\n \t/* Release PF - VF */\n \tmbox = &dev->mbox_vfpf;\n \tif (mbox->hwbase && mbox->dev)\n@@ -200,4 +315,7 @@ otx2_dev_fini(struct rte_pci_device *pci_dev, void *otx2_dev)\n \tmbox = &dev->mbox_up;\n \totx2_mbox_fini(mbox);\n \tdev->mbox_active = 0;\n+\n+\t/* Disable MSIX vectors */\n+\totx2_disable_irqs(intr_handle);\n }\n",
    "prefixes": [
        "v4",
        "10/27"
    ]
}