get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 9066,
    "url": "https://patches.dpdk.org/api/patches/9066/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1448334616-14540-1-git-send-email-jing.d.chen@intel.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": "<1448334616-14540-1-git-send-email-jing.d.chen@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1448334616-14540-1-git-send-email-jing.d.chen@intel.com",
    "date": "2015-11-24T03:10:16",
    "name": "[dpdk-dev,v2] fm10k: fix a crash bug when quit from testpmd",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "32a626ae618e3017712054a36e1b7c310e963d0d",
    "submitter": {
        "id": 40,
        "url": "https://patches.dpdk.org/api/people/40/?format=api",
        "name": "Chen, Jing D",
        "email": "jing.d.chen@intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1448334616-14540-1-git-send-email-jing.d.chen@intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/9066/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/9066/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 826408E99;\n\tTue, 24 Nov 2015 04:10:28 +0100 (CET)",
            "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n\tby dpdk.org (Postfix) with ESMTP id 07A118E7D\n\tfor <dev@dpdk.org>; Tue, 24 Nov 2015 04:10:26 +0100 (CET)",
            "from fmsmga003.fm.intel.com ([10.253.24.29])\n\tby orsmga101.jf.intel.com with ESMTP; 23 Nov 2015 19:10:25 -0800",
            "from shvmail01.sh.intel.com ([10.239.29.42])\n\tby FMSMGA003.fm.intel.com with ESMTP; 23 Nov 2015 19:10:25 -0800",
            "from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com\n\t[10.239.29.89])\n\tby shvmail01.sh.intel.com with ESMTP id tAO3AN6V021361;\n\tTue, 24 Nov 2015 11:10:23 +0800",
            "from shecgisg004.sh.intel.com (localhost [127.0.0.1])\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP\n\tid tAO3AJrD014575; Tue, 24 Nov 2015 11:10:21 +0800",
            "(from jingche2@localhost)\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id tAO3AJv8014571; \n\tTue, 24 Nov 2015 11:10:19 +0800"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.20,338,1444719600\"; d=\"scan'208\";a=\"606073466\"",
        "From": "\"Chen Jing D(Mark)\" <jing.d.chen@intel.com>",
        "To": "dev@dpdk.org",
        "Date": "Tue, 24 Nov 2015 11:10:16 +0800",
        "Message-Id": "<1448334616-14540-1-git-send-email-jing.d.chen@intel.com>",
        "X-Mailer": "git-send-email 1.7.12.2",
        "In-Reply-To": "<1447304251-4145-1-git-send-email-jing.d.chen@intel.com>",
        "References": "<1447304251-4145-1-git-send-email-jing.d.chen@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v2] fm10k: fix a crash bug when quit from testpmd",
        "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": "From: \"Chen Jing D(Mark)\" <jing.d.chen@intel.com>\n\nWhen the fm10k port is closed, both func tx_queue_clean() and\nfm10k_tx_queue_release_mbufs_vec() will try to release buffer in\nSW ring. The latter func won't do sanity check on those pointers\nand cause crash.\n\nThe fix removed Vector TX buffer release func since it can share\nthe release functions with regular TX.\n\nfixes: fb9066e479a6(fm10k: reset and release mbuf)\n\nSigned-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>\nAcked-by: Michael Qiu <michael.qiu@intel.com>\n---\n drivers/net/fm10k/fm10k.h          |    1 -\n drivers/net/fm10k/fm10k_ethdev.c   |    7 +++----\n drivers/net/fm10k/fm10k_rxtx_vec.c |   28 ----------------------------\n 3 files changed, 3 insertions(+), 33 deletions(-)\n\nv2 changes:\n - remove debug info for actual rx/tx func.",
    "diff": "diff --git a/drivers/net/fm10k/fm10k.h b/drivers/net/fm10k/fm10k.h\nindex 754aa6a..38d5489 100644\n--- a/drivers/net/fm10k/fm10k.h\n+++ b/drivers/net/fm10k/fm10k.h\n@@ -237,7 +237,6 @@ struct fm10k_tx_queue {\n };\n \n struct fm10k_txq_ops {\n-\tvoid (*release_mbufs)(struct fm10k_tx_queue *txq);\n \tvoid (*reset)(struct fm10k_tx_queue *txq);\n };\n \ndiff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c\nindex 441f713..7f5c852 100644\n--- a/drivers/net/fm10k/fm10k_ethdev.c\n+++ b/drivers/net/fm10k/fm10k_ethdev.c\n@@ -386,7 +386,6 @@ fm10k_check_mq_mode(struct rte_eth_dev *dev)\n }\n \n static const struct fm10k_txq_ops def_txq_ops = {\n-\t.release_mbufs = tx_queue_free,\n \t.reset = tx_queue_reset,\n };\n \n@@ -1073,7 +1072,7 @@ fm10k_dev_queue_release(struct rte_eth_dev *dev)\n \t\tfor (i = 0; i < dev->data->nb_tx_queues; i++) {\n \t\t\tstruct fm10k_tx_queue *txq = dev->data->tx_queues[i];\n \n-\t\t\ttxq->ops->release_mbufs(txq);\n+\t\t\ttx_queue_free(txq);\n \t\t}\n \t}\n \n@@ -1761,7 +1760,7 @@ fm10k_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_id,\n \tif (dev->data->tx_queues[queue_id] != NULL) {\n \t\tstruct fm10k_tx_queue *txq = dev->data->tx_queues[queue_id];\n \n-\t\ttxq->ops->release_mbufs(txq);\n+\t\ttx_queue_free(txq);\n \t\tdev->data->tx_queues[queue_id] = NULL;\n \t}\n \n@@ -1836,7 +1835,7 @@ fm10k_tx_queue_release(void *queue)\n \tstruct fm10k_tx_queue *q = queue;\n \tPMD_INIT_FUNC_TRACE();\n \n-\tq->ops->release_mbufs(q);\n+\ttx_queue_free(q);\n }\n \n static int\ndiff --git a/drivers/net/fm10k/fm10k_rxtx_vec.c b/drivers/net/fm10k/fm10k_rxtx_vec.c\nindex 06beca9..6042568 100644\n--- a/drivers/net/fm10k/fm10k_rxtx_vec.c\n+++ b/drivers/net/fm10k/fm10k_rxtx_vec.c\n@@ -45,8 +45,6 @@\n #endif\n \n static void\n-fm10k_tx_queue_release_mbufs_vec(struct fm10k_tx_queue *txq);\n-static void\n fm10k_reset_tx_queue(struct fm10k_tx_queue *txq);\n \n /* Handling the offload flags (olflags) field takes computation\n@@ -634,7 +632,6 @@ fm10k_recv_scattered_pkts_vec(void *rx_queue,\n }\n \n static const struct fm10k_txq_ops vec_txq_ops = {\n-\t.release_mbufs = fm10k_tx_queue_release_mbufs_vec,\n \t.reset = fm10k_reset_tx_queue,\n };\n \n@@ -795,31 +792,6 @@ fm10k_xmit_pkts_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n }\n \n static void __attribute__((cold))\n-fm10k_tx_queue_release_mbufs_vec(struct fm10k_tx_queue *txq)\n-{\n-\tunsigned i;\n-\tconst uint16_t max_desc = (uint16_t)(txq->nb_desc - 1);\n-\n-\tif (txq->sw_ring == NULL || txq->nb_free == max_desc)\n-\t\treturn;\n-\n-\t/* release the used mbufs in sw_ring */\n-\tfor (i = txq->next_dd - (txq->rs_thresh - 1);\n-\t     i != txq->next_free;\n-\t     i = (i + 1) & max_desc)\n-\t\trte_pktmbuf_free_seg(txq->sw_ring[i]);\n-\n-\ttxq->nb_free = max_desc;\n-\n-\t/* reset tx_entry */\n-\tfor (i = 0; i < txq->nb_desc; i++)\n-\t\ttxq->sw_ring[i] = NULL;\n-\n-\trte_free(txq->sw_ring);\n-\ttxq->sw_ring = NULL;\n-}\n-\n-static void __attribute__((cold))\n fm10k_reset_tx_queue(struct fm10k_tx_queue *txq)\n {\n \tstatic const struct fm10k_tx_desc zeroed_desc = {0};\n",
    "prefixes": [
        "dpdk-dev",
        "v2"
    ]
}