get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 73070,
    "url": "https://patches.dpdk.org/api/patches/73070/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20200703210210.40568-22-ajit.khaparde@broadcom.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<20200703210210.40568-22-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200703210210.40568-22-ajit.khaparde@broadcom.com",
    "date": "2020-07-03T21:01:40",
    "name": "[v5,21/51] net/bnxt: support two level priority for TCAMs",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "90b6d03a14e823c38b4c866dca93867339e68eb8",
    "submitter": {
        "id": 501,
        "url": "https://patches.dpdk.org/api/people/501/?format=api",
        "name": "Ajit Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "delegate": {
        "id": 1766,
        "url": "https://patches.dpdk.org/api/users/1766/?format=api",
        "username": "ajitkhaparde",
        "first_name": "Ajit",
        "last_name": "Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20200703210210.40568-22-ajit.khaparde@broadcom.com/mbox/",
    "series": [
        {
            "id": 10785,
            "url": "https://patches.dpdk.org/api/series/10785/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=10785",
            "date": "2020-07-03T21:01:19",
            "name": "net/bnxt: add features for host-based flow management",
            "version": 5,
            "mbox": "https://patches.dpdk.org/series/10785/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/73070/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/73070/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 65F86A0524;\n\tFri,  3 Jul 2020 23:08:54 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id D72B31DD29;\n\tFri,  3 Jul 2020 23:05:39 +0200 (CEST)",
            "from rnd-relay.smtp.broadcom.com (rnd-relay.smtp.broadcom.com\n [192.19.229.170]) by dpdk.org (Postfix) with ESMTP id 512791DC4D\n for <dev@dpdk.org>; Fri,  3 Jul 2020 23:05:05 +0200 (CEST)",
            "from mail-irv-17.broadcom.com (mail-irv-17.lvn.broadcom.net\n [10.75.242.48])\n by rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id 4D64330C03F;\n Fri,  3 Jul 2020 14:05:04 -0700 (PDT)",
            "from localhost.localdomain (unknown [10.230.185.215])\n by mail-irv-17.broadcom.com (Postfix) with ESMTP id EDF2B140227;\n Fri,  3 Jul 2020 14:05:01 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.10.3 rnd-relay.smtp.broadcom.com 4D64330C03F",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n s=dkimrelay; t=1593810304;\n bh=jliSqYY5DZHKT/FF6yUx2K9W+5ZL3swfO0Me3i9BE1I=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=p1Wak0/RkeLL/UuAzk2Bbz7vfr3lW3f8GR32pllJLLQl2Zjgq7P64E9t43eLyWzJT\n 0F+JPalae8f16b5MCg7gFNNGmzp2i4rPZzM/kr5tikWWZlq3AeNVh41cUUL1UCE0HR\n zSoE31oZdtzZBRDkGAieSjrXjiefyR+uaGC/mEqk=",
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "Jay Ding <jay.ding@broadcom.com>,\n Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>,\n Randy Schacher <stuart.schacher@broadcom.com>",
        "Date": "Fri,  3 Jul 2020 14:01:40 -0700",
        "Message-Id": "<20200703210210.40568-22-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.21.1 (Apple Git-122.3)",
        "In-Reply-To": "<20200703210210.40568-1-ajit.khaparde@broadcom.com>",
        "References": "<1f5421dc-0453-6dc8-09c2-ddfff6eb4888@intel.com>\n <20200703210210.40568-1-ajit.khaparde@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v5 21/51] net/bnxt: support two level priority\n\tfor TCAMs",
        "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 <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 <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Jay Ding <jay.ding@broadcom.com>\n\nAllow TCAM indexes to be allocated from top or bottom.\nIf the priority is set to 0, allocate from the\nlowest tcam indexes i.e. from top. Any other value,\nallocate it from the highest tcam indexes i.e. from\nbottom.\n\nSigned-off-by: Jay Ding <jay.ding@broadcom.com>\nSigned-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\nReviewed-by: Randy Schacher <stuart.schacher@broadcom.com>\nReviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/tf_core/bitalloc.c  | 107 +++++++++++++++++++++++++++\n drivers/net/bnxt/tf_core/bitalloc.h  |   5 ++\n drivers/net/bnxt/tf_core/tf_rm_new.c |   9 ++-\n drivers/net/bnxt/tf_core/tf_rm_new.h |   8 ++\n drivers/net/bnxt/tf_core/tf_tcam.c   |   1 +\n 5 files changed, 129 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/drivers/net/bnxt/tf_core/bitalloc.c b/drivers/net/bnxt/tf_core/bitalloc.c\nindex fb4df9a19..918cabf19 100644\n--- a/drivers/net/bnxt/tf_core/bitalloc.c\n+++ b/drivers/net/bnxt/tf_core/bitalloc.c\n@@ -7,6 +7,40 @@\n \n #define BITALLOC_MAX_LEVELS 6\n \n+\n+/* Finds the last bit set plus 1, equivalent to gcc __builtin_fls */\n+static int\n+ba_fls(bitalloc_word_t v)\n+{\n+\tint c = 32;\n+\n+\tif (!v)\n+\t\treturn 0;\n+\n+\tif (!(v & 0xFFFF0000u)) {\n+\t\tv <<= 16;\n+\t\tc -= 16;\n+\t}\n+\tif (!(v & 0xFF000000u)) {\n+\t\tv <<= 8;\n+\t\tc -= 8;\n+\t}\n+\tif (!(v & 0xF0000000u)) {\n+\t\tv <<= 4;\n+\t\tc -= 4;\n+\t}\n+\tif (!(v & 0xC0000000u)) {\n+\t\tv <<= 2;\n+\t\tc -= 2;\n+\t}\n+\tif (!(v & 0x80000000u)) {\n+\t\tv <<= 1;\n+\t\tc -= 1;\n+\t}\n+\n+\treturn c;\n+}\n+\n /* Finds the first bit set plus 1, equivalent to gcc __builtin_ffs */\n static int\n ba_ffs(bitalloc_word_t v)\n@@ -120,6 +154,79 @@ ba_alloc(struct bitalloc *pool)\n \treturn ba_alloc_helper(pool, 0, 1, 32, 0, &clear);\n }\n \n+/**\n+ * Help function to alloc entry from highest available index\n+ *\n+ * Searching the pool from highest index for the empty entry.\n+ *\n+ * [in] pool\n+ *   Pointer to the resource pool\n+ *\n+ * [in] offset\n+ *   Offset of the storage in the pool\n+ *\n+ * [in] words\n+ *   Number of words in this level\n+ *\n+ * [in] size\n+ *   Number of entries in this level\n+ *\n+ * [in] index\n+ *   Index of words that has the entry\n+ *\n+ * [in] clear\n+ *   Indicate if a bit needs to be clear due to the entry is allocated\n+ *\n+ * Returns:\n+ *     0 - Success\n+ *    -1 - Failure\n+ */\n+static int\n+ba_alloc_reverse_helper(struct bitalloc *pool,\n+\t\t\tint offset,\n+\t\t\tint words,\n+\t\t\tunsigned int size,\n+\t\t\tint index,\n+\t\t\tint *clear)\n+{\n+\tbitalloc_word_t *storage = &pool->storage[offset];\n+\tint loc = ba_fls(storage[index]);\n+\tint r;\n+\n+\tif (loc == 0)\n+\t\treturn -1;\n+\n+\tloc--;\n+\n+\tif (pool->size > size) {\n+\t\tr = ba_alloc_reverse_helper(pool,\n+\t\t\t\t\t    offset + words + 1,\n+\t\t\t\t\t    storage[words],\n+\t\t\t\t\t    size * 32,\n+\t\t\t\t\t    index * 32 + loc,\n+\t\t\t\t\t    clear);\n+\t} else {\n+\t\tr = index * 32 + loc;\n+\t\t*clear = 1;\n+\t\tpool->free_count--;\n+\t}\n+\n+\tif (*clear) {\n+\t\tstorage[index] &= ~(1 << loc);\n+\t\t*clear = (storage[index] == 0);\n+\t}\n+\n+\treturn r;\n+}\n+\n+int\n+ba_alloc_reverse(struct bitalloc *pool)\n+{\n+\tint clear = 0;\n+\n+\treturn ba_alloc_reverse_helper(pool, 0, 1, 32, 0, &clear);\n+}\n+\n static int\n ba_alloc_index_helper(struct bitalloc *pool,\n \t\t      int              offset,\ndiff --git a/drivers/net/bnxt/tf_core/bitalloc.h b/drivers/net/bnxt/tf_core/bitalloc.h\nindex 563c8531a..2825bb37e 100644\n--- a/drivers/net/bnxt/tf_core/bitalloc.h\n+++ b/drivers/net/bnxt/tf_core/bitalloc.h\n@@ -72,6 +72,11 @@ int ba_init(struct bitalloc *pool, int size);\n int ba_alloc(struct bitalloc *pool);\n int ba_alloc_index(struct bitalloc *pool, int index);\n \n+/**\n+ * Returns -1 on failure, or index of allocated entry\n+ */\n+int ba_alloc_reverse(struct bitalloc *pool);\n+\n /**\n  * Query a particular index in a pool to check if its in use.\n  *\ndiff --git a/drivers/net/bnxt/tf_core/tf_rm_new.c b/drivers/net/bnxt/tf_core/tf_rm_new.c\nindex 02b4b5c8f..de8f11955 100644\n--- a/drivers/net/bnxt/tf_core/tf_rm_new.c\n+++ b/drivers/net/bnxt/tf_core/tf_rm_new.c\n@@ -671,7 +671,14 @@ tf_rm_allocate(struct tf_rm_allocate_parms *parms)\n \t\treturn rc;\n \t}\n \n-\tid = ba_alloc(rm_db->db[parms->db_index].pool);\n+\t/*\n+\t * priority  0: allocate from top of the tcam i.e. high\n+\t * priority !0: allocate index from bottom i.e lowest\n+\t */\n+\tif (parms->priority)\n+\t\tid = ba_alloc_reverse(rm_db->db[parms->db_index].pool);\n+\telse\n+\t\tid = ba_alloc(rm_db->db[parms->db_index].pool);\n \tif (id == BA_FAIL) {\n \t\trc = -ENOMEM;\n \t\tTFP_DRV_LOG(ERR,\ndiff --git a/drivers/net/bnxt/tf_core/tf_rm_new.h b/drivers/net/bnxt/tf_core/tf_rm_new.h\nindex a40296ed2..5cb68892a 100644\n--- a/drivers/net/bnxt/tf_core/tf_rm_new.h\n+++ b/drivers/net/bnxt/tf_core/tf_rm_new.h\n@@ -185,6 +185,14 @@ struct tf_rm_allocate_parms {\n \t * i.e. Full Action Record offsets.\n \t */\n \tuint32_t *index;\n+\t/**\n+\t * [in] Priority, indicates the prority of the entry\n+\t * priority  0: allocate from top of the tcam (from index 0\n+\t *              or lowest available index)\n+\t * priority !0: allocate from bottom of the tcam (from highest\n+\t *              available index)\n+\t */\n+\tuint32_t priority;\n };\n \n /**\ndiff --git a/drivers/net/bnxt/tf_core/tf_tcam.c b/drivers/net/bnxt/tf_core/tf_tcam.c\nindex 2f4441de8..260fb15a6 100644\n--- a/drivers/net/bnxt/tf_core/tf_tcam.c\n+++ b/drivers/net/bnxt/tf_core/tf_tcam.c\n@@ -157,6 +157,7 @@ tf_tcam_alloc(struct tf *tfp,\n \t/* Allocate requested element */\n \taparms.rm_db = tcam_db[parms->dir];\n \taparms.db_index = parms->type;\n+\taparms.priority = parms->priority;\n \taparms.index = (uint32_t *)&parms->idx;\n \trc = tf_rm_allocate(&aparms);\n \tif (rc) {\n",
    "prefixes": [
        "v5",
        "21/51"
    ]
}