get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 21588,
    "url": "https://patches.dpdk.org/api/patches/21588/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20170308061906.950-14-qi.z.zhang@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": "<20170308061906.950-14-qi.z.zhang@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20170308061906.950-14-qi.z.zhang@intel.com",
    "date": "2017-03-08T06:19:01",
    "name": "[dpdk-dev,v2,13/18] net/fm10k/base: don't stop reset",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "acd0617c8bf61b1069b0937631f96597bc3f0d19",
    "submitter": {
        "id": 504,
        "url": "https://patches.dpdk.org/api/people/504/?format=api",
        "name": "Qi Zhang",
        "email": "qi.z.zhang@intel.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20170308061906.950-14-qi.z.zhang@intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/21588/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/21588/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 892E4F958;\n\tWed,  8 Mar 2017 06:29:12 +0100 (CET)",
            "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n\tby dpdk.org (Postfix) with ESMTP id 853415589\n\tfor <dev@dpdk.org>; Wed,  8 Mar 2017 06:28:32 +0100 (CET)",
            "from fmsmga002.fm.intel.com ([10.253.24.26])\n\tby fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t07 Mar 2017 21:28:32 -0800",
            "from unknown (HELO localhost.localdomain.sh.intel.com)\n\t([10.239.129.167])\n\tby fmsmga002.fm.intel.com with ESMTP; 07 Mar 2017 21:28:31 -0800"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos; i=\"5.36,262,1486454400\"; d=\"scan'208\";\n\ta=\"1139354622\"",
        "From": "Qi Zhang <qi.z.zhang@intel.com>",
        "To": "jing.d.chen@intel.com",
        "Cc": "helin.zhang@intel.com,\n\tdev@dpdk.org,\n\tQi Zhang <qi.z.zhang@intel.com>",
        "Date": "Wed,  8 Mar 2017 01:19:01 -0500",
        "Message-Id": "<20170308061906.950-14-qi.z.zhang@intel.com>",
        "X-Mailer": "git-send-email 2.9.3",
        "In-Reply-To": "<20170308061906.950-1-qi.z.zhang@intel.com>",
        "References": "<20170303031727.461-1-qi.z.zhang@intel.com>\n\t<20170308061906.950-1-qi.z.zhang@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v2 13/18] net/fm10k/base: don't stop reset",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <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": "Don't report FM10K_ERR_REQUESTS_PENDING when we fail to disable queues\nwithin the timeout. This can occur due to a hardware Tx hang, or when\nthe switch ethernet fabric is resetting while we are transmitting\ntraffic. It can sometimes take up to 500ms before the Tx DMA engine\ngives up. Instead, just skip the DMA engine check and perform\na data-path reset anyways. Add a statistic counter to keep track of the\nnumber of resets occurring while we have pending DMA on the rings.\n\nIn order to prevent having to assign err = FM10K_SUCCESS, re-order the\nlast few items of the reset_hw_pf function so that we don't perform\n\"return err\" at the end.\n\nSigned-off-by: Qi Zhang <qi.z.zhang@intel.com>\n---\n drivers/net/fm10k/base/fm10k_pf.c   | 19 +++++++++----------\n drivers/net/fm10k/base/fm10k_type.h |  1 +\n drivers/net/fm10k/base/fm10k_vf.c   | 12 +++++++-----\n 3 files changed, 17 insertions(+), 15 deletions(-)",
    "diff": "diff --git a/drivers/net/fm10k/base/fm10k_pf.c b/drivers/net/fm10k/base/fm10k_pf.c\nindex bbc483d..bce2913 100644\n--- a/drivers/net/fm10k/base/fm10k_pf.c\n+++ b/drivers/net/fm10k/base/fm10k_pf.c\n@@ -66,21 +66,21 @@ STATIC s32 fm10k_reset_hw_pf(struct fm10k_hw *hw)\n \n \t/* shut down all rings */\n \terr = fm10k_disable_queues_generic(hw, FM10K_MAX_QUEUES);\n-\tif (err)\n+\tif (err == FM10K_ERR_REQUESTS_PENDING) {\n+\t\thw->mac.reset_while_pending++;\n+\t\tgoto force_reset;\n+\t} else if (err) {\n \t\treturn err;\n+\t}\n \n \t/* Verify that DMA is no longer active */\n \treg = FM10K_READ_REG(hw, FM10K_DMA_CTRL);\n \tif (reg & (FM10K_DMA_CTRL_TX_ACTIVE | FM10K_DMA_CTRL_RX_ACTIVE))\n \t\treturn FM10K_ERR_DMA_PENDING;\n \n-\t/* verify the switch is ready for reset */\n-\treg = FM10K_READ_REG(hw, FM10K_DMA_CTRL2);\n-\tif (!(reg & FM10K_DMA_CTRL2_SWITCH_READY))\n-\t\tgoto out;\n-\n+force_reset:\n \t/* Inititate data path reset */\n-\treg |= FM10K_DMA_CTRL_DATAPATH_RESET;\n+\treg = FM10K_DMA_CTRL_DATAPATH_RESET;\n \tFM10K_WRITE_REG(hw, FM10K_DMA_CTRL, reg);\n \n \t/* Flush write and allow 100us for reset to complete */\n@@ -90,10 +90,9 @@ STATIC s32 fm10k_reset_hw_pf(struct fm10k_hw *hw)\n \t/* Verify we made it out of reset */\n \treg = FM10K_READ_REG(hw, FM10K_IP);\n \tif (!(reg & FM10K_IP_NOTINRESET))\n-\t\terr = FM10K_ERR_RESET_FAILED;\n+\t\treturn FM10K_ERR_RESET_FAILED;\n \n-out:\n-\treturn err;\n+\treturn FM10K_SUCCESS;\n }\n \n /**\ndiff --git a/drivers/net/fm10k/base/fm10k_type.h b/drivers/net/fm10k/base/fm10k_type.h\nindex b74cebf..d43e40c 100644\n--- a/drivers/net/fm10k/base/fm10k_type.h\n+++ b/drivers/net/fm10k/base/fm10k_type.h\n@@ -654,6 +654,7 @@ struct fm10k_mac_info {\n \tbool tx_ready;\n \tu32 dglort_map;\n \tu8 itr_scale;\n+\tu64 reset_while_pending;\n };\n \n struct fm10k_swapi_table_info {\ndiff --git a/drivers/net/fm10k/base/fm10k_vf.c b/drivers/net/fm10k/base/fm10k_vf.c\nindex dd3d318..71bacd0 100644\n--- a/drivers/net/fm10k/base/fm10k_vf.c\n+++ b/drivers/net/fm10k/base/fm10k_vf.c\n@@ -49,7 +49,7 @@ STATIC s32 fm10k_stop_hw_vf(struct fm10k_hw *hw)\n \n \t/* we need to disable the queues before taking further steps */\n \terr = fm10k_stop_hw_generic(hw);\n-\tif (err)\n+\tif (err && err != FM10K_ERR_REQUESTS_PENDING)\n \t\treturn err;\n \n \t/* If permanent address is set then we need to restore it */\n@@ -82,7 +82,7 @@ STATIC s32 fm10k_stop_hw_vf(struct fm10k_hw *hw)\n \t\tFM10K_WRITE_REG(hw, FM10K_TDLEN(i), tdlen);\n \t}\n \n-\treturn FM10K_SUCCESS;\n+\treturn err;\n }\n \n /**\n@@ -100,7 +100,9 @@ STATIC s32 fm10k_reset_hw_vf(struct fm10k_hw *hw)\n \n \t/* shut down queues we own and reset DMA configuration */\n \terr = fm10k_stop_hw_vf(hw);\n-\tif (err)\n+\tif (err == FM10K_ERR_REQUESTS_PENDING)\n+\t\thw->mac.reset_while_pending++;\n+\telse if (err)\n \t\treturn err;\n \n \t/* Inititate VF reset */\n@@ -113,9 +115,9 @@ STATIC s32 fm10k_reset_hw_vf(struct fm10k_hw *hw)\n \t/* Clear reset bit and verify it was cleared */\n \tFM10K_WRITE_REG(hw, FM10K_VFCTRL, 0);\n \tif (FM10K_READ_REG(hw, FM10K_VFCTRL) & FM10K_VFCTRL_RST)\n-\t\terr = FM10K_ERR_RESET_FAILED;\n+\t\treturn FM10K_ERR_RESET_FAILED;\n \n-\treturn err;\n+\treturn FM10K_SUCCESS;\n }\n \n /**\n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "13/18"
    ]
}