get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 1181,
    "url": "https://patches.dpdk.org/api/patches/1181/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/C6ECDF3AB251BE4894318F4E4512369780C07670@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": "<C6ECDF3AB251BE4894318F4E4512369780C07670@IRSMSX109.ger.corp.intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/C6ECDF3AB251BE4894318F4E4512369780C07670@IRSMSX109.ger.corp.intel.com",
    "date": "2014-11-06T15:41:37",
    "name": "[dpdk-dev,v5] eal: map uio resources after hugepages when the base_virtaddr is configured.",
    "commit_ref": null,
    "pull_url": null,
    "state": "not-applicable",
    "archived": true,
    "hash": "ed9372950cf0c74b82b0c7fd0e79d0b257d776ba",
    "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/C6ECDF3AB251BE4894318F4E4512369780C07670@IRSMSX109.ger.corp.intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/1181/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/1181/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 606667F25;\n\tThu,  6 Nov 2014 16:32:16 +0100 (CET)",
            "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n\tby dpdk.org (Postfix) with ESMTP id CD6527F18\n\tfor <dev@dpdk.org>; Thu,  6 Nov 2014 16:32:12 +0100 (CET)",
            "from orsmga002.jf.intel.com ([10.7.209.21])\n\tby orsmga101.jf.intel.com with ESMTP; 06 Nov 2014 07:41:39 -0800",
            "from irsmsx104.ger.corp.intel.com ([163.33.3.159])\n\tby orsmga002.jf.intel.com with ESMTP; 06 Nov 2014 07:41:38 -0800",
            "from irsmsx109.ger.corp.intel.com ([169.254.13.101]) by\n\tIRSMSX104.ger.corp.intel.com ([169.254.5.58]) with mapi id\n\t14.03.0195.001; Thu, 6 Nov 2014 15:41:38 +0000"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.07,326,1413270000\"; d=\"scan'208\";a=\"632689354\"",
        "From": "\"Burakov, Anatoly\" <anatoly.burakov@intel.com>",
        "To": "lxu <liang.xu@cinfotech.cn>, \"dev@dpdk.org\" <dev@dpdk.org>",
        "Thread-Topic": "[PATCH v5] eal: map uio resources after hugepages when the\n\tbase_virtaddr is configured.",
        "Thread-Index": "AQHP+dcGdG2T5nOWEkiCOSTResgRgJxTupOw",
        "Date": "Thu, 6 Nov 2014 15:41:37 +0000",
        "Message-ID": "<C6ECDF3AB251BE4894318F4E4512369780C07670@IRSMSX109.ger.corp.intel.com>",
        "References": "<1415193919-17361-1-git-send-email-liang.xu@cinfotech.cn>\n\t<1415287928-14513-1-git-send-email-liang.xu@cinfotech.cn>",
        "In-Reply-To": "<1415287928-14513-1-git-send-email-liang.xu@cinfotech.cn>",
        "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 v5] eal: map uio resources after hugepages\n\twhen the base_virtaddr is configured.",
        "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": "The explanation of the patch should be generic and impartial, i.e. when this and this happens, it results in such and such problem, and this patch fixes it by doing this and that. In other words, this will appear in the git history, so whoever is reading the commit log will be able to figure out what this patch does and why it's been applied.\n\nThomas, do we need to do similar changes to VFIO code, to keep consistency? Also, do we really need for this to depend on --base-virtaddr? Why not do it unconditionally, i.e. map PCI resources right after hugepages in memory?\n\nThanks,\nAnatoly\n\n-----Original Message-----\nFrom: lxu [mailto:liang.xu@cinfotech.cn] \nSent: Thursday, November 6, 2014 3:32 PM\nTo: dev@dpdk.org\nCc: Burakov, Anatoly; thomas.monjalon@6wind.com; De Lara Guarch, Pablo\nSubject: [PATCH v5] eal: map uio resources after hugepages when the base_virtaddr is configured.\n\nSorry, I'm learning the right way to send a patch by git. \nI have a multiple processes application. When start the secondary process, I got error message \"EAL: pci_map_resource(): cannot mmap(11, 0x7ffff7fba000, 0x20000, 0x0): Bad file descriptor (0x7ffff7fb9000)\".\nThe secondary process links a lot of additional shared libraries, so the address 0x7ffff7fba000 had already be used.\nI had fixed similar hugepages mmap problems by base_virtaddr. So I believe the uio resource should be mapped into base_virtaddr at this situation.\nThis patch try to fix it.\n\n\nSigned-off-by: lxu <liang.xu@cinfotech.cn>\n---\n lib/librte_eal/linuxapp/eal/eal_pci_uio.c | 29 ++++++++++++++++++++++++++++-\n 1 file changed, 28 insertions(+), 1 deletion(-)\n\n \n+\t/* map uio resource into user required virtual address */\n+\tstatic void * requested_addr;\n+\tif (internal_config.base_virtaddr && NULL == requested_addr) {\n+\t\tconst struct rte_memseg * last = get_physmem_last();\n+\t\trequested_addr = RTE_PTR_ADD(last->addr, last->len);\n+\t}\n+\n \tdev->intr_handle.fd = -1;\n \tdev->intr_handle.type = RTE_INTR_HANDLE_UNKNOWN;\n \n@@ -371,10 +396,12 @@ 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\tmapaddr = pci_map_resource(requested_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+\t\t\t\telse if (NULL != requested_addr)\n+\t\t\t\t\trequested_addr = RTE_PTR_ADD(mapaddr, maps[j].size);\n \t\t\t}\n \n \t\t\tif (fail) {\n--\n1.9.1",
    "diff": "diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c\nindex 7e62266..a2c9ab6 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c\n+++ b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c\n@@ -273,6 +273,24 @@ pci_get_uio_dev(struct rte_pci_device *dev, char *dstbuf,\n \treturn uio_num;\n }\n \n+static inline const struct rte_memseg *\n+get_physmem_last(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 last;\n+}\n+\n /* map the PCI resource of a PCI device in virtual memory */  int  pci_uio_map_resource(struct rte_pci_device *dev) @@ -290,6 +308,13 @@ pci_uio_map_resource(struct rte_pci_device *dev)\n \tstruct mapped_pci_resource *uio_res;\n \tstruct pci_map *maps;\n",
    "prefixes": [
        "dpdk-dev",
        "v5"
    ]
}