get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 53981,
    "url": "http://patches.dpdk.org/api/patches/53981/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20190601014905.45531-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": "<20190601014905.45531-11-jerinj@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190601014905.45531-11-jerinj@marvell.com",
    "date": "2019-06-01T01:48:48",
    "name": "[v2,10/27] common/octeontx2: add AF to PF mailbox IRQ and msg handlers",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "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/20190601014905.45531-11-jerinj@marvell.com/mbox/",
    "series": [
        {
            "id": 4844,
            "url": "http://patches.dpdk.org/api/series/4844/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=4844",
            "date": "2019-06-01T01:48:38",
            "name": "OCTEON TX2 common and mempool driver",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/4844/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/53981/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/53981/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 3F59F1B9B7;\n\tSat,  1 Jun 2019 03:49:47 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n\t[67.231.156.173]) by dpdk.org (Postfix) with ESMTP id 4ECFB1B996\n\tfor <dev@dpdk.org>; Sat,  1 Jun 2019 03:49:45 +0200 (CEST)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n\tby mx0b-0016f401.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id\n\tx511lfxq003132 for <dev@dpdk.org>; Fri, 31 May 2019 18:49:44 -0700",
            "from sc-exch03.marvell.com ([199.233.58.183])\n\tby mx0b-0016f401.pphosted.com with ESMTP id 2su5xh2bub-1\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT)\n\tfor <dev@dpdk.org>; Fri, 31 May 2019 18:49:44 -0700",
            "from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH03.marvell.com\n\t(10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1367.3;\n\tFri, 31 May 2019 18:49:43 -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; Fri, 31 May 2019 18:49:43 -0700",
            "from jerin-lab.marvell.com (jerin-lab.marvell.com [10.28.34.14])\n\tby maili.marvell.com (Postfix) with ESMTP id 31CB83F703F;\n\tFri, 31 May 2019 18:49:41 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n\th=from : to : subject\n\t: date : message-id : in-reply-to : references : mime-version :\n\tcontent-transfer-encoding : content-type; s=pfpt0818;\n\tbh=umkiU3pPJXW5HrgdsN6oDC+3zoxFbpljFnk8yVsrn8A=;\n\tb=o0nJPkiiQ4MYeC1uKP6jxmIKnww1A3srjPRFVLeCjoIxKi7wEIFlTELGwgB1ZnMWX+4n\n\tUWF1bIi8Nts7qA9/x84OuU9+f6GjiTOCIw8LiZnSITEVvlpbrOYBXVAIo+lwTPJbfzDu\n\tBNAZOtWPoNfLF077NDQ60QNuZpTNtUKUTfYQdOkyqfwQgWTBq6lUTTTieivUFamJnziY\n\th+gUKs4U1RfWN4qVqOQeYzbfznk4ogW9TG4rGdCSIVnlxwazbxo1r7jlFKe+lg0MUL8U\n\tL1yAqM3fbtIos36fDH8HlfPcYiQH/NtPvLK36jLD8CUYGj33SYitoiOa+HSLSOP5vttc\n\tFQ== ",
        "From": "<jerinj@marvell.com>",
        "To": "<dev@dpdk.org>, Jerin Jacob <jerinj@marvell.com>, Nithin Dabilpuram\n\t<ndabilpuram@marvell.com>, Vamsi Attunuru <vattunuru@marvell.com>",
        "Date": "Sat, 1 Jun 2019 07:18:48 +0530",
        "Message-ID": "<20190601014905.45531-11-jerinj@marvell.com>",
        "X-Mailer": "git-send-email 2.21.0",
        "In-Reply-To": "<20190601014905.45531-1-jerinj@marvell.com>",
        "References": "<20190523081339.56348-1-jerinj@marvell.com>\n\t<20190601014905.45531-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-01_02:, , signatures=0",
        "Subject": "[dpdk-dev] [PATCH v2 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 59bd988d1..ba4fd9547 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": [
        "v2",
        "10/27"
    ]
}