Show a patch.

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

{
    "id": 73601,
    "url": "https://patches.dpdk.org/api/patches/73601/",
    "web_url": "https://patches.dpdk.org/patch/73601/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/",
        "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"
    },
    "msgid": "<20200709080046.65879-5-guinanx.sun@intel.com>",
    "date": "2020-07-09T08:00:31",
    "name": "[v3,04/19] net/ixgbe/base: resolve infinite recursion on PCIe link down",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "34777d19a81e471ed6e2d27a9613a80037696d99",
    "submitter": {
        "id": 1476,
        "url": "https://patches.dpdk.org/api/people/1476/",
        "name": "Guinan Sun",
        "email": "guinanx.sun@intel.com"
    },
    "delegate": {
        "id": 1540,
        "url": "https://patches.dpdk.org/api/users/1540/",
        "username": "qzhan15",
        "first_name": "Qi",
        "last_name": "Zhang",
        "email": "qi.z.zhang@intel.com"
    },
    "mbox": "https://patches.dpdk.org/patch/73601/mbox/",
    "series": [
        {
            "id": 10915,
            "url": "https://patches.dpdk.org/api/series/10915/",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=10915",
            "date": "2020-07-09T08:00:27",
            "name": "update ixgbe base code",
            "version": 3,
            "mbox": "https://patches.dpdk.org/series/10915/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/73601/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/73601/checks/",
    "tags": {},
    "headers": {
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "Return-Path": "<dev-bounces@dpdk.org>",
        "IronPort-SDR": [
            "\n 866f0KZXy6EXqxdMFLTZgb0DM+jWz++E1n0PYiJfT8+2LsSVoh+FyzblcbH70q8FMxW2zOSddZ\n yqa5HaExfTSA==",
            "\n IjgLSYFMZgc6fRieU8C0RDCu9OKWH0ALh11xkMXFIk/FirKUhgJF7QC176pcX2feslUW/2Re6M\n vxrAxmTlLAJg=="
        ],
        "X-Mailer": "git-send-email 2.17.1",
        "To": "dev@dpdk.org",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 96899A0526;\n\tThu,  9 Jul 2020 10:14:27 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 6A72E1DC67;\n\tThu,  9 Jul 2020 10:14:04 +0200 (CEST)",
            "from mga07.intel.com (mga07.intel.com [134.134.136.100])\n by dpdk.org (Postfix) with ESMTP id 099AA1DCD1\n for <dev@dpdk.org>; Thu,  9 Jul 2020 10:13:55 +0200 (CEST)",
            "from orsmga002.jf.intel.com ([10.7.209.21])\n by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 09 Jul 2020 01:13:55 -0700",
            "from intel.sh.intel.com ([10.239.255.18])\n by orsmga002.jf.intel.com with ESMTP; 09 Jul 2020 01:13:54 -0700"
        ],
        "X-BeenThere": "dev@dpdk.org",
        "X-Amp-File-Uploaded": "False",
        "Subject": "[dpdk-dev] [PATCH v3 04/19] net/ixgbe/base: resolve infinite\n\trecursion on PCIe link down",
        "Cc": "Jeff Guo <jia.guo@intel.com>, Zhao1 Wei <wei.zhao1@intel.com>,\n Guinan Sun <guinanx.sun@intel.com>,\n Robert Konklewski <robertx.konklewski@intel.com>",
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "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-Post": "<mailto:dev@dpdk.org>",
        "In-Reply-To": "<20200709080046.65879-1-guinanx.sun@intel.com>",
        "X-ExtLoop1": "1",
        "Precedence": "list",
        "From": "Guinan Sun <guinanx.sun@intel.com>",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9676\"; a=\"212869336\"",
            "E=Sophos;i=\"5.75,331,1589266800\"; d=\"scan'208\";a=\"212869336\"",
            "E=Sophos;i=\"5.75,331,1589266800\"; d=\"scan'208\";a=\"297989028\""
        ],
        "References": "<20200702031329.4495-1-guinanx.sun@intel.com>\n <20200709080046.65879-1-guinanx.sun@intel.com>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>",
        "Errors-To": "dev-bounces@dpdk.org",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "Message-Id": "<20200709080046.65879-5-guinanx.sun@intel.com>",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Date": "Thu,  9 Jul 2020 08:00:31 +0000",
        "X-Mailman-Version": "2.1.15"
    },
    "content": "In some corner cases the functions ixgbe_clear_rar_generic and\nixgbe_clear_vmdq_generic may call one another leading to infinite\nrecursion.\n\nWhen ixgbe_clear_vmdq_generic is called with IXGBE_CLEAR_VMDQ_ALL\nflag, it's going to clear MPSAR registers, and proceed to call\nixgbe_clear_rar_generic, which in turn will clear the RAR registers,\nand recursively call back ixgbe_clear_vmdq_generic. Normally, the\nlatter would detect that MPSAR registers have already been cleared\nand terminate the recursion.\n\nHowever, when PCIe link is down, and before the driver has had the\nopportunity to shut itself down, all register reads return 0xFFFFFFFF,\nand all register writes fail silently. In such case, because\nixgbe_clear_vmdq_generic blindly assumes that clearing MPSAR registers\nsucceeded, it's going to always call ixgbe_clear_rar_generic, which\nin turn will always call back ixgbe_clear_vmdq_generic, creating\ninifinite recursion.\n\nThis patch re-reads MPSAR register values after they had been cleared.\nIn case of PCIe link failure, the values read will be non-zero, which\nwill terminate the recursion. On the other hand, under normal\ncircumstances the value read from MPSAR registers is going to be equal\nto the value previously written, so this patch is expected not to cause\nany regressions.\n\nSigned-off-by: Robert Konklewski <robertx.konklewski@intel.com>\nSigned-off-by: Guinan Sun <guinanx.sun@intel.com>\nReviewed-by: Wei Zhao <wei.zhao1@intel.com>\n---\n drivers/net/ixgbe/base/ixgbe_common.c | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c\nindex fec6241f5..2d848a02b 100644\n--- a/drivers/net/ixgbe/base/ixgbe_common.c\n+++ b/drivers/net/ixgbe/base/ixgbe_common.c\n@@ -3777,11 +3777,11 @@ s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)\n \tif (vmdq == IXGBE_CLEAR_VMDQ_ALL) {\n \t\tif (mpsar_lo) {\n \t\t\tIXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 0);\n-\t\t\tmpsar_lo = 0;\n+\t\t\tmpsar_lo = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));\n \t\t}\n \t\tif (mpsar_hi) {\n \t\t\tIXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 0);\n-\t\t\tmpsar_hi = 0;\n+\t\t\tmpsar_hi = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));\n \t\t}\n \t} else if (vmdq < 32) {\n \t\tmpsar_lo &= ~(1 << vmdq);\n",
    "prefixes": [
        "v3",
        "04/19"
    ]
}