Show a cover letter.

GET /api/covers/42498/
Content-Type: application/json
Vary: Accept

    "id": 42498,
    "url": "",
    "web_url": "",
    "project": {
        "id": 1,
        "url": "",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "",
        "list_email": "",
        "web_url": "",
        "scm_url": "git://",
        "webscm_url": ""
    "msgid": "<>",
    "date": "2018-07-06T13:17:21",
    "name": "[RFC,00/11] Support externally allocated memory in DPDK",
    "submitter": {
        "id": 4,
        "url": "",
        "name": "Burakov, Anatoly",
        "email": ""
    "mbox": "",
    "series": [
            "id": 453,
            "url": "",
            "web_url": "",
            "date": "2018-07-06T13:17:21",
            "name": "Support externally allocated memory in DPDK",
            "version": 1,
            "mbox": ""
    "comments": "",
    "headers": {
        "List-Subscribe": "<>,\n\t<>",
        "Cc": ",,\n\",
        "X-Original-To": "",
        "Date": "Fri,  6 Jul 2018 14:17:21 +0100",
        "Precedence": "list",
        "X-BeenThere": "",
        "X-Mailer": "git-send-email",
        "List-Archive": "<>",
        "To": "",
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "Errors-To": "",
        "List-Post": "<>",
        "Received": [
            "from [] (localhost [])\n\tby (Postfix) with ESMTP id 96C7C1BE4F;\n\tFri,  6 Jul 2018 15:17:38 +0200 (CEST)",
            "from ( [])\n\tby (Postfix) with ESMTP id 0D09F1BE41\n\tfor <>; Fri,  6 Jul 2018 15:17:35 +0200 (CEST)",
            "from ([])\n\tby with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t06 Jul 2018 06:17:34 -0700",
            "from ([])\n\tby with ESMTP; 06 Jul 2018 06:17:33 -0700",
            "from (\n\t[])\n\tby (8.14.3/8.13.6/MailSET/Hub) with ESMTP id\n\tw66DHX2r027466; Fri, 6 Jul 2018 14:17:33 +0100",
            "from (localhost [])\n\tby with ESMTP id w66DHWOW003739;\n\tFri, 6 Jul 2018 14:17:32 +0100",
            "(from aburakov@localhost)\n\tby with LOCAL id w66DHWFH003731;\n\tFri, 6 Jul 2018 14:17:32 +0100"
        "From": "Anatoly Burakov <>",
        "List-Help": "<>",
        "X-ExtLoop1": "1",
        "X-Amp-File-Uploaded": "False",
        "Sender": "\"dev\" <>",
        "List-Id": "DPDK patches and discussions <>",
        "Subject": "[dpdk-dev] [RFC 00/11] Support externally allocated memory in DPDK",
        "List-Unsubscribe": "<>,\n\t<>",
        "Return-Path": "<>",
        "X-IronPort-AV": "E=Sophos;i=\"5.51,316,1526367600\"; d=\"scan'208\";a=\"54516396\"",
        "Delivered-To": "",
        "Message-Id": "<>",
        "X-Mailman-Version": "2.1.15"
    "content": "This is a proposal to enable using externally allocated memory\nin DPDK.\n\nIn a nutshell, here is what is being done here:\n\n- Index malloc heaps by NUMA node index, rather than NUMA node itself\n- Add identifier string to malloc heap, to uniquely identify it\n- Allow creating named heaps and add/remove memory to/from those heaps\n- Allocate memseg lists at runtime, to keep track of IOVA addresses\n  of externally allocated memory\n  - If IOVA addresses aren't provided, use RTE_BAD_IOVA\n- Allow malloc and memzones to allocate from named heaps\n\nThe responsibility to ensure memory is accessible before using it is\non the shoulders of the user - there is no checking done with regards\nto validity of the memory (nor could there be...).\n\nThe following limitations are present:\n\n- No multiprocess support\n- No thread safety\n\nThere is currently no way to allocate memory during initialization\nstage, so even if multiprocess support is added, it is not guaranteed\nto work because of underlying issues with mapping fbarrays in\nsecondary processes. This is not an issue in single process scenario,\nbut it may be an issue in a multiprocess scenario in case where\nprimary doesn't intend to share the externally allocated memory, yet\nadding such memory could fail because some other process failed to\nattach to this shared memory when it wasn't needed.\n\nAnatoly Burakov (11):\n  mem: allow memseg lists to be marked as external\n  eal: add function to rerieve socket index by socket ID\n  malloc: index heaps using heap ID rather than NUMA node\n  malloc: add name to malloc heaps\n  malloc: enable retrieving statistics from named heaps\n  malloc: enable allocating from named heaps\n  malloc: enable creating new malloc heaps\n  malloc: allow adding memory to named heaps\n  malloc: allow removing memory from named heaps\n  malloc: allow destroying heaps\n  memzone: enable reserving memory from named heaps\n\n config/common_base                            |   1 +\n lib/librte_eal/common/eal_common_lcore.c      |  15 +\n lib/librte_eal/common/eal_common_memory.c     |  51 +++-\n lib/librte_eal/common/eal_common_memzone.c    | 283 ++++++++++++++----\n .../common/include/rte_eal_memconfig.h        |   5 +-\n lib/librte_eal/common/include/rte_lcore.h     |  19 +-\n lib/librte_eal/common/include/rte_malloc.h    | 158 +++++++++-\n .../common/include/rte_malloc_heap.h          |   2 +\n lib/librte_eal/common/include/rte_memzone.h   | 183 +++++++++++\n lib/librte_eal/common/malloc_heap.c           | 277 +++++++++++++++--\n lib/librte_eal/common/malloc_heap.h           |  26 ++\n lib/librte_eal/common/rte_malloc.c            | 197 +++++++++++-\n lib/librte_eal/            |  10 +\n 13 files changed, 1118 insertions(+), 109 deletions(-)"