get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 1238,
    "url": "https://patches.dpdk.org/api/patches/1238/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/C6ECDF3AB251BE4894318F4E4512369780C07EEB@IRSMSX109.ger.corp.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": "<C6ECDF3AB251BE4894318F4E4512369780C07EEB@IRSMSX109.ger.corp.intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/C6ECDF3AB251BE4894318F4E4512369780C07EEB@IRSMSX109.ger.corp.intel.com",
    "date": "2014-11-10T13:33:12",
    "name": "[dpdk-dev,v7] eal: map PCI memory resources after hugepages",
    "commit_ref": null,
    "pull_url": null,
    "state": "not-applicable",
    "archived": true,
    "hash": "969d1dc7830c67f2c994bd97ca717ca5a2c98bdf",
    "submitter": {
        "id": 4,
        "url": "https://patches.dpdk.org/api/people/4/?format=api",
        "name": "Burakov, Anatoly",
        "email": "anatoly.burakov@intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/C6ECDF3AB251BE4894318F4E4512369780C07EEB@IRSMSX109.ger.corp.intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/1238/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/1238/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 [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 27A8B7E1C;\n\tMon, 10 Nov 2014 14:24:31 +0100 (CET)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n\tby dpdk.org (Postfix) with ESMTP id 8EA8058F1\n\tfor <dev@dpdk.org>; Mon, 10 Nov 2014 14:24:28 +0100 (CET)",
            "from fmsmga003.fm.intel.com ([10.253.24.29])\n\tby fmsmga102.fm.intel.com with ESMTP; 10 Nov 2014 05:34:12 -0800",
            "from irsmsx103.ger.corp.intel.com ([163.33.3.157])\n\tby FMSMGA003.fm.intel.com with ESMTP; 10 Nov 2014 05:25:22 -0800",
            "from irsmsx154.ger.corp.intel.com (163.33.192.96) by\n\tIRSMSX103.ger.corp.intel.com (163.33.3.157) with Microsoft SMTP\n\tServer (TLS) id 14.3.195.1; Mon, 10 Nov 2014 13:33:13 +0000",
            "from irsmsx109.ger.corp.intel.com ([169.254.13.101]) by\n\tIRSMSX154.ger.corp.intel.com ([169.254.12.116]) with mapi id\n\t14.03.0195.001; Mon, 10 Nov 2014 13:33:12 +0000"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"4.97,862,1389772800\"; d=\"scan'208\";a=\"414268567\"",
        "From": "\"Burakov, Anatoly\" <anatoly.burakov@intel.com>",
        "To": "\"Burakov, Anatoly\" <anatoly.burakov@intel.com>, \"dev@dpdk.org\"\n\t<dev@dpdk.org>",
        "Thread-Topic": "[dpdk-dev] [PATCH v7] eal: map PCI memory resources after\n\thugepages",
        "Thread-Index": "AQHP/NpxQ/zDj7SqH0Gr3BztFsuwDpxZ26uA",
        "Date": "Mon, 10 Nov 2014 13:33:12 +0000",
        "Message-ID": "<C6ECDF3AB251BE4894318F4E4512369780C07EEB@IRSMSX109.ger.corp.intel.com>",
        "References": "<1415347284-15468-1-git-send-email-liang.xu@cinfotech.cn>\n\t<1415619272-8281-1-git-send-email-anatoly.burakov@intel.com>",
        "In-Reply-To": "<1415619272-8281-1-git-send-email-anatoly.burakov@intel.com>",
        "Accept-Language": "en-US",
        "Content-Language": "en-US",
        "X-MS-Has-Attach": "",
        "X-MS-TNEF-Correlator": "",
        "x-originating-ip": "[163.33.239.181]",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "quoted-printable",
        "MIME-Version": "1.0",
        "Subject": "Re: [dpdk-dev] [PATCH v7] eal: map PCI memory resources after\n\thugepages",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <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": "Nak, there are issues with the patch. There is another patch already, but I'll submit it whenever Liang verifies it works with his setup.\n\nThanks,\nAnatoly\n\n-----Original Message-----\nFrom: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Anatoly Burakov\nSent: Monday, November 10, 2014 11:35 AM\nTo: dev@dpdk.org\nSubject: [dpdk-dev] [PATCH v7] eal: map PCI memory resources after hugepages\n\nMulti-process DPDK application must mmap hugepages and pci resources\ninto the same virtual address space. By default the virtual addresses\nare chosen by the primary process automatically when calling the mmap.\nBut sometimes the chosen virtual addresses aren't usable in secondary\nprocess - for example, secondary process is linked with more libraries\nthan primary process, and the library occupies the same address space\nthat the primary process has requested for PCI mappings.\n\nThis patch makes EAL map PCI BARs right after the hugepages (instead of\nlocation chosen by mmap) in virtual memory.\n\nSigned-off-by: Anatoly Burakov <anatoly.burakov@intel.com>\nSigned-off-by: Liang Xu <liang.xu@cinfotech.cn>\n---\n lib/librte_eal/linuxapp/eal/eal_pci.c              | 19 +++++++++++++++++++\n lib/librte_eal/linuxapp/eal/eal_pci_uio.c          |  9 ++++++++-\n lib/librte_eal/linuxapp/eal/eal_pci_vfio.c         | 13 +++++++++++--\n lib/librte_eal/linuxapp/eal/include/eal_pci_init.h |  6 ++++++\n 4 files changed, 44 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c\nindex 5fe3961..dae8739 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_pci.c\n+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c\n@@ -97,6 +97,25 @@ error:\n \treturn -1;\n }\n \n+void *\n+pci_find_max_end_va(void)\n+{\n+\tconst struct rte_memseg *seg = rte_eal_get_physmem_layout();\n+\tconst struct rte_memseg *last = seg;\n+\tunsigned i = 0;\n+\n+\tfor (i = 0; i < RTE_MAX_MEMSEG; i++, seg++) {\n+\t\tif (seg->addr == NULL)\n+\t\t\tbreak;\n+\n+\t\tif (seg->addr > last->addr)\n+\t\t\tlast = seg;\n+\n+\t}\n+\treturn RTE_PTR_ADD(last->addr, last->len);\n+}\n+\n+\n /* map a particular resource from a file */\n void *\n pci_map_resource(void *requested_addr, int fd, off_t offset, size_t size)\ndiff --git a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c\nindex 7e62266..5090bf1 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c\n+++ b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c\n@@ -48,6 +48,8 @@\n \n static int pci_parse_sysfs_value(const char *filename, uint64_t *val);\n \n+void *pci_map_addr = NULL;\n+\n \n #define OFF_MAX              ((uint64_t)(off_t)-1)\n static int\n@@ -371,10 +373,15 @@ pci_uio_map_resource(struct rte_pci_device *dev)\n \t\t\tif (maps[j].addr != NULL)\n \t\t\t\tfail = 1;\n \t\t\telse {\n-\t\t\t\tmapaddr = pci_map_resource(NULL, fd, (off_t)offset,\n+\t\t\t\tif (pci_map_addr == NULL)\n+\t\t\t\t\tpci_map_addr = pci_find_max_end_va();\n+\n+\t\t\t\tmapaddr = pci_map_resource(pci_map_addr, fd, (off_t)offset,\n \t\t\t\t\t\t(size_t)maps[j].size);\n \t\t\t\tif (mapaddr == NULL)\n \t\t\t\t\tfail = 1;\n+\n+\t\t\t\tpci_map_addr = RTE_PTR_ADD(pci_map_addr, maps[j].size);\n \t\t\t}\n \n \t\t\tif (fail) {\ndiff --git a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c\nindex c776ddc..fb6ee7a 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c\n+++ b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c\n@@ -720,8 +720,17 @@ pci_vfio_map_resource(struct rte_pci_device *dev)\n \t\tif (i == msix_bar)\n \t\t\tcontinue;\n \n-\t\tbar_addr = pci_map_resource(maps[i].addr, vfio_dev_fd, reg.offset,\n-\t\t\t\treg.size);\n+\t\tif (internal_config.process_type == RTE_PROC_PRIMARY) {\n+\t\t\tif (pci_map_addr == NULL)\n+\t\t\t\tpci_map_addr = pci_find_max_end_va();\n+\n+\t\t\tbar_addr = pci_map_resource(pci_map_addr, vfio_dev_fd, reg.offset,\n+\t\t\t\t\treg.size);\n+\t\t\tpci_map_addr = RTE_PTR_ADD(pci_map_addr, reg.size);\n+\t\t} else {\n+\t\t\tbar_addr = pci_map_resource(maps[i].addr, vfio_dev_fd, reg.offset,\n+\t\t\t\t\treg.size);\n+\t\t}\n \n \t\tif (bar_addr == NULL) {\n \t\t\tRTE_LOG(ERR, EAL, \"  %s mapping BAR%i failed: %s\\n\", pci_addr, i,\ndiff --git a/lib/librte_eal/linuxapp/eal/include/eal_pci_init.h b/lib/librte_eal/linuxapp/eal/include/eal_pci_init.h\nindex d758bee..1070eb8 100644\n--- a/lib/librte_eal/linuxapp/eal/include/eal_pci_init.h\n+++ b/lib/librte_eal/linuxapp/eal/include/eal_pci_init.h\n@@ -59,6 +59,12 @@ struct mapped_pci_resource {\n TAILQ_HEAD(mapped_pci_res_list, mapped_pci_resource);\n extern struct mapped_pci_res_list *pci_res_list;\n \n+/*\n+ * Helper function to map PCI resources right after hugepages in virtual memory\n+ */\n+extern void *pci_map_addr;\n+void *pci_find_max_end_va(void);\n+\n void *pci_map_resource(void *requested_addr, int fd, off_t offset,\n \t\tsize_t size);\n \n",
    "prefixes": [
        "dpdk-dev",
        "v7"
    ]
}