Show a cover letter.

GET /api/covers/52226/?format=api
Content-Type: application/json
Vary: Accept

    "id": 52226,
    "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": "2019-04-03T20:09:08",
    "name": "[v7,0/8] Add stack library and new mempool handler",
    "submitter": {
        "id": 586,
        "url": "",
        "name": "Eads, Gage",
        "email": ""
    "mbox": "",
    "series": [
            "id": 4101,
            "url": "",
            "web_url": "",
            "date": "2019-04-03T20:09:08",
            "name": "Add stack library and new mempool handler",
            "version": 7,
            "mbox": ""
    "comments": "",
    "headers": {
        "X-Mailer": "git-send-email 2.13.6",
        "List-Id": "DPDK patches and discussions <>",
        "Precedence": "list",
        "List-Help": "<>",
        "Date": "Wed,  3 Apr 2019 15:09:08 -0500",
        "X-Mailman-Version": "2.1.15",
        "Delivered-To": "",
        "List-Unsubscribe": "<>,\n\t<>",
        "List-Subscribe": "<>,\n\t<>",
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "Cc": ",,\n\,,\n\, \n\,,",
        "To": "",
        "Errors-To": "",
        "References": "<>",
        "Sender": "\"dev\" <>",
        "From": "Gage Eads <>",
        "Return-Path": "<>",
        "X-IronPort-AV": "E=Sophos;i=\"5.60,306,1549958400\"; d=\"scan'208\";a=\"128403685\"",
        "List-Post": "<>",
        "Received": [
            "from [] (localhost [])\n\tby (Postfix) with ESMTP id BACDB5F17;\n\tWed,  3 Apr 2019 22:10:00 +0200 (CEST)",
            "from ( [])\n\tby (Postfix) with ESMTP id 9129D4F93\n\tfor <>; Wed,  3 Apr 2019 22:09:59 +0200 (CEST)",
            "from ([])\n\tby with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t03 Apr 2019 13:09:58 -0700",
            "from ([])\n\tby with ESMTP; 03 Apr 2019 13:09:57 -0700"
        "List-Archive": "<>",
        "X-Amp-File-Uploaded": "False",
        "Subject": "[dpdk-dev] [PATCH v7 0/8] Add stack library and new mempool handler",
        "In-Reply-To": "<>",
        "Message-Id": "<>",
        "X-ExtLoop1": "1",
        "X-BeenThere": "",
        "X-Original-To": ""
    "content": "This patchset introduces a stack library, supporting both lock-based and\nlock-free stacks, and a lock-free stack mempool handler.\n\nThe lock-based stack code is derived from the existing stack mempool handler,\nand that handler is refactored to use the stack library.\n\nThe lock-free stack mempool handler is intended for usages where the rte\nring's \"non-preemptive\" constraint is not acceptable; for example, if the\napplication uses a mixture of pinned high-priority threads and multiplexed\nlow-priority threads that share a mempool.\n\nNote that the lock-free algorithm relies on a 128-bit compare-and-swap[1],\nso it is currently limited to the x86_64 platform.\n\nThis patchset is the successor to a patchset containing only the new mempool\nhandler[2].\n\n[1]\n[2]\n\n---\nv7:\n- Add rte_branch_prediction.h include to rte_stack_std.h for unlikely()\n- Add rte_compat.h include to rte_stack.h for __rte_experimental\n\nv6:\n- Add load-acquire fence to the lock-free push function\n- Correct generic implementation's pop_elems 128b CAS success and failure\n  memorder to match those in the C11 implementation.\n\nv5:\n- Add comment to explain padding in *_get_memsize() functions\n- Prefix internal functions with '__'\n- Use RTE_ASSERT for performance critical run-time checks\n- Don't use __atomic_load in the C11 pop_elems function, and put an acquire\n  thread fence at the start of the 2nd do-while loop\n- Change pop_elems 128b CAS success memorder to RELEASE and failure memorder to\n  RELAXED\n- Change compile-time assertion to run for all 64-bit architectures\n- Reorganize the code with standard and lock-free .c and .h files\n\nv4:\n- Fix 32-bit build error in test_stack.c by using %zu format specifier for\n  size_t\n- Rebase onto master\n\nv3:\n- Rebase patchset onto master (test/test/ -> app/test/)\n- Fix rte_stack_std_push() segfault introduced in v2\n\nv2:\n- Reworked structure and function naming to use rte_stack_{std, lf}_...\n- Updated to the latest rte_atomic128_cmp_exchange() interface.\n- Rename STACK_F_NB -> RTE_STACK_F_LF.\n- Remove rte_rmb() and rte_wmb() from the generic push and pop implementations.\n  These are obviated by rte_atomic128_cmp_exchange()'s two memorder arguments.\n- Edit stack_lib.rst text to 80 chars/line.\n- Fix rte_stack.h doxygen formatting.\n- Allocate popped_objs array from the heap\n- Fix stack_thread_push_pop bug (\"&t->sz\" -> \"t->sz\")\n- Remove unnecessary NULL check from test_stack_basic\n- Properly terminate the name string in test_stack_name_length\n- Add an empty array of struct rte_nb_lifo_elem elements\n- In rte_nb_lifo_push(), retrieve the last element from __nb_lifo_pop()\n- Split C11 implementation into a separate patchset\n\nGage Eads (8):\n  stack: introduce rte stack library\n  mempool/stack: convert mempool to use rte stack\n  test/stack: add stack test\n  test/stack: add stack perf test\n  stack: add lock-free stack implementation\n  stack: add C11 atomic implementation\n  test/stack: add lock-free stack tests\n  mempool/stack: add lock-free stack mempool handler\n\n MAINTAINERS                                     |   9 +-\n app/test/Makefile                               |   3 +\n app/test/                            |   7 +\n app/test/test_stack.c                           | 423 ++++++++++++++++++++++++\n app/test/test_stack_perf.c                      | 356 ++++++++++++++++++++\n config/common_base                              |   5 +\n doc/api/                       |   1 +\n doc/api/                        |   1 +\n doc/guides/prog_guide/env_abstraction_layer.rst |  10 +\n doc/guides/prog_guide/index.rst                 |   1 +\n doc/guides/prog_guide/stack_lib.rst             |  83 +++++\n doc/guides/rel_notes/release_19_05.rst          |  13 +\n drivers/mempool/stack/Makefile                  |   3 +-\n drivers/mempool/stack/               |   6 +-\n drivers/mempool/stack/rte_mempool_stack.c       | 115 +++----\n lib/Makefile                                    |   2 +\n lib/librte_stack/Makefile                       |  29 ++\n lib/librte_stack/                    |  12 +\n lib/librte_stack/rte_stack.c                    | 196 +++++++++++\n lib/librte_stack/rte_stack.h                    | 260 +++++++++++++++\n lib/librte_stack/rte_stack_lf.c                 |  31 ++\n lib/librte_stack/rte_stack_lf.h                 | 106 ++++++\n lib/librte_stack/rte_stack_lf_c11.h             | 175 ++++++++++\n lib/librte_stack/rte_stack_lf_generic.h         | 164 +++++++++\n lib/librte_stack/rte_stack_pvt.h                |  34 ++\n lib/librte_stack/rte_stack_std.c                |  26 ++\n lib/librte_stack/rte_stack_std.h                | 121 +++++++\n lib/librte_stack/          |   9 +\n lib/                                 |   2 +-\n mk/                                   |   1 +\n 30 files changed, 2132 insertions(+), 72 deletions(-)\n create mode 100644 app/test/test_stack.c\n create mode 100644 app/test/test_stack_perf.c\n create mode 100644 doc/guides/prog_guide/stack_lib.rst\n create mode 100644 lib/librte_stack/Makefile\n create mode 100644 lib/librte_stack/\n create mode 100644 lib/librte_stack/rte_stack.c\n create mode 100644 lib/librte_stack/rte_stack.h\n create mode 100644 lib/librte_stack/rte_stack_lf.c\n create mode 100644 lib/librte_stack/rte_stack_lf.h\n create mode 100644 lib/librte_stack/rte_stack_lf_c11.h\n create mode 100644 lib/librte_stack/rte_stack_lf_generic.h\n create mode 100644 lib/librte_stack/rte_stack_pvt.h\n create mode 100644 lib/librte_stack/rte_stack_std.c\n create mode 100644 lib/librte_stack/rte_stack_std.h\n create mode 100644 lib/librte_stack/"