get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 49263,
    "url": "https://patches.dpdk.org/api/patches/49263/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1545746524-116580-1-git-send-email-andy.pei@intel.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": "<1545746524-116580-1-git-send-email-andy.pei@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1545746524-116580-1-git-send-email-andy.pei@intel.com",
    "date": "2018-12-25T14:02:04",
    "name": "[v3] /driver/raw/ifpga_rawdev: fix a memory leak bug in ifpga",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "b68a7267f621dcf0be85d2d2310cf67cf65c82ff",
    "submitter": {
        "id": 1185,
        "url": "https://patches.dpdk.org/api/people/1185/?format=api",
        "name": "Pei, Andy",
        "email": "andy.pei@intel.com"
    },
    "delegate": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1545746524-116580-1-git-send-email-andy.pei@intel.com/mbox/",
    "series": [
        {
            "id": 2942,
            "url": "https://patches.dpdk.org/api/series/2942/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=2942",
            "date": "2018-12-25T14:02:04",
            "name": "[v3] /driver/raw/ifpga_rawdev: fix a memory leak bug in ifpga",
            "version": 3,
            "mbox": "https://patches.dpdk.org/series/2942/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/49263/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/49263/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 40C521B3B7;\n\tTue, 25 Dec 2018 07:13:08 +0100 (CET)",
            "from mga04.intel.com (mga04.intel.com [192.55.52.120])\n\tby dpdk.org (Postfix) with ESMTP id 523631B201\n\tfor <dev@dpdk.org>; Tue, 25 Dec 2018 07:13:07 +0100 (CET)",
            "from orsmga003.jf.intel.com ([10.7.209.27])\n\tby fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t24 Dec 2018 22:13:06 -0800",
            "from dipei-st-npg.sh.intel.com ([10.67.110.220])\n\tby orsmga003.jf.intel.com with ESMTP; 24 Dec 2018 22:13:05 -0800"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.56,395,1539673200\"; d=\"scan'208\";a=\"113105284\"",
        "From": "AndyPei <andy.pei@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "rosen.xu@intel.com,\n\ttianfei.zhang@intel.com,\n\tandy.pei@intel.com",
        "Date": "Tue, 25 Dec 2018 22:02:04 +0800",
        "Message-Id": "<1545746524-116580-1-git-send-email-andy.pei@intel.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1545161721-382282-1-git-send-email-andy.pei@intel.com>",
        "References": "<1545161721-382282-1-git-send-email-andy.pei@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v3]/driver/raw/ifpga_rawdev: fix a memory leak\n\tbug in ifpga",
        "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": "When ifpga_rawdev_create() allocate memory for a new rawdev, the original code\nallocate redundant memory for adapter, which is a member of the rawdev.\nWhat is actually necessary is the adapter to be initialized, not memory allocated.\n\nWhat is different in v3 from v2 is that the adapter is no longer need to be freed.\n\nfixes:ef1e8ede3da5\ncc: rosen.xu@intel.com\ncc: tianfei.zhang@intel.com\n\nSigned-off-by: AndyPei <andy.pei@intel.com>\n---\n drivers/raw/ifpga_rawdev/base/opae_hw_api.c | 32 ++++++++++++++++++++++++-----\n drivers/raw/ifpga_rawdev/base/opae_hw_api.h |  3 ++-\n drivers/raw/ifpga_rawdev/ifpga_rawdev.c     | 12 ++++-------\n 3 files changed, 33 insertions(+), 14 deletions(-)",
    "diff": "diff --git a/drivers/raw/ifpga_rawdev/base/opae_hw_api.c b/drivers/raw/ifpga_rawdev/base/opae_hw_api.c\nindex a533dfe..50f6438 100644\n--- a/drivers/raw/ifpga_rawdev/base/opae_hw_api.c\n+++ b/drivers/raw/ifpga_rawdev/base/opae_hw_api.c\n@@ -303,12 +303,35 @@ static struct opae_adapter_ops *match_ops(struct opae_adapter *adapter)\n }\n \n /**\n- * opae_adapter_data_alloc - alloc opae_adapter_data data structure\n+ * opae_adapter_init - init opae_adapter data structure\n+ * @adpdate: pointer of opae_adater data structure\n+ * @name: adapter name.\n+ * @data: private data of this adapter.\n+ *\n+ * Return: 0 on success.\n+ */\n+int opae_adapter_init(struct opae_adapter *adapter,\n+\t\tconst char *name, void *data)\n+{\n+\tif (!adapter)\n+\t\treturn -ENOMEM;\n+\n+\tTAILQ_INIT(&adapter->acc_list);\n+\tadapter->data = data;\n+\tadapter->name = name;\n+\tadapter->ops = match_ops(adapter);\n+\n+\treturn 0;\n+}\n+\n+/**\n+ * opae_adapter_alloc - alloc opae_adapter data structure\n  * @name: adapter name.\n  * @data: private data of this adapter.\n  *\n  * Return: opae_adapter on success, otherwise NULL.\n  */\n+ /**This function will no longer be called.\n struct opae_adapter *opae_adapter_alloc(const char *name, void *data)\n {\n \tstruct opae_adapter *adapter = opae_zmalloc(sizeof(*adapter));\n@@ -316,13 +339,12 @@ struct opae_adapter *opae_adapter_alloc(const char *name, void *data)\n \tif (!adapter)\n \t\treturn NULL;\n \n-\tTAILQ_INIT(&adapter->acc_list);\n-\tadapter->data = data;\n-\tadapter->name = name;\n-\tadapter->ops = match_ops(adapter);\n+\tif (opae_adapter_init(adapter, name, data))\n+\t\treturn NULL;\n \n \treturn adapter;\n }\n+**/\n \n /**\n  * opae_adapter_enumerate - enumerate this adapter\ndiff --git a/drivers/raw/ifpga_rawdev/base/opae_hw_api.h b/drivers/raw/ifpga_rawdev/base/opae_hw_api.h\nindex 4bbc9df..332e0f3 100644\n--- a/drivers/raw/ifpga_rawdev/base/opae_hw_api.h\n+++ b/drivers/raw/ifpga_rawdev/base/opae_hw_api.h\n@@ -225,7 +225,8 @@ struct opae_adapter {\n void *opae_adapter_data_alloc(enum opae_adapter_type type);\n #define opae_adapter_data_free(data) opae_free(data)\n \n-struct opae_adapter *opae_adapter_alloc(const char *name, void *data);\n+int opae_adapter_init(struct opae_adapter *adapter,\n+\t\tconst char *name, void *data);\n #define opae_adapter_free(adapter) opae_free(adapter)\n \n int opae_adapter_enumerate(struct opae_adapter *adapter);\ndiff --git a/drivers/raw/ifpga_rawdev/ifpga_rawdev.c b/drivers/raw/ifpga_rawdev/ifpga_rawdev.c\nindex 32e318f..da772d0 100644\n--- a/drivers/raw/ifpga_rawdev/ifpga_rawdev.c\n+++ b/drivers/raw/ifpga_rawdev/ifpga_rawdev.c\n@@ -409,9 +409,10 @@\n \tdata->device_id = pci_dev->id.device_id;\n \tdata->vendor_id = pci_dev->id.vendor_id;\n \n+\tadapter = rawdev->dev_private;\n \t/* create a opae_adapter based on above device data */\n-\tadapter = opae_adapter_alloc(pci_dev->device.name, data);\n-\tif (!adapter) {\n+\tret = opae_adapter_init(adapter, pci_dev->device.name, data);\n+\tif (ret) {\n \t\tret = -ENOMEM;\n \t\tgoto free_adapter_data;\n \t}\n@@ -420,12 +421,10 @@\n \trawdev->device = &pci_dev->device;\n \trawdev->driver_name = pci_dev->device.driver->name;\n \n-\trawdev->dev_private = adapter;\n-\n \t/* must enumerate the adapter before use it */\n \tret = opae_adapter_enumerate(adapter);\n \tif (ret)\n-\t\tgoto free_adapter;\n+\t\tgoto free_adapter_data;\n \n \t/* get opae_manager to rawdev */\n \tmgr = opae_adapter_get_mgr(adapter);\n@@ -436,9 +435,6 @@\n \n \treturn ret;\n \n-free_adapter:\n-\tif (adapter)\n-\t\topae_adapter_free(adapter);\n free_adapter_data:\n \tif (data)\n \t\topae_adapter_data_free(data);\n",
    "prefixes": [
        "v3"
    ]
}