get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 3857,
    "url": "http://patches.dpdk.org/api/patches/3857/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1425505810-9269-9-git-send-email-david.marchand@6wind.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<1425505810-9269-9-git-send-email-david.marchand@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1425505810-9269-9-git-send-email-david.marchand@6wind.com",
    "date": "2015-03-04T21:50:08",
    "name": "[dpdk-dev,08/10] tailq: move to dynamic tailq",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "9e5aed3ec662db472f6756388a4c23c59838ff0b",
    "submitter": {
        "id": 3,
        "url": "http://patches.dpdk.org/api/people/3/?format=api",
        "name": "David Marchand",
        "email": "david.marchand@6wind.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1425505810-9269-9-git-send-email-david.marchand@6wind.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/3857/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/3857/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 57A409A96;\n\tWed,  4 Mar 2015 22:50:30 +0100 (CET)",
            "from mail-wg0-f52.google.com (mail-wg0-f52.google.com\n\t[74.125.82.52]) by dpdk.org (Postfix) with ESMTP id 381A15A83\n\tfor <dev@dpdk.org>; Wed,  4 Mar 2015 22:50:28 +0100 (CET)",
            "by wghl2 with SMTP id l2so5710529wgh.8\n\tfor <dev@dpdk.org>; Wed, 04 Mar 2015 13:50:28 -0800 (PST)",
            "from alcyon.dev.6wind.com (6wind.net2.nerim.net. [213.41.180.237])\n\tby mx.google.com with ESMTPSA id\n\tbf8sm6037947wjb.37.2015.03.04.13.50.26 for <dev@dpdk.org>\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tWed, 04 Mar 2015 13:50:27 -0800 (PST)"
        ],
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=x-gm-message-state:from:to:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=74F6L/UTLEqh54GkC9CpeflRf7xJGpxQRPzD4c5Nv1g=;\n\tb=IcEn+c76WVOLmLajhanqiMQgScH90ZXy+ogdd3R+Y88jpfrCfdx2lR3xZsbhEFIPDh\n\t01EPON2pX8LUtHIZkEC4+QSlpXIa8FI+68TSTb7u4YBKcWUvBIT0oSxJx4yPxKMQBLgY\n\t6rSQTzRB2qLahUiOfBC8Bjhu6YYbN7W8a0+E+HQkz+hAdhRgWv7CnQ0hEXpXwOnP2aZ0\n\tbVAZsqI/STXHnR0gZ73UxEsHsIcRVJU8M3jRT6vhyFD+4eBYze8pE220sFhZuOODq/gF\n\twRUaOguvtrjJdy0u1TwA+h3etZe/l9zNrJeNmFiPuw6LCZnf/gq8/VwFxxbmrRyma3h5\n\t46tg==",
        "X-Gm-Message-State": "ALoCoQlq3elw0guPq37G56pmNxzgobS+BD33ak5zlb+60KUcPpezWULzrzfQdPj00/zSTcfQ6jbv",
        "X-Received": "by 10.180.87.106 with SMTP id w10mr59130540wiz.62.1425505828101; \n\tWed, 04 Mar 2015 13:50:28 -0800 (PST)",
        "From": "David Marchand <david.marchand@6wind.com>",
        "To": "dev@dpdk.org",
        "Date": "Wed,  4 Mar 2015 22:50:08 +0100",
        "Message-Id": "<1425505810-9269-9-git-send-email-david.marchand@6wind.com>",
        "X-Mailer": "git-send-email 1.7.10.4",
        "In-Reply-To": "<1425505810-9269-1-git-send-email-david.marchand@6wind.com>",
        "References": "<1425505810-9269-1-git-send-email-david.marchand@6wind.com>",
        "Subject": "[dpdk-dev] [PATCH 08/10] tailq: move to dynamic tailq",
        "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": "Use dynamic tailq rather than static entries.\n\nSigned-off-by: David Marchand <david.marchand@6wind.com>\n---\n lib/librte_acl/rte_acl.c                       |   33 +++++++----------------\n lib/librte_acl/rte_acl.h                       |    1 -\n lib/librte_distributor/rte_distributor.c       |   16 +++++------\n lib/librte_eal/bsdapp/eal/eal_pci.c            |    7 ++++-\n lib/librte_eal/common/include/rte_tailq_elem.h |   20 --------------\n lib/librte_eal/linuxapp/eal/eal_ivshmem.c      |    5 ++--\n lib/librte_eal/linuxapp/eal/eal_pci.c          |    8 ++++--\n lib/librte_hash/rte_fbk_hash.c                 |   32 ++++++++--------------\n lib/librte_hash/rte_fbk_hash.h                 |    1 -\n lib/librte_hash/rte_hash.c                     |   27 ++++++-------------\n lib/librte_hash/rte_hash.h                     |    1 -\n lib/librte_lpm/rte_lpm.c                       |   34 +++++++++---------------\n lib/librte_lpm/rte_lpm.h                       |    1 -\n lib/librte_lpm/rte_lpm6.c                      |   26 ++++++------------\n lib/librte_lpm/rte_lpm6.h                      |    1 -\n lib/librte_mempool/rte_mempool.c               |   32 +++++++---------------\n lib/librte_mempool/rte_mempool.h               |    3 ---\n lib/librte_reorder/rte_reorder.c               |   26 ++++++------------\n lib/librte_reorder/rte_reorder.h               |    1 -\n lib/librte_ring/rte_ring.c                     |   27 +++++++------------\n lib/librte_ring/rte_ring.h                     |    3 ++-\n 21 files changed, 99 insertions(+), 206 deletions(-)",
    "diff": "diff --git a/lib/librte_acl/rte_acl.c b/lib/librte_acl/rte_acl.c\nindex 7d10301..b6ddeeb 100644\n--- a/lib/librte_acl/rte_acl.c\n+++ b/lib/librte_acl/rte_acl.c\n@@ -38,6 +38,11 @@\n \n TAILQ_HEAD(rte_acl_list, rte_tailq_entry);\n \n+static struct rte_tailq_elem rte_acl_tailq = {\n+\t.name = \"RTE_ACL\",\n+};\n+EAL_REGISTER_TAILQ(rte_acl_tailq)\n+\n /*\n  * If the compiler doesn't support AVX2 instructions,\n  * then the dummy one would be used instead for AVX2 classify method.\n@@ -129,12 +134,7 @@ rte_acl_find_existing(const char *name)\n \tstruct rte_acl_list *acl_list;\n \tstruct rte_tailq_entry *te;\n \n-\t/* check that we have an initialised tail queue */\n-\tacl_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_ACL, rte_acl_list);\n-\tif (acl_list == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\tacl_list = RTE_TAILQ_CAST(rte_acl_tailq.head, rte_acl_list);\n \n \trte_rwlock_read_lock(RTE_EAL_TAILQ_RWLOCK);\n \tTAILQ_FOREACH(te, acl_list, next) {\n@@ -160,12 +160,7 @@ rte_acl_free(struct rte_acl_ctx *ctx)\n \tif (ctx == NULL)\n \t\treturn;\n \n-\t/* check that we have an initialised tail queue */\n-\tacl_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_ACL, rte_acl_list);\n-\tif (acl_list == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn;\n-\t}\n+\tacl_list = RTE_TAILQ_CAST(rte_acl_tailq.head, rte_acl_list);\n \n \trte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);\n \n@@ -197,12 +192,7 @@ rte_acl_create(const struct rte_acl_param *param)\n \tstruct rte_tailq_entry *te;\n \tchar name[sizeof(ctx->name)];\n \n-\t/* check that we have an initialised tail queue */\n-\tacl_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_ACL, rte_acl_list);\n-\tif (acl_list == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\tacl_list = RTE_TAILQ_CAST(rte_acl_tailq.head, rte_acl_list);\n \n \t/* check that input parameters are valid. */\n \tif (param == NULL || param->name == NULL) {\n@@ -365,12 +355,7 @@ rte_acl_list_dump(void)\n \tstruct rte_acl_list *acl_list;\n \tstruct rte_tailq_entry *te;\n \n-\t/* check that we have an initialised tail queue */\n-\tacl_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_ACL, rte_acl_list);\n-\tif (acl_list == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn;\n-\t}\n+\tacl_list = RTE_TAILQ_CAST(rte_acl_tailq.head, rte_acl_list);\n \n \trte_rwlock_read_lock(RTE_EAL_TAILQ_RWLOCK);\n \tTAILQ_FOREACH(te, acl_list, next) {\ndiff --git a/lib/librte_acl/rte_acl.h b/lib/librte_acl/rte_acl.h\nindex 30aea03..3a93730 100644\n--- a/lib/librte_acl/rte_acl.h\n+++ b/lib/librte_acl/rte_acl.h\n@@ -170,7 +170,6 @@ struct rte_acl_param {\n  *   Pointer to ACL context structure that is used in future ACL\n  *   operations, or NULL on error, with error code set in rte_errno.\n  *   Possible rte_errno errors include:\n- *   - E_RTE_NO_TAILQ - no tailq list could be got for the ACL context list\n  *   - EINVAL - invalid parameter passed to function\n  */\n struct rte_acl_ctx *\ndiff --git a/lib/librte_distributor/rte_distributor.c b/lib/librte_distributor/rte_distributor.c\nindex 84e78bb..f3f778c 100644\n--- a/lib/librte_distributor/rte_distributor.c\n+++ b/lib/librte_distributor/rte_distributor.c\n@@ -115,6 +115,11 @@ struct rte_distributor {\n \n TAILQ_HEAD(rte_distributor_list, rte_distributor);\n \n+static struct rte_tailq_elem rte_distributor_tailq = {\n+\t.name = \"RTE_DISTRIBUTOR\",\n+};\n+EAL_REGISTER_TAILQ(rte_distributor_tailq)\n+\n /**** APIs called by workers ****/\n \n void\n@@ -460,14 +465,6 @@ rte_distributor_create(const char *name,\n \t\treturn NULL;\n \t}\n \n-\t/* check that we have an initialised tail queue */\n-\tdistributor_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_DISTRIBUTOR,\n-\t\t\t\trte_distributor_list);\n-\tif (distributor_list == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n-\n \tsnprintf(mz_name, sizeof(mz_name), RTE_DISTRIB_PREFIX\"%s\", name);\n \tmz = rte_memzone_reserve(mz_name, sizeof(*d), socket_id, NO_FLAGS);\n \tif (mz == NULL) {\n@@ -479,6 +476,9 @@ rte_distributor_create(const char *name,\n \tsnprintf(d->name, sizeof(d->name), \"%s\", name);\n \td->num_workers = num_workers;\n \n+\tdistributor_list = RTE_TAILQ_CAST(rte_distributor_tailq.head,\n+\t\t\t\t\t  rte_distributor_list);\n+\n \trte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);\n \tTAILQ_INSERT_TAIL(distributor_list, d, next);\n \trte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);\ndiff --git a/lib/librte_eal/bsdapp/eal/eal_pci.c b/lib/librte_eal/bsdapp/eal/eal_pci.c\nindex 5457a21..3a0fda5 100644\n--- a/lib/librte_eal/bsdapp/eal/eal_pci.c\n+++ b/lib/librte_eal/bsdapp/eal/eal_pci.c\n@@ -107,6 +107,11 @@ TAILQ_HEAD(uio_res_list, uio_resource);\n \n static struct uio_res_list *uio_res_list = NULL;\n \n+static struct rte_tailq_elem rte_pci_tailq = {\n+\t.name = \"PCI_RESOURCE_LIST\",\n+};\n+EAL_REGISTER_TAILQ(rte_pci_tailq)\n+\n /* unbind kernel driver for this device */\n static int\n pci_unbind_kernel_driver(struct rte_pci_device *dev __rte_unused)\n@@ -492,7 +497,7 @@ rte_eal_pci_init(void)\n {\n \tTAILQ_INIT(&pci_driver_list);\n \tTAILQ_INIT(&pci_device_list);\n-\tuio_res_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_PCI, uio_res_list);\n+\tuio_res_list = RTE_TAILQ_CAST(rte_pci_tailq.head, uio_res_list);\n \n \t/* for debug purposes, PCI can be disabled */\n \tif (internal_config.no_pci)\ndiff --git a/lib/librte_eal/common/include/rte_tailq_elem.h b/lib/librte_eal/common/include/rte_tailq_elem.h\nindex 01fc769..e88211c 100644\n--- a/lib/librte_eal/common/include/rte_tailq_elem.h\n+++ b/lib/librte_eal/common/include/rte_tailq_elem.h\n@@ -64,26 +64,6 @@\n #define rte_tailq_end(idx)\n #endif /* rte_tailq_end */\n \n-rte_tailq_elem(RTE_TAILQ_PCI, \"PCI_RESOURCE_LIST\")\n-\n-rte_tailq_elem(RTE_TAILQ_MEMPOOL, \"RTE_MEMPOOL\")\n-\n-rte_tailq_elem(RTE_TAILQ_RING, \"RTE_RING\")\n-\n-rte_tailq_elem(RTE_TAILQ_HASH, \"RTE_HASH\")\n-\n-rte_tailq_elem(RTE_TAILQ_FBK_HASH, \"RTE_FBK_HASH\")\n-\n-rte_tailq_elem(RTE_TAILQ_LPM, \"RTE_LPM\")\n-\n-rte_tailq_elem(RTE_TAILQ_LPM6, \"RTE_LPM6\")\n-\n-rte_tailq_elem(RTE_TAILQ_ACL, \"RTE_ACL\")\n-\n-rte_tailq_elem(RTE_TAILQ_DISTRIBUTOR, \"RTE_DISTRIBUTOR\")\n-\n-rte_tailq_elem(RTE_TAILQ_REORDER, \"RTE_REORDER\")\n-\n rte_tailq_end(RTE_TAILQ_NUM)\n \n #undef rte_tailq_elem\ndiff --git a/lib/librte_eal/linuxapp/eal/eal_ivshmem.c b/lib/librte_eal/linuxapp/eal/eal_ivshmem.c\nindex 413a9ba..2deaeb7 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_ivshmem.c\n+++ b/lib/librte_eal/linuxapp/eal/eal_ivshmem.c\n@@ -53,7 +53,6 @@\n #include <rte_malloc.h>\n #include <rte_common.h>\n #include <rte_ivshmem.h>\n-#include <rte_tailq_elem.h>\n \n #include \"eal_internal_cfg.h\"\n #include \"eal_private.h\"\n@@ -764,8 +763,8 @@ rte_eal_ivshmem_obj_init(void)\n \t\treturn 0;\n \n \t/* check that we have an initialised ring tail queue */\n-\tif ((ring_list =\n-\t     RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_RING, rte_ring_list)) == NULL) {\n+\tring_list = RTE_TAILQ_LOOKUP(RTE_TAILQ_RING_NAME, rte_ring_list);\n+\tif (ring_list == NULL) {\n \t\tRTE_LOG(ERR, EAL, \"No rte_ring tailq found!\\n\");\n \t\treturn -1;\n \t}\ndiff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c\nindex 595f17b..c42e843 100644\n--- a/lib/librte_eal/linuxapp/eal/eal_pci.c\n+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c\n@@ -58,6 +58,11 @@\n \n struct mapped_pci_res_list *pci_res_list = NULL;\n \n+static struct rte_tailq_elem rte_pci_tailq = {\n+\t.name = \"PCI_RESOURCE_LIST\",\n+};\n+EAL_REGISTER_TAILQ(rte_pci_tailq)\n+\n /* unbind kernel driver for this device */\n static int\n pci_unbind_kernel_driver(struct rte_pci_device *dev)\n@@ -765,8 +770,7 @@ rte_eal_pci_init(void)\n {\n \tTAILQ_INIT(&pci_driver_list);\n \tTAILQ_INIT(&pci_device_list);\n-\tpci_res_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_PCI,\n-\t\t\t\t\t       mapped_pci_res_list);\n+\tpci_res_list = RTE_TAILQ_CAST(rte_pci_tailq.head, mapped_pci_res_list);\n \n \t/* for debug purposes, PCI can be disabled */\n \tif (internal_config.no_pci)\ndiff --git a/lib/librte_hash/rte_fbk_hash.c b/lib/librte_hash/rte_fbk_hash.c\nindex c342c0d..356ddfe 100644\n--- a/lib/librte_hash/rte_fbk_hash.c\n+++ b/lib/librte_hash/rte_fbk_hash.c\n@@ -55,6 +55,11 @@\n \n TAILQ_HEAD(rte_fbk_hash_list, rte_tailq_entry);\n \n+static struct rte_tailq_elem rte_fbk_hash_tailq = {\n+\t.name = \"RTE_FBK_HASH\",\n+};\n+EAL_REGISTER_TAILQ(rte_fbk_hash_tailq)\n+\n /**\n  * Performs a lookup for an existing hash table, and returns a pointer to\n  * the table if found.\n@@ -72,13 +77,8 @@ rte_fbk_hash_find_existing(const char *name)\n \tstruct rte_tailq_entry *te;\n \tstruct rte_fbk_hash_list *fbk_hash_list;\n \n-\t/* check that we have an initialised tail queue */\n-\tif ((fbk_hash_list =\n-\t\t\tRTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_FBK_HASH,\n-\t\t\t\t\trte_fbk_hash_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\tfbk_hash_list = RTE_TAILQ_CAST(rte_fbk_hash_tailq.head,\n+\t\t\t\t       rte_fbk_hash_list);\n \n \trte_rwlock_read_lock(RTE_EAL_TAILQ_RWLOCK);\n \tTAILQ_FOREACH(te, fbk_hash_list, next) {\n@@ -115,13 +115,8 @@ rte_fbk_hash_create(const struct rte_fbk_hash_params *params)\n \tuint32_t i;\n \tstruct rte_fbk_hash_list *fbk_hash_list;\n \n-\t/* check that we have an initialised tail queue */\n-\tif ((fbk_hash_list =\n-\t\t\tRTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_FBK_HASH,\n-\t\t\t\t\trte_fbk_hash_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\tfbk_hash_list = RTE_TAILQ_CAST(rte_fbk_hash_tailq.head,\n+\t\t\t\t       rte_fbk_hash_list);\n \n \t/* Error checking of parameters. */\n \tif ((!rte_is_power_of_2(params->entries)) ||\n@@ -208,13 +203,8 @@ rte_fbk_hash_free(struct rte_fbk_hash_table *ht)\n \tif (ht == NULL)\n \t\treturn;\n \n-\t/* check that we have an initialised tail queue */\n-\tif ((fbk_hash_list =\n-\t\t\tRTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_FBK_HASH,\n-\t\t\t\t\trte_fbk_hash_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn;\n-\t}\n+\tfbk_hash_list = RTE_TAILQ_CAST(rte_fbk_hash_tailq.head,\n+\t\t\t\t       rte_fbk_hash_list);\n \n \trte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);\n \ndiff --git a/lib/librte_hash/rte_fbk_hash.h b/lib/librte_hash/rte_fbk_hash.h\nindex 3d229bf..c9b5a6a 100644\n--- a/lib/librte_hash/rte_fbk_hash.h\n+++ b/lib/librte_hash/rte_fbk_hash.h\n@@ -372,7 +372,6 @@ struct rte_fbk_hash_table *rte_fbk_hash_find_existing(const char *name);\n  *   Possible rte_errno error values include:\n  *    - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure\n  *    - E_RTE_SECONDARY - function was called from a secondary process instance\n- *    - E_RTE_NO_TAILQ - no tailq list could be got for the fbk hash table list\n  *    - EINVAL - invalid parameter value passed to function\n  *    - ENOSPC - the maximum number of memzones has already been allocated\n  *    - EEXIST - a memzone with the same name already exists\ndiff --git a/lib/librte_hash/rte_hash.c b/lib/librte_hash/rte_hash.c\nindex b6a2b2f..9245716 100644\n--- a/lib/librte_hash/rte_hash.c\n+++ b/lib/librte_hash/rte_hash.c\n@@ -58,9 +58,13 @@\n \n #include \"rte_hash.h\"\n \n-\n TAILQ_HEAD(rte_hash_list, rte_tailq_entry);\n \n+static struct rte_tailq_elem rte_hash_tailq = {\n+\t.name = \"RTE_HASH\",\n+};\n+EAL_REGISTER_TAILQ(rte_hash_tailq)\n+\n /* Macro to enable/disable run-time checking of function parameters */\n #if defined(RTE_LIBRTE_HASH_DEBUG)\n #define RETURN_IF_TRUE(cond, retval) do { \\\n@@ -144,12 +148,7 @@ rte_hash_find_existing(const char *name)\n \tstruct rte_tailq_entry *te;\n \tstruct rte_hash_list *hash_list;\n \n-\t/* check that we have an initialised tail queue */\n-\tif ((hash_list =\n-\t\t\tRTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_HASH, rte_hash_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\thash_list = RTE_TAILQ_CAST(rte_hash_tailq.head, rte_hash_list);\n \n \trte_rwlock_read_lock(RTE_EAL_TAILQ_RWLOCK);\n \tTAILQ_FOREACH(te, hash_list, next) {\n@@ -176,12 +175,7 @@ rte_hash_create(const struct rte_hash_parameters *params)\n \tchar hash_name[RTE_HASH_NAMESIZE];\n \tstruct rte_hash_list *hash_list;\n \n-\t/* check that we have an initialised tail queue */\n-\tif ((hash_list =\n-\t     RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_HASH, rte_hash_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\thash_list = RTE_TAILQ_CAST(rte_hash_tailq.head, rte_hash_list);\n \n \t/* Check for valid parameters */\n \tif ((params == NULL) ||\n@@ -274,12 +268,7 @@ rte_hash_free(struct rte_hash *h)\n \tif (h == NULL)\n \t\treturn;\n \n-\t/* check that we have an initialised tail queue */\n-\tif ((hash_list =\n-\t     RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_HASH, rte_hash_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn;\n-\t}\n+\thash_list = RTE_TAILQ_CAST(rte_hash_tailq.head, rte_hash_list);\n \n \trte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);\n \ndiff --git a/lib/librte_hash/rte_hash.h b/lib/librte_hash/rte_hash.h\nindex 2ecaf1a..821a9d4 100644\n--- a/lib/librte_hash/rte_hash.h\n+++ b/lib/librte_hash/rte_hash.h\n@@ -117,7 +117,6 @@ struct rte_hash {\n  *   Possible rte_errno errors include:\n  *    - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure\n  *    - E_RTE_SECONDARY - function was called from a secondary process instance\n- *    - E_RTE_NO_TAILQ - no tailq list could be got for the hash table list\n  *    - ENOENT - missing entry\n  *    - EINVAL - invalid parameter passed to function\n  *    - ENOSPC - the maximum number of memzones has already been allocated\ndiff --git a/lib/librte_lpm/rte_lpm.c b/lib/librte_lpm/rte_lpm.c\nindex 264cde8..0945b81 100644\n--- a/lib/librte_lpm/rte_lpm.c\n+++ b/lib/librte_lpm/rte_lpm.c\n@@ -57,6 +57,11 @@\n \n TAILQ_HEAD(rte_lpm_list, rte_tailq_entry);\n \n+static struct rte_tailq_elem rte_lpm_tailq = {\n+\t.name = \"RTE_LPM\",\n+};\n+EAL_REGISTER_TAILQ(rte_lpm_tailq)\n+\n #define MAX_DEPTH_TBL24 24\n \n enum valid_flag {\n@@ -121,12 +126,7 @@ rte_lpm_find_existing(const char *name)\n \tstruct rte_tailq_entry *te;\n \tstruct rte_lpm_list *lpm_list;\n \n-\t/* check that we have an initialised tail queue */\n-\tif ((lpm_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_LPM,\n-\t\t\trte_lpm_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\tlpm_list = RTE_TAILQ_CAST(rte_lpm_tailq.head, rte_lpm_list);\n \n \trte_rwlock_read_lock(RTE_EAL_TAILQ_RWLOCK);\n \tTAILQ_FOREACH(te, lpm_list, next) {\n@@ -157,12 +157,7 @@ rte_lpm_create(const char *name, int socket_id, int max_rules,\n \tuint32_t mem_size;\n \tstruct rte_lpm_list *lpm_list;\n \n-\t/* check that we have an initialised tail queue */\n-\tif ((lpm_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_LPM,\n-\t\t\trte_lpm_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\tlpm_list = RTE_TAILQ_CAST(rte_lpm_tailq.head, rte_lpm_list);\n \n \tRTE_BUILD_BUG_ON(sizeof(struct rte_lpm_tbl24_entry) != 2);\n \tRTE_BUILD_BUG_ON(sizeof(struct rte_lpm_tbl8_entry) != 2);\n@@ -232,12 +227,7 @@ rte_lpm_free(struct rte_lpm *lpm)\n \tif (lpm == NULL)\n \t\treturn;\n \n-\t/* check that we have an initialised tail queue */\n-\tif ((lpm_list =\n-\t     RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_LPM, rte_lpm_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn;\n-\t}\n+\tlpm_list = RTE_TAILQ_CAST(rte_lpm_tailq.head, rte_lpm_list);\n \n \trte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);\n \n@@ -384,8 +374,8 @@ rule_find(struct rte_lpm *lpm, uint32_t ip_masked, uint8_t depth)\n \t\t\treturn (rule_index);\n \t}\n \n-\t/* If rule is not found return -E_RTE_NO_TAILQ. */\n-\treturn -E_RTE_NO_TAILQ;\n+\t/* If rule is not found return -EINVAL. */\n+\treturn -EINVAL;\n }\n \n /*\n@@ -969,10 +959,10 @@ rte_lpm_delete(struct rte_lpm *lpm, uint32_t ip, uint8_t depth)\n \n \t/*\n \t * Check if rule_to_delete_index was found. If no rule was found the\n-\t * function rule_find returns -E_RTE_NO_TAILQ.\n+\t * function rule_find returns -EINVAL.\n \t */\n \tif (rule_to_delete_index < 0)\n-\t\treturn -E_RTE_NO_TAILQ;\n+\t\treturn -EINVAL;\n \n \t/* Delete the rule from the rule table. */\n \trule_delete(lpm, rule_to_delete_index, depth);\ndiff --git a/lib/librte_lpm/rte_lpm.h b/lib/librte_lpm/rte_lpm.h\nindex 586300b..e6c25b6 100644\n--- a/lib/librte_lpm/rte_lpm.h\n+++ b/lib/librte_lpm/rte_lpm.h\n@@ -163,7 +163,6 @@ struct rte_lpm {\n  *   to an appropriate values. Possible rte_errno values include:\n  *    - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure\n  *    - E_RTE_SECONDARY - function was called from a secondary process instance\n- *    - E_RTE_NO_TAILQ - no tailq list could be got for the lpm object list\n  *    - EINVAL - invalid parameter passed to function\n  *    - ENOSPC - the maximum number of memzones has already been allocated\n  *    - EEXIST - a memzone with the same name already exists\ndiff --git a/lib/librte_lpm/rte_lpm6.c b/lib/librte_lpm/rte_lpm6.c\nindex d72f9b3..6c2b293 100644\n--- a/lib/librte_lpm/rte_lpm6.c\n+++ b/lib/librte_lpm/rte_lpm6.c\n@@ -78,6 +78,11 @@ enum valid_flag {\n \n TAILQ_HEAD(rte_lpm6_list, rte_tailq_entry);\n \n+static struct rte_tailq_elem rte_lpm6_tailq = {\n+\t.name = \"RTE_LPM6\",\n+};\n+EAL_REGISTER_TAILQ(rte_lpm6_tailq)\n+\n /** Tbl entry structure. It is the same for both tbl24 and tbl8 */\n struct rte_lpm6_tbl_entry {\n \tuint32_t next_hop:\t21;  /**< Next hop / next table to be checked. */\n@@ -150,12 +155,7 @@ rte_lpm6_create(const char *name, int socket_id,\n \tuint64_t mem_size, rules_size;\n \tstruct rte_lpm6_list *lpm_list;\n \n-\t/* Check that we have an initialised tail queue */\n-\tif ((lpm_list =\n-\t     RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_LPM6, rte_lpm6_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\tlpm_list = RTE_TAILQ_CAST(rte_lpm6_tailq.head, rte_lpm6_list);\n \n \tRTE_BUILD_BUG_ON(sizeof(struct rte_lpm6_tbl_entry) != sizeof(uint32_t));\n \n@@ -237,12 +237,7 @@ rte_lpm6_find_existing(const char *name)\n \tstruct rte_tailq_entry *te;\n \tstruct rte_lpm6_list *lpm_list;\n \n-\t/* Check that we have an initialised tail queue */\n-\tif ((lpm_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_LPM6,\n-\t\t\trte_lpm6_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\tlpm_list = RTE_TAILQ_CAST(rte_lpm6_tailq.head, rte_lpm6_list);\n \n \trte_rwlock_read_lock(RTE_EAL_TAILQ_RWLOCK);\n \tTAILQ_FOREACH(te, lpm_list, next) {\n@@ -273,12 +268,7 @@ rte_lpm6_free(struct rte_lpm6 *lpm)\n \tif (lpm == NULL)\n \t\treturn;\n \n-\t/* check that we have an initialised tail queue */\n-\tif ((lpm_list =\n-\t     RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_LPM, rte_lpm6_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn;\n-\t}\n+\tlpm_list = RTE_TAILQ_CAST(rte_lpm6_tailq.head, rte_lpm6_list);\n \n \trte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);\n \ndiff --git a/lib/librte_lpm/rte_lpm6.h b/lib/librte_lpm/rte_lpm6.h\nindex 4db810f..cedcea8 100644\n--- a/lib/librte_lpm/rte_lpm6.h\n+++ b/lib/librte_lpm/rte_lpm6.h\n@@ -72,7 +72,6 @@ struct rte_lpm6_config {\n  *   to an appropriate values. Possible rte_errno values include:\n  *    - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure\n  *    - E_RTE_SECONDARY - function was called from a secondary process instance\n- *    - E_RTE_NO_TAILQ - no tailq list could be got for the lpm object list\n  *    - EINVAL - invalid parameter passed to function\n  *    - ENOSPC - the maximum number of memzones has already been allocated\n  *    - EEXIST - a memzone with the same name already exists\ndiff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c\nindex 3301e97..9405b92 100644\n--- a/lib/librte_mempool/rte_mempool.c\n+++ b/lib/librte_mempool/rte_mempool.c\n@@ -62,6 +62,12 @@\n \n TAILQ_HEAD(rte_mempool_list, rte_tailq_entry);\n \n+static struct rte_tailq_elem rte_mempool_tailq =\n+{\n+\t.name = \"RTE_MEMPOOL\",\n+};\n+EAL_REGISTER_TAILQ(rte_mempool_tailq)\n+\n #define CACHE_FLUSHTHRESH_MULTIPLIER 1.5\n \n /*\n@@ -432,13 +438,7 @@ rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,\n \t\t\t  RTE_CACHE_LINE_MASK) != 0);\n #endif\n \n-\t/* check that we have an initialised tail queue */\n-\tmempool_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_MEMPOOL,\n-\t\t\t\t\t       rte_mempool_list);\n-\tif (mempool_list == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\tmempool_list = RTE_TAILQ_CAST(rte_mempool_tailq.head, rte_mempool_list);\n \n \t/* asked cache too big */\n \tif (cache_size > RTE_MEMPOOL_CACHE_MAX_SIZE) {\n@@ -834,11 +834,7 @@ rte_mempool_list_dump(FILE *f)\n \tstruct rte_tailq_entry *te;\n \tstruct rte_mempool_list *mempool_list;\n \n-\tif ((mempool_list =\n-\t     RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_MEMPOOL, rte_mempool_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn;\n-\t}\n+\tmempool_list = RTE_TAILQ_CAST(rte_mempool_tailq.head, rte_mempool_list);\n \n \trte_rwlock_read_lock(RTE_EAL_MEMPOOL_RWLOCK);\n \n@@ -858,11 +854,7 @@ rte_mempool_lookup(const char *name)\n \tstruct rte_tailq_entry *te;\n \tstruct rte_mempool_list *mempool_list;\n \n-\tif ((mempool_list =\n-\t     RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_MEMPOOL, rte_mempool_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\tmempool_list = RTE_TAILQ_CAST(rte_mempool_tailq.head, rte_mempool_list);\n \n \trte_rwlock_read_lock(RTE_EAL_MEMPOOL_RWLOCK);\n \n@@ -888,11 +880,7 @@ void rte_mempool_walk(void (*func)(const struct rte_mempool *, void *),\n \tstruct rte_tailq_entry *te = NULL;\n \tstruct rte_mempool_list *mempool_list;\n \n-\tif ((mempool_list =\n-\t     RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_MEMPOOL, rte_mempool_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn;\n-\t}\n+\tmempool_list = RTE_TAILQ_CAST(rte_mempool_tailq.head, rte_mempool_list);\n \n \trte_rwlock_read_lock(RTE_EAL_MEMPOOL_RWLOCK);\n \ndiff --git a/lib/librte_mempool/rte_mempool.h b/lib/librte_mempool/rte_mempool.h\nindex 39f7233..9001312 100644\n--- a/lib/librte_mempool/rte_mempool.h\n+++ b/lib/librte_mempool/rte_mempool.h\n@@ -524,7 +524,6 @@ typedef void (rte_mempool_ctor_t)(struct rte_mempool *, void *);\n  *   with rte_errno set appropriately. Possible rte_errno values include:\n  *    - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure\n  *    - E_RTE_SECONDARY - function was called from a secondary process instance\n- *    - E_RTE_NO_TAILQ - no tailq list could be got for the ring or mempool list\n  *    - EINVAL - cache size provided is too large\n  *    - ENOSPC - the maximum number of memzones has already been allocated\n  *    - EEXIST - a memzone with the same name already exists\n@@ -625,7 +624,6 @@ rte_mempool_create(const char *name, unsigned n, unsigned elt_size,\n  *   with rte_errno set appropriately. Possible rte_errno values include:\n  *    - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure\n  *    - E_RTE_SECONDARY - function was called from a secondary process instance\n- *    - E_RTE_NO_TAILQ - no tailq list could be got for the ring or mempool list\n  *    - EINVAL - cache size provided is too large\n  *    - ENOSPC - the maximum number of memzones has already been allocated\n  *    - EEXIST - a memzone with the same name already exists\n@@ -716,7 +714,6 @@ rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,\n  *   with rte_errno set appropriately. Possible rte_errno values include:\n  *    - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure\n  *    - E_RTE_SECONDARY - function was called from a secondary process instance\n- *    - E_RTE_NO_TAILQ - no tailq list could be got for the ring or mempool list\n  *    - EINVAL - cache size provided is too large\n  *    - ENOSPC - the maximum number of memzones has already been allocated\n  *    - EEXIST - a memzone with the same name already exists\ndiff --git a/lib/librte_reorder/rte_reorder.c b/lib/librte_reorder/rte_reorder.c\nindex c5ce794..88f1baf 100644\n--- a/lib/librte_reorder/rte_reorder.c\n+++ b/lib/librte_reorder/rte_reorder.c\n@@ -45,6 +45,11 @@\n \n TAILQ_HEAD(rte_reorder_list, rte_tailq_entry);\n \n+static struct rte_tailq_elem rte_reorder_tailq = {\n+       .name = \"RTE_REORDER\",\n+};\n+EAL_REGISTER_TAILQ(rte_reorder_tailq)\n+\n #define NO_FLAGS 0\n #define RTE_REORDER_PREFIX \"RO_\"\n #define RTE_REORDER_NAMESIZE 32\n@@ -126,12 +131,7 @@ rte_reorder_create(const char *name, unsigned socket_id, unsigned int size)\n \tconst unsigned int bufsize = sizeof(struct rte_reorder_buffer) +\n \t\t\t\t\t(2 * size * sizeof(struct rte_mbuf *));\n \n-\t/* check that we have an initialised tail queue */\n-\treorder_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_REORDER, rte_reorder_list);\n-\tif (!reorder_list) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\treorder_list = RTE_TAILQ_CAST(rte_reorder_tailq.head, rte_reorder_list);\n \n \t/* Check user arguments. */\n \tif (!rte_is_power_of_2(size)) {\n@@ -219,12 +219,7 @@ rte_reorder_free(struct rte_reorder_buffer *b)\n \tif (b == NULL)\n \t\treturn;\n \n-\t/* check that we have an initialised tail queue */\n-\treorder_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_REORDER, rte_reorder_list);\n-\tif (!reorder_list) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn;\n-\t}\n+\treorder_list = RTE_TAILQ_CAST(rte_reorder_tailq.head, rte_reorder_list);\n \n \trte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);\n \n@@ -255,12 +250,7 @@ rte_reorder_find_existing(const char *name)\n \tstruct rte_tailq_entry *te;\n \tstruct rte_reorder_list *reorder_list;\n \n-\t/* check that we have an initialised tail queue */\n-\treorder_list = RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_REORDER, rte_reorder_list);\n-\tif (!reorder_list) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\treorder_list = RTE_TAILQ_CAST(rte_reorder_tailq.head, rte_reorder_list);\n \n \trte_rwlock_read_lock(RTE_EAL_TAILQ_RWLOCK);\n \tTAILQ_FOREACH(te, reorder_list, next) {\ndiff --git a/lib/librte_reorder/rte_reorder.h b/lib/librte_reorder/rte_reorder.h\nindex 8300bf0..c7a2934 100644\n--- a/lib/librte_reorder/rte_reorder.h\n+++ b/lib/librte_reorder/rte_reorder.h\n@@ -102,7 +102,6 @@ rte_reorder_init(struct rte_reorder_buffer *b, unsigned int bufsize,\n  *   Pointer to reorder buffer instance or NULL if object not found with rte_errno\n  *   set appropriately. Possible rte_errno values include:\n  *    - ENOENT - required entry not available to return.\n- *    - E_RTE_NO_TAILQ - no tailq list could be got for the\n  *    reorder instance list\n  */\n struct rte_reorder_buffer *\ndiff --git a/lib/librte_ring/rte_ring.c b/lib/librte_ring/rte_ring.c\nindex 92ecf04..1b4361d 100644\n--- a/lib/librte_ring/rte_ring.c\n+++ b/lib/librte_ring/rte_ring.c\n@@ -91,6 +91,12 @@\n \n TAILQ_HEAD(rte_ring_list, rte_tailq_entry);\n \n+static struct rte_tailq_elem rte_ring_tailq =\n+{\n+\t.name = RTE_TAILQ_RING_NAME,\n+};\n+EAL_REGISTER_TAILQ(rte_ring_tailq)\n+\n /* true if x is a power of 2 */\n #define POWEROF2(x) ((((x)-1) & (x)) == 0)\n \n@@ -161,12 +167,7 @@ rte_ring_create(const char *name, unsigned count, int socket_id,\n \tint mz_flags = 0;\n \tstruct rte_ring_list* ring_list = NULL;\n \n-\t/* check that we have an initialised tail queue */\n-\tif ((ring_list =\n-\t     RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_RING, rte_ring_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\tring_list = RTE_TAILQ_CAST(rte_ring_tailq.head, rte_ring_list);\n \n \tring_size = rte_ring_get_memsize(count);\n \tif (ring_size < 0) {\n@@ -287,12 +288,7 @@ rte_ring_list_dump(FILE *f)\n \tconst struct rte_tailq_entry *te;\n \tstruct rte_ring_list *ring_list;\n \n-\t/* check that we have an initialised tail queue */\n-\tif ((ring_list =\n-\t     RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_RING, rte_ring_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn;\n-\t}\n+\tring_list = RTE_TAILQ_CAST(rte_ring_tailq.head, rte_ring_list);\n \n \trte_rwlock_read_lock(RTE_EAL_TAILQ_RWLOCK);\n \n@@ -311,12 +307,7 @@ rte_ring_lookup(const char *name)\n \tstruct rte_ring *r = NULL;\n \tstruct rte_ring_list *ring_list;\n \n-\t/* check that we have an initialized tail queue */\n-\tif ((ring_list =\n-\t     RTE_TAILQ_LOOKUP_BY_IDX(RTE_TAILQ_RING, rte_ring_list)) == NULL) {\n-\t\trte_errno = E_RTE_NO_TAILQ;\n-\t\treturn NULL;\n-\t}\n+\tring_list = RTE_TAILQ_CAST(rte_ring_tailq.head, rte_ring_list);\n \n \trte_rwlock_read_lock(RTE_EAL_TAILQ_RWLOCK);\n \ndiff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h\nindex bdf69b7..af68888 100644\n--- a/lib/librte_ring/rte_ring.h\n+++ b/lib/librte_ring/rte_ring.h\n@@ -101,6 +101,8 @@ extern \"C\" {\n #include <rte_atomic.h>\n #include <rte_branch_prediction.h>\n \n+#define RTE_TAILQ_RING_NAME \"RTE_RING\"\n+\n enum rte_ring_queue_behavior {\n \tRTE_RING_QUEUE_FIXED = 0, /* Enq/Deq a fixed number of items from a ring */\n \tRTE_RING_QUEUE_VARIABLE   /* Enq/Deq as many items a possible from ring */\n@@ -291,7 +293,6 @@ int rte_ring_init(struct rte_ring *r, const char *name, unsigned count,\n  *    rte_errno set appropriately. Possible errno values include:\n  *    - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure\n  *    - E_RTE_SECONDARY - function was called from a secondary process instance\n- *    - E_RTE_NO_TAILQ - no tailq list could be got for the ring list\n  *    - EINVAL - count provided is not a power of 2\n  *    - ENOSPC - the maximum number of memzones has already been allocated\n  *    - EEXIST - a memzone with the same name already exists\n",
    "prefixes": [
        "dpdk-dev",
        "08/10"
    ]
}