Show a cover letter.

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

    "id": 42335,
    "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-05T11:48:07",
    "name": "[v10,00/27] Device querying",
    "submitter": {
        "id": 269,
        "url": "",
        "name": "Gaëtan Rivet",
        "email": ""
    "mbox": "",
    "series": [
            "id": 419,
            "url": "",
            "web_url": "",
            "date": "2018-07-05T11:48:07",
            "name": "Device querying",
            "version": 10,
            "mbox": ""
    "comments": "",
    "headers": {
        "Return-Path": "<>",
        "References": "<>",
        "X-Mailman-Version": "2.1.15",
        "From": "Gaetan Rivet <>",
        "List-Post": "<>",
        "List-Help": "<>",
        "X-BeenThere": "",
        "Message-Id": "<>",
        "X-Original-To": "",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=b6ho7lHB53sZcskjXG6xFjHaJrBQlUOxIDu4vpRh900=;\n\tb=qmO1ajqy61CLkOckknLJRkuQ684aqLPQhx/jAitG5HU1alpiLtJZkjzU24OBg+jD3+\n\tTCklHaEsDTApuDSZyJUs3AxWP1eqhMi9lMS8eqM51M/U8IUCCTaisvtQ29bgZrVUE9Lo\n\tDl8wCsPjQFYvHGX808iJpduzeH3S7Qoaay4MkLFaCSV0P9x98NFE65Qg4D08KhGon7QP\n\tg2GQjjLF5zcCg6yj+/m3iTzqdy7Xg87i/GsQkCBwq29xhLegMkVyHvBgscwHC9T6wcjX\n\to9g+OHK19NLT6etLdKxOjDUP+sG1NUZkhBSzuyZUBOl7zV6UxX9A/ZhkGjAfKGCUHoVy\n\tq0EA==",
        "Received": [
            "from [] (localhost [])\n\tby (Postfix) with ESMTP id 584891BEBD;\n\tThu,  5 Jul 2018 13:48:59 +0200 (CEST)",
            "from (\n\t[]) by (Postfix) with ESMTP id 338451BEB9\n\tfor <>; Thu,  5 Jul 2018 13:48:58 +0200 (CEST)",
            "by with SMTP id v3-v6so6752252wmh.0\n\tfor <>; Thu, 05 Jul 2018 04:48:58 -0700 (PDT)",
            "from (\n\t[]) by with ESMTPSA id\n\to42-v6sm15809183wrc.50.2018.\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tThu, 05 Jul 2018 04:48:56 -0700 (PDT)"
        "X-Mailer": "git-send-email 2.18.0",
        "X-Received": "by 2002:adf:e285:: with SMTP id\n\tv5-v6mr4066008wri.54.1530791337193; \n\tThu, 05 Jul 2018 04:48:57 -0700 (PDT)",
        "Subject": "[dpdk-dev] [PATCH v10 00/27] Device querying",
        "Precedence": "list",
        "X-Gm-Message-State": "APt69E1yWEiuKhH7R7vyR/Fe6n5khEPsfG8bDvYnx3VdTRplfYHudBTu\n\t3LOGKiVfu6zZ/wZEbik8O1hpALUu",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\; s=20150623;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=b6ho7lHB53sZcskjXG6xFjHaJrBQlUOxIDu4vpRh900=;\n\tb=hE3RuML2iAjAICj65ALfBRq1wqf3MYnFnFC1xw14Wml/Z7gNBo/je7uijOkq2IE3/k\n\tEDfP6EdmkHHjxBny1rr3zOi8ZmqE68kcQTC+87v9P3nUh/wUzc30LWC+P7zOYLMs66nz\n\taD+wkwbcqew/XGA48jfIipyb+s4nTthojaRzx7wbbRIjh3ZgeAfPF6EO6MjxsYiHxtwf\n\tz3qfef+2KsaxGMAGTBQG4Bl2jMEANR7D2XfPRMHcybjSSLI5Col7V381faYF3X1AzSlm\n\t/yi1pMGy6M0xw4dhSn6hayIfDthKs+HEF9dd0LW+CRQrLuG0TzDOoaSp2GBL9FHg/8c7\n\tL4AQ==",
        "List-Archive": "<>",
        "Date": "Thu,  5 Jul 2018 13:48:07 +0200",
        "Sender": "\"dev\" <>",
        "Errors-To": "",
        "List-Subscribe": "<>,\n\t<>",
        "X-Google-Smtp-Source": "AAOMgpd1bFKzRrzLVqv9yRN0eqcg7h29E/ILrV94bmN85O4gm1ib0HBaUX2nmN7hOkm9GXK6nNylwQ==",
        "Cc": "Gaetan Rivet <>,\n\tNeil Horman <>, \n\tKeith Wiles <>, Matan Azrad <>,\n\tShreyansh Jain <>,\n\tBruce Richardson <>,\n\tAndrew Rybchenko <>",
        "List-Id": "DPDK patches and discussions <>",
        "Delivered-To": "",
        "In-Reply-To": "<>",
        "List-Unsubscribe": "<>,\n\t<>",
        "To": ""
    "content": "This patchset introduces a new EAL API for querying devices,\nfiltered by arbitrary properties.\n\nThe following elements are introduced to this end:\n\n * A new object, \"rte_class\", is used to describe\n   the device class abstraction layer (eth, crypto, ...).\n\n * Both rte_bus and rte_class now offer a way to\n   list their devices and filter the result\n   using locally defined properties.\n\n * The rte_dev API now has an rte_dev_iterator, which\n   is the way for the user to define the device filter\n   and iterate upon the resulting set.\n\nAs an example, the \"eth\" device class is implemented.\n\nAdditionally, the device filters for\n\n  + rte_bus_pci\n  + rte_bus_vdev\n  + rte_class_eth\n\nare implemented and can be used with some\nproperties each, to show how to extend those.\n\nSome example of filters:\n\n  \"bus=pci/class=eth\"\n  \"bus=pci\"\n  \"class=eth\"\n  \"class=eth,name=net_ring0\"\n  \"bus=pci,id=00:00.0\"\n  \"bus=vdev,driver=net_ring\"\n\n---\n\nv2:\n\n  * Reworked the dev_iterate callback to simplify\n    its implementation.\n\n    Now dev_iterate implementation do not need to learn\n    about the intricacies of the rte_dev_iterator.\n    The rte_dev_iterator is managed purely by the\n    rte_dev_iterator_next function. Buses and classes then\n    do not have to care about settings things right.\n\n    Additionally, dev_iterate implementations do not\n    have to sanitize their dev string anymore, they\n    are prepared by the rte_dev layer prior, which also\n    reduces the number of dynamic allocations.\n\nv3:\n\n  * Introduced central constructor priority list.\n  * Removed lightweight kvarg parsing utility,\n    using librte_kvargs instead.\n  * Reversed dependencies of librte_kvargs and\n    librte_eal.\n  * Fixed a few bugs.\n  * @Bruce: I have noted the request for meson support.\n    I will install it and attempt it once the bulk of the work is done.\n\nv4:\n\n  * Fixed a few bugs, added relevant acks,\n    fixed some typos.\n  * Made each matching functions actually check for a proper\n    list of accepted properties.\n  * rte_kvargs now includes rte_eal directly and keeps rte_log.\n  * added generic string comparison function to rte_kvargs,\n    as some kind of comparison should probably be shared by many layers.\n\nv5:\n\n  * Rebased on master\n  * Use strcspn instead of custom function.\n  * Introduce private generic rte_eth_dev iterator.\n    This could be generalized to other iterators\n    (port_next, owner_id-aware, etc).\n  * Attempted to support\n    Got lost in the implicit variables declared\n    when inversing dependencies between kvargs and EAL.\n    Removed anything related to meson.\n  * Postponed genericization of work from\n    device query to device declaration.\n    Much bigger than anticipated, will let this\n    part get in first and iterate over it.\n\nv6:\n\n  * Rebased on master\n  * Introduce RTE_PRIORITY_LAST, to explicitly set\n    the lowest constructor priority.\n  * Fix copyright notice for eth_privage.* files.\n\nv7:\n\n  * Rebased on master\n  * Fix rte_kvargs_strcmp return value.\n  * Fix layer parsing error\n    devstr \"bus=pci/onemorelayer\" now tells\n    that the additional layer is not recognized.\n\nv8:\n\n  * Rebased on master\n  * Cleaned kvargs use: introduced\n    a new parser function, that simplifies\n    using the library for DPDK devargs.\n  * Refactored devargs parsing in a single\n    function within rte_devargs.\n    This function is useful both for rte_dev\n    parsing its iterator, and for rte_devargs\n    parsing --dev parameters (not yet implemented).\n  * A few small bugfixes.\n\nv9:\n\n  * Rebased on master\n  * Fixed cyclic dependency kvargs <-> eal\n  * Fixed a few checkpatch issues\n  * Added dynamic help to testpmd for new \"show device\" command\n  * Added devargs processing stubs to\n    primary buses / classes\n  * Added new --dev generic device declaration option\n\nv10:\n\n  * Support meson build\n\nGaetan Rivet (27):\n  devargs: add non-variadic parsing function\n  kvargs: remove error logs\n  kvargs: build before EAL\n  kvargs: introduce a more flexible parsing function\n  eal: introduce dtor macros\n  eal: introduce device class abstraction\n  eal/class: register destructor\n  devargs: add function to parse device layers\n  eal/dev: add device iterator interface\n  eal/class: add device iteration\n  eal/bus: add device iteration\n  eal/dev: implement device iteration initialization\n  eal/dev: implement device iteration\n  kvargs: add generic string matching callback\n  bus/pci: implement device iteration and comparison\n  bus/pci: add device matching field id\n  bus/vdev: implement device iteration\n  bus/vdev: add device matching field driver\n  ethdev: add private generic device iterator\n  ethdev: register ether layer as a class\n  ethdev: add device matching field name\n  app/testpmd: add show device command\n  bus/pci: pre-process declarative PCI devargs\n  bus/vdev: pre-process declarative vdev devargs\n  bus/pci: process declarative PCI devargs\n  ethdev: process declarative eth devargs\n  eal: add generic dev parameter\n\n app/test-pmd/cmdline.c                      |  54 +++++\n doc/guides/testpmd_app_ug/testpmd_funcs.rst |  24 +++\n drivers/bus/pci/Makefile                    |   3 +-\n drivers/bus/pci/bsd/pci.c                   |   5 +\n drivers/bus/pci/linux/pci.c                 |   5 +\n drivers/bus/pci/                 |   6 +-\n drivers/bus/pci/pci_common.c                |   6 +-\n drivers/bus/pci/pci_params.c                | 139 ++++++++++++\n drivers/bus/pci/private.h                   |  54 +++++\n drivers/bus/vdev/Makefile                   |   3 +-\n drivers/bus/vdev/                |   5 +-\n drivers/bus/vdev/vdev.c                     |  20 +-\n drivers/bus/vdev/vdev_params.c              | 112 ++++++++++\n drivers/bus/vdev/vdev_private.h             |  32 +++\n drivers/net/failsafe/failsafe_args.c        |   2 +-\n drivers/net/failsafe/failsafe_eal.c         |   2 +-\n lib/Makefile                                |   5 +-\n lib/librte_eal/bsdapp/eal/Makefile          |   2 +\n lib/librte_eal/common/Makefile              |   2 +-\n lib/librte_eal/common/eal_common_class.c    |  62 ++++++\n lib/librte_eal/common/eal_common_dev.c      | 227 +++++++++++++++++++-\n lib/librte_eal/common/eal_common_devargs.c  | 190 +++++++++++++++-\n lib/librte_eal/common/eal_common_options.c  |  36 +++-\n lib/librte_eal/common/eal_options.h         |   2 +\n lib/librte_eal/common/eal_private.h         |  27 +++\n lib/librte_eal/common/include/rte_bus.h     |   1 +\n lib/librte_eal/common/include/rte_class.h   | 127 +++++++++++\n lib/librte_eal/common/include/rte_common.h  |  24 +++\n lib/librte_eal/common/include/rte_dev.h     |  97 +++++++++\n lib/librte_eal/common/include/rte_devargs.h |  53 ++++-\n lib/librte_eal/common/           |   2 +\n lib/librte_eal/linuxapp/eal/Makefile        |   2 +\n lib/librte_eal/                  |   1 +\n lib/librte_eal/          |   5 +\n lib/librte_ethdev/Makefile                  |   4 +-\n lib/librte_ethdev/eth_private.c             |  31 +++\n lib/librte_ethdev/eth_private.h             |  31 +++\n lib/librte_ethdev/               |   4 +-\n lib/librte_ethdev/rte_class_eth.c           | 147 +++++++++++++\n lib/librte_ethdev/rte_ethdev.c              |   9 +-\n lib/librte_kvargs/Makefile                  |   2 +-\n lib/librte_kvargs/               |   5 +\n lib/librte_kvargs/rte_kvargs.c              |  57 +++--\n lib/librte_kvargs/rte_kvargs.h              |  58 +++++\n lib/librte_kvargs/    |   8 +\n lib/                             |   8 +-\n 46 files changed, 1637 insertions(+), 64 deletions(-)\n create mode 100644 drivers/bus/pci/pci_params.c\n create mode 100644 drivers/bus/vdev/vdev_params.c\n create mode 100644 drivers/bus/vdev/vdev_private.h\n create mode 100644 lib/librte_eal/common/eal_common_class.c\n create mode 100644 lib/librte_eal/common/include/rte_class.h\n create mode 100644 lib/librte_ethdev/eth_private.c\n create mode 100644 lib/librte_ethdev/eth_private.h\n create mode 100644 lib/librte_ethdev/rte_class_eth.c"