get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 45758,
    "url": "http://patchwork.dpdk.org/api/patches/45758/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/be28865619fec52cb5456bb69cfed18a4aa85569.1538398379.git.anatoly.burakov@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<be28865619fec52cb5456bb69cfed18a4aa85569.1538398379.git.anatoly.burakov@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/be28865619fec52cb5456bb69cfed18a4aa85569.1538398379.git.anatoly.burakov@intel.com",
    "date": "2018-10-01T12:56:09",
    "name": "[v8,01/21] mem: add length to memseg list",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "eb8bc195a810afd7e0468f47e2c4a0580f8bd0ea",
    "submitter": {
        "id": 4,
        "url": "http://patchwork.dpdk.org/api/people/4/?format=api",
        "name": "Anatoly Burakov",
        "email": "anatoly.burakov@intel.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/be28865619fec52cb5456bb69cfed18a4aa85569.1538398379.git.anatoly.burakov@intel.com/mbox/",
    "series": [
        {
            "id": 1614,
            "url": "http://patchwork.dpdk.org/api/series/1614/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=1614",
            "date": "2018-10-01T12:56:13",
            "name": "Support externally allocated memory in DPDK",
            "version": 8,
            "mbox": "http://patchwork.dpdk.org/series/1614/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/45758/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/45758/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 8E4561B13A;\n\tMon,  1 Oct 2018 14:56:41 +0200 (CEST)",
            "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n\tby dpdk.org (Postfix) with ESMTP id 5CBA11B11F\n\tfor <dev@dpdk.org>; Mon,  1 Oct 2018 14:56:36 +0200 (CEST)",
            "from orsmga008.jf.intel.com ([10.7.209.65])\n\tby orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t01 Oct 2018 05:56:35 -0700",
            "from irvmail001.ir.intel.com ([163.33.26.43])\n\tby orsmga008.jf.intel.com with ESMTP; 01 Oct 2018 05:56:31 -0700",
            "from sivswdev01.ir.intel.com (sivswdev01.ir.intel.com\n\t[10.237.217.45])\n\tby irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id\n\tw91CuUJ4000578; Mon, 1 Oct 2018 13:56:30 +0100",
            "from sivswdev01.ir.intel.com (localhost [127.0.0.1])\n\tby sivswdev01.ir.intel.com with ESMTP id w91CuU0l023797;\n\tMon, 1 Oct 2018 13:56:30 +0100",
            "(from aburakov@localhost)\n\tby sivswdev01.ir.intel.com with LOCAL id w91CuUNc023793;\n\tMon, 1 Oct 2018 13:56:30 +0100"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.54,327,1534834800\"; d=\"scan'208\";a=\"77775988\"",
        "From": "Anatoly Burakov <anatoly.burakov@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "John McNamara <john.mcnamara@intel.com>,\n\tMarko Kovacevic <marko.kovacevic@intel.com>,\n\tBruce Richardson <bruce.richardson@intel.com>,\n\tlaszlo.madarassy@ericsson.com, laszlo.vadkerti@ericsson.com,\n\tandras.kovacs@ericsson.com, winnie.tian@ericsson.com,\n\tdaniel.andrasi@ericsson.com, janos.kobor@ericsson.com,\n\tgeza.koblo@ericsson.com, srinath.mannam@broadcom.com,\n\tscott.branden@broadcom.com, ajit.khaparde@broadcom.com,\n\tkeith.wiles@intel.com, thomas@monjalon.net, shreyansh.jain@nxp.com,\n\tshahafs@mellanox.com, arybchenko@solarflare.com,\n\talejandro.lucero@netronome.com",
        "Date": "Mon,  1 Oct 2018 13:56:09 +0100",
        "Message-Id": "<be28865619fec52cb5456bb69cfed18a4aa85569.1538398379.git.anatoly.burakov@intel.com>",
        "X-Mailer": "git-send-email 1.7.0.7",
        "In-Reply-To": [
            "<cover.1538398379.git.anatoly.burakov@intel.com>",
            "<cover.1538398379.git.anatoly.burakov@intel.com>"
        ],
        "References": [
            "<cover.1538398379.git.anatoly.burakov@intel.com>",
            "<cover.1538384304.git.anatoly.burakov@intel.com>\n\t<cover.1538398379.git.anatoly.burakov@intel.com>"
        ],
        "Subject": "[dpdk-dev] [PATCH v8 01/21] mem: add length to memseg list",
        "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": "Previously, to calculate length of memory area covered by a memseg\nlist, we would've needed to multiply page size by length of fbarray\nbacking that memseg list. This is not obvious and unnecessarily\nlow level, so store length in the memseg list itself.\n\nThis breaks ABI, so bump the EAL ABI version and document the\nchange.\n\nSigned-off-by: Anatoly Burakov <anatoly.burakov@intel.com>\nAcked-by: Shreyansh Jain <shreyansh.jain@nxp.com>\n---\n doc/guides/rel_notes/release_18_11.rst            | 8 +++++++-\n drivers/bus/pci/linux/pci.c                       | 2 +-\n lib/librte_eal/bsdapp/eal/Makefile                | 2 +-\n lib/librte_eal/bsdapp/eal/eal_memory.c            | 2 ++\n lib/librte_eal/common/eal_common_memory.c         | 5 ++---\n lib/librte_eal/common/include/rte_eal_memconfig.h | 1 +\n lib/librte_eal/linuxapp/eal/Makefile              | 2 +-\n lib/librte_eal/linuxapp/eal/eal_memalloc.c        | 3 ++-\n lib/librte_eal/linuxapp/eal/eal_memory.c          | 4 +++-\n lib/librte_eal/meson.build                        | 2 +-\n 10 files changed, 21 insertions(+), 10 deletions(-)",
    "diff": "diff --git a/doc/guides/rel_notes/release_18_11.rst b/doc/guides/rel_notes/release_18_11.rst\nindex 9c00e33cc..9c17762a5 100644\n--- a/doc/guides/rel_notes/release_18_11.rst\n+++ b/doc/guides/rel_notes/release_18_11.rst\n@@ -134,6 +134,12 @@ ABI Changes\n    =========================================================\n \n \n+* eal: EAL library ABI version was changed due to previously announced work on\n+       supporting external memory in DPDK:\n+         - structure ``rte_memseg_list`` now has a new field indicating length\n+           of memory addressed by the segment list\n+\n+\n Removed Items\n -------------\n \n@@ -179,7 +185,7 @@ The libraries prepended with a plus sign were incremented in this version.\n      librte_compressdev.so.1\n      librte_cryptodev.so.5\n      librte_distributor.so.1\n-     librte_eal.so.8\n+   + librte_eal.so.9\n      librte_ethdev.so.10\n      librte_eventdev.so.4\n      librte_flow_classify.so.1\ndiff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c\nindex 04648ac93..d6e1027ab 100644\n--- a/drivers/bus/pci/linux/pci.c\n+++ b/drivers/bus/pci/linux/pci.c\n@@ -119,7 +119,7 @@ rte_pci_unmap_device(struct rte_pci_device *dev)\n static int\n find_max_end_va(const struct rte_memseg_list *msl, void *arg)\n {\n-\tsize_t sz = msl->memseg_arr.len * msl->page_sz;\n+\tsize_t sz = msl->len;\n \tvoid *end_va = RTE_PTR_ADD(msl->base_va, sz);\n \tvoid **max_va = arg;\n \ndiff --git a/lib/librte_eal/bsdapp/eal/Makefile b/lib/librte_eal/bsdapp/eal/Makefile\nindex d27da3d15..97bff4852 100644\n--- a/lib/librte_eal/bsdapp/eal/Makefile\n+++ b/lib/librte_eal/bsdapp/eal/Makefile\n@@ -22,7 +22,7 @@ LDLIBS += -lrte_kvargs\n \n EXPORT_MAP := ../../rte_eal_version.map\n \n-LIBABIVER := 8\n+LIBABIVER := 9\n \n # specific to bsdapp exec-env\n SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) := eal.c\ndiff --git a/lib/librte_eal/bsdapp/eal/eal_memory.c b/lib/librte_eal/bsdapp/eal/eal_memory.c\nindex 16d2bc7c3..65ea670f9 100644\n--- a/lib/librte_eal/bsdapp/eal/eal_memory.c\n+++ b/lib/librte_eal/bsdapp/eal/eal_memory.c\n@@ -79,6 +79,7 @@ rte_eal_hugepage_init(void)\n \t\t}\n \t\tmsl->base_va = addr;\n \t\tmsl->page_sz = page_sz;\n+\t\tmsl->len = internal_config.memory;\n \t\tmsl->socket_id = 0;\n \n \t\t/* populate memsegs. each memseg is 1 page long */\n@@ -370,6 +371,7 @@ alloc_va_space(struct rte_memseg_list *msl)\n \t\treturn -1;\n \t}\n \tmsl->base_va = addr;\n+\tmsl->len = mem_sz;\n \n \treturn 0;\n }\ndiff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c\nindex 0b69804ff..30d018209 100644\n--- a/lib/librte_eal/common/eal_common_memory.c\n+++ b/lib/librte_eal/common/eal_common_memory.c\n@@ -171,7 +171,7 @@ virt2memseg(const void *addr, const struct rte_memseg_list *msl)\n \n \t/* a memseg list was specified, check if it's the right one */\n \tstart = msl->base_va;\n-\tend = RTE_PTR_ADD(start, (size_t)msl->page_sz * msl->memseg_arr.len);\n+\tend = RTE_PTR_ADD(start, msl->len);\n \n \tif (addr < start || addr >= end)\n \t\treturn NULL;\n@@ -194,8 +194,7 @@ virt2memseg_list(const void *addr)\n \t\tmsl = &mcfg->memsegs[msl_idx];\n \n \t\tstart = msl->base_va;\n-\t\tend = RTE_PTR_ADD(start,\n-\t\t\t\t(size_t)msl->page_sz * msl->memseg_arr.len);\n+\t\tend = RTE_PTR_ADD(start, msl->len);\n \t\tif (addr >= start && addr < end)\n \t\t\tbreak;\n \t}\ndiff --git a/lib/librte_eal/common/include/rte_eal_memconfig.h b/lib/librte_eal/common/include/rte_eal_memconfig.h\nindex aff0688dd..1d8b0a6fe 100644\n--- a/lib/librte_eal/common/include/rte_eal_memconfig.h\n+++ b/lib/librte_eal/common/include/rte_eal_memconfig.h\n@@ -30,6 +30,7 @@ struct rte_memseg_list {\n \t\tuint64_t addr_64;\n \t\t/**< Makes sure addr is always 64-bits */\n \t};\n+\tsize_t len; /**< Length of memory area covered by this memseg list. */\n \tint socket_id; /**< Socket ID for all memsegs in this list. */\n \tuint64_t page_sz; /**< Page size for all memsegs in this list. */\n \tvolatile uint32_t version; /**< version number for multiprocess sync. */\ndiff --git a/lib/librte_eal/linuxapp/eal/Makefile b/lib/librte_eal/linuxapp/eal/Makefile\nindex fd92c75c2..5c16bc40f 100644\n--- a/lib/librte_eal/linuxapp/eal/Makefile\n+++ b/lib/librte_eal/linuxapp/eal/Makefile\n@@ -10,7 +10,7 @@ ARCH_DIR ?= $(RTE_ARCH)\n EXPORT_MAP := ../../rte_eal_version.map\n VPATH += $(RTE_SDK)/lib/librte_eal/common/arch/$(ARCH_DIR)\n \n-LIBABIVER := 8\n+LIBABIVER := 9\n \n VPATH += $(RTE_SDK)/lib/librte_eal/common\n \ndiff --git a/lib/librte_eal/linuxapp/eal/eal_memalloc.c b/lib/librte_eal/linuxapp/eal/eal_memalloc.c\nindex b2e2a9599..71a6e0fd9 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_memalloc.c\n+++ b/lib/librte_eal/linuxapp/eal/eal_memalloc.c\n@@ -986,7 +986,7 @@ free_seg_walk(const struct rte_memseg_list *msl, void *arg)\n \tint msl_idx, seg_idx, ret, dir_fd = -1;\n \n \tstart_addr = (uintptr_t) msl->base_va;\n-\tend_addr = start_addr + msl->memseg_arr.len * (size_t)msl->page_sz;\n+\tend_addr = start_addr + msl->len;\n \n \tif ((uintptr_t)wa->ms->addr < start_addr ||\n \t\t\t(uintptr_t)wa->ms->addr >= end_addr)\n@@ -1472,6 +1472,7 @@ secondary_msl_create_walk(const struct rte_memseg_list *msl,\n \t\treturn -1;\n \t}\n \tlocal_msl->base_va = primary_msl->base_va;\n+\tlocal_msl->len = primary_msl->len;\n \n \treturn 0;\n }\ndiff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c\nindex e3ac24815..897d94179 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_memory.c\n+++ b/lib/librte_eal/linuxapp/eal/eal_memory.c\n@@ -861,6 +861,7 @@ alloc_va_space(struct rte_memseg_list *msl)\n \t\treturn -1;\n \t}\n \tmsl->base_va = addr;\n+\tmsl->len = mem_sz;\n \n \treturn 0;\n }\n@@ -1369,6 +1370,7 @@ eal_legacy_hugepage_init(void)\n \t\tmsl->base_va = addr;\n \t\tmsl->page_sz = page_sz;\n \t\tmsl->socket_id = 0;\n+\t\tmsl->len = internal_config.memory;\n \n \t\t/* populate memsegs. each memseg is one page long */\n \t\tfor (cur_seg = 0; cur_seg < n_segs; cur_seg++) {\n@@ -1615,7 +1617,7 @@ eal_legacy_hugepage_init(void)\n \t\tif (msl->memseg_arr.count > 0)\n \t\t\tcontinue;\n \t\t/* this is an unused list, deallocate it */\n-\t\tmem_sz = (size_t)msl->page_sz * msl->memseg_arr.len;\n+\t\tmem_sz = msl->len;\n \t\tmunmap(msl->base_va, mem_sz);\n \t\tmsl->base_va = NULL;\n \ndiff --git a/lib/librte_eal/meson.build b/lib/librte_eal/meson.build\nindex e1fde15d1..62ef985b9 100644\n--- a/lib/librte_eal/meson.build\n+++ b/lib/librte_eal/meson.build\n@@ -21,7 +21,7 @@ else\n \terror('unsupported system type \"@0@\"'.format(host_machine.system()))\n endif\n \n-version = 8  # the version of the EAL API\n+version = 9  # the version of the EAL API\n allow_experimental_apis = true\n deps += 'compat'\n deps += 'kvargs'\n",
    "prefixes": [
        "v8",
        "01/21"
    ]
}