get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 1234509,
    "url": "http://patchwork.ozlabs.org/api/patches/1234509/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20200206092013.23388-1-anthony.l.nguyen@intel.com/",
    "project": {
        "id": 46,
        "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api",
        "name": "Intel Wired Ethernet development",
        "link_name": "intel-wired-lan",
        "list_id": "intel-wired-lan.osuosl.org",
        "list_email": "intel-wired-lan@osuosl.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20200206092013.23388-1-anthony.l.nguyen@intel.com>",
    "list_archive_url": null,
    "date": "2020-02-06T09:19:59",
    "name": "[S37,v3,01/15] ice: Fix DCB rebuild after reset",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "3641e555f214489a2611ae42d37ecbb83cb3fe66",
    "submitter": {
        "id": 68875,
        "url": "http://patchwork.ozlabs.org/api/people/68875/?format=api",
        "name": "Tony Nguyen",
        "email": "anthony.l.nguyen@intel.com"
    },
    "delegate": {
        "id": 68,
        "url": "http://patchwork.ozlabs.org/api/users/68/?format=api",
        "username": "jtkirshe",
        "first_name": "Jeff",
        "last_name": "Kirsher",
        "email": "jeffrey.t.kirsher@intel.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20200206092013.23388-1-anthony.l.nguyen@intel.com/mbox/",
    "series": [
        {
            "id": 157176,
            "url": "http://patchwork.ozlabs.org/api/series/157176/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=157176",
            "date": "2020-02-06T09:20:02",
            "name": "[S37,v3,01/15] ice: Fix DCB rebuild after reset",
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/157176/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/1234509/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/1234509/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<intel-wired-lan-bounces@osuosl.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Authentication-Results": [
            "ozlabs.org; spf=pass (sender SPF authorized)\n\tsmtp.mailfrom=osuosl.org (client-ip=140.211.166.137;\n\thelo=fraxinus.osuosl.org;\n\tenvelope-from=intel-wired-lan-bounces@osuosl.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org;\n\tdmarc=fail (p=none dis=none) header.from=intel.com"
        ],
        "Received": [
            "from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 48D5d56rmdz9sRY\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri,  7 Feb 2020 04:53:13 +1100 (AEDT)",
            "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 3BD2E860F9;\n\tThu,  6 Feb 2020 17:53:12 +0000 (UTC)",
            "from fraxinus.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id pn9hssj2N-6D; Thu,  6 Feb 2020 17:53:11 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 6C8868613E;\n\tThu,  6 Feb 2020 17:53:11 +0000 (UTC)",
            "from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n\tby ash.osuosl.org (Postfix) with ESMTP id CCD651BF9B6\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu,  6 Feb 2020 17:53:08 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id C9CD886119\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu,  6 Feb 2020 17:53:08 +0000 (UTC)",
            "from fraxinus.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id vGmHh4dzWiJ1 for <intel-wired-lan@lists.osuosl.org>;\n\tThu,  6 Feb 2020 17:53:08 +0000 (UTC)",
            "from mga04.intel.com (mga04.intel.com [192.55.52.120])\n\tby fraxinus.osuosl.org (Postfix) with ESMTPS id E35E7860F2\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu,  6 Feb 2020 17:53:07 +0000 (UTC)",
            "from fmsmga004.fm.intel.com ([10.253.24.48])\n\tby fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t06 Feb 2020 09:53:06 -0800",
            "from unknown (HELO localhost.jf.intel.com) ([10.166.244.174])\n\tby fmsmga004.fm.intel.com with ESMTP; 06 Feb 2020 09:53:06 -0800"
        ],
        "X-Virus-Scanned": [
            "amavisd-new at osuosl.org",
            "amavisd-new at osuosl.org"
        ],
        "X-Greylist": "domain auto-whitelisted by SQLgrey-1.7.6",
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.70,410,1574150400\"; d=\"scan'208\";a=\"255160928\"",
        "From": "Tony Nguyen <anthony.l.nguyen@intel.com>",
        "To": "intel-wired-lan@lists.osuosl.org",
        "Date": "Thu,  6 Feb 2020 01:19:59 -0800",
        "Message-Id": "<20200206092013.23388-1-anthony.l.nguyen@intel.com>",
        "X-Mailer": "git-send-email 2.20.1",
        "MIME-Version": "1.0",
        "Subject": "[Intel-wired-lan] [PATCH S37 v3 01/15] ice: Fix DCB rebuild after\n\treset",
        "X-BeenThere": "intel-wired-lan@osuosl.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.osuosl.org>",
        "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>",
        "List-Post": "<mailto:intel-wired-lan@osuosl.org>",
        "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>",
        "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "intel-wired-lan-bounces@osuosl.org",
        "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>"
    },
    "content": "From: Dave Ertman <david.m.ertman@intel.com>\n\nThe function ice_dcb_rebuild had some logic\nflaws in it, and also didn't differentiate\nbetween FW and SW modes needs.\n\nFor FW flow, the willing setting was being\nforced to OFF and left that way.  Unwilling\nin DCB FW mode is not a supported model.\n\nLeave the config alone and use the return value\nfrom the set command to determine if setting the\nconfig was successful.\n\nThe SW DCB flow does not need to need to register\nfor MIB change events (as they are not used in\nSW mode).\n\nUse !is_sw_lldp checks to only perform FW specific\ntask while in FW mode.\n\nAlso adding a reapplication of the current DCB\nconfig after a link event.  Some NVMs are not\nmaintaining their DCB configs across link events.\n\nSigned-off-by: Dave Ertman <david.m.ertman@intel.com>\n---\nv3:\n- Use goto's for single exit/unlock path\nv2:\n- Add missing mutex_unlock() in error path\n---\n drivers/net/ethernet/intel/ice/ice_dcb_lib.c | 88 ++++++++------------\n drivers/net/ethernet/intel/ice/ice_main.c    |  1 +\n 2 files changed, 36 insertions(+), 53 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/ice/ice_dcb_lib.c b/drivers/net/ethernet/intel/ice/ice_dcb_lib.c\nindex 9401f2051293..b42f8345b0f4 100644\n--- a/drivers/net/ethernet/intel/ice/ice_dcb_lib.c\n+++ b/drivers/net/ethernet/intel/ice/ice_dcb_lib.c\n@@ -339,9 +339,9 @@ ice_dcb_need_recfg(struct ice_pf *pf, struct ice_dcbx_cfg *old_cfg,\n  */\n void ice_dcb_rebuild(struct ice_pf *pf)\n {\n-\tstruct ice_dcbx_cfg *local_dcbx_cfg, *desired_dcbx_cfg, *prev_cfg;\n \tstruct ice_aqc_port_ets_elem buf = { 0 };\n \tstruct device *dev = ice_pf_to_dev(pf);\n+\tstruct ice_dcbx_cfg *err_cfg;\n \tenum ice_status ret;\n \n \tret = ice_query_port_ets(pf->hw.port_info, &buf, sizeof(buf), NULL);\n@@ -354,53 +354,25 @@ void ice_dcb_rebuild(struct ice_pf *pf)\n \tif (!test_bit(ICE_FLAG_DCB_ENA, pf->flags))\n \t\treturn;\n \n-\tlocal_dcbx_cfg = &pf->hw.port_info->local_dcbx_cfg;\n-\tdesired_dcbx_cfg = &pf->hw.port_info->desired_dcbx_cfg;\n+\tmutex_lock(&pf->tc_mutex);\n \n-\t/* Save current willing state and force FW to unwilling */\n-\tlocal_dcbx_cfg->etscfg.willing = 0x0;\n-\tlocal_dcbx_cfg->pfc.willing = 0x0;\n-\tlocal_dcbx_cfg->app_mode = ICE_DCBX_APPS_NON_WILLING;\n+\tif (!pf->hw.port_info->is_sw_lldp)\n+\t\tice_cfg_etsrec_defaults(pf->hw.port_info);\n \n-\tice_cfg_etsrec_defaults(pf->hw.port_info);\n \tret = ice_set_dcb_cfg(pf->hw.port_info);\n \tif (ret) {\n-\t\tdev_err(dev, \"Failed to set DCB to unwilling\\n\");\n+\t\tdev_err(dev, \"Failed to set DCB config in rebuild\\n\");\n \t\tgoto dcb_error;\n \t}\n \n-\t/* Retrieve DCB config and ensure same as current in SW */\n-\tprev_cfg = kmemdup(local_dcbx_cfg, sizeof(*prev_cfg), GFP_KERNEL);\n-\tif (!prev_cfg)\n-\t\tgoto dcb_error;\n-\n-\tice_init_dcb(&pf->hw, true);\n-\tif (pf->hw.port_info->dcbx_status == ICE_DCBX_STATUS_DIS)\n-\t\tpf->hw.port_info->is_sw_lldp = true;\n-\telse\n-\t\tpf->hw.port_info->is_sw_lldp = false;\n-\n-\tif (ice_dcb_need_recfg(pf, prev_cfg, local_dcbx_cfg)) {\n-\t\t/* difference in cfg detected - disable DCB till next MIB */\n-\t\tdev_err(dev, \"Set local MIB not accurate\\n\");\n-\t\tkfree(prev_cfg);\n-\t\tgoto dcb_error;\n+\tif (!pf->hw.port_info->is_sw_lldp) {\n+\t\tret = ice_cfg_lldp_mib_change(&pf->hw, true);\n+\t\tif (ret && !pf->hw.port_info->is_sw_lldp) {\n+\t\t\tdev_err(dev, \"Failed to register for MIB changes\\n\");\n+\t\t\tgoto dcb_error;\n+\t\t}\n \t}\n \n-\t/* fetched config congruent to previous configuration */\n-\tkfree(prev_cfg);\n-\n-\t/* Set the local desired config */\n-\tif (local_dcbx_cfg->dcbx_mode == ICE_DCBX_MODE_CEE)\n-\t\tmemcpy(local_dcbx_cfg, desired_dcbx_cfg,\n-\t\t       sizeof(*local_dcbx_cfg));\n-\n-\tice_cfg_etsrec_defaults(pf->hw.port_info);\n-\tret = ice_set_dcb_cfg(pf->hw.port_info);\n-\tif (ret) {\n-\t\tdev_err(dev, \"Failed to set desired config\\n\");\n-\t\tgoto dcb_error;\n-\t}\n \tdev_info(dev, \"DCB restored after reset\\n\");\n \tret = ice_query_port_ets(pf->hw.port_info, &buf, sizeof(buf), NULL);\n \tif (ret) {\n@@ -408,26 +380,32 @@ void ice_dcb_rebuild(struct ice_pf *pf)\n \t\tgoto dcb_error;\n \t}\n \n+\tmutex_unlock(&pf->tc_mutex);\n+\n \treturn;\n \n dcb_error:\n \tdev_err(dev, \"Disabling DCB until new settings occur\\n\");\n-\tprev_cfg = kzalloc(sizeof(*prev_cfg), GFP_KERNEL);\n-\tif (!prev_cfg)\n+\terr_cfg = kzalloc(sizeof(*err_cfg), GFP_KERNEL);\n+\tif (!err_cfg) {\n+\t\tmutex_unlock(&pf->tc_mutex);\n \t\treturn;\n+\t}\n \n-\tprev_cfg->etscfg.willing = true;\n-\tprev_cfg->etscfg.tcbwtable[0] = ICE_TC_MAX_BW;\n-\tprev_cfg->etscfg.tsatable[0] = ICE_IEEE_TSA_ETS;\n-\tmemcpy(&prev_cfg->etsrec, &prev_cfg->etscfg, sizeof(prev_cfg->etsrec));\n+\terr_cfg->etscfg.willing = true;\n+\terr_cfg->etscfg.tcbwtable[0] = ICE_TC_MAX_BW;\n+\terr_cfg->etscfg.tsatable[0] = ICE_IEEE_TSA_ETS;\n+\tmemcpy(&err_cfg->etsrec, &err_cfg->etscfg, sizeof(err_cfg->etsrec));\n \t/* Coverity warns the return code of ice_pf_dcb_cfg() is not checked\n \t * here as is done for other calls to that function. That check is\n \t * not necessary since this is in this function's error cleanup path.\n \t * Suppress the Coverity warning with the following comment...\n \t */\n \t/* coverity[check_return] */\n-\tice_pf_dcb_cfg(pf, prev_cfg, false);\n-\tkfree(prev_cfg);\n+\tice_pf_dcb_cfg(pf, err_cfg, false);\n+\tkfree(err_cfg);\n+\n+\tmutex_unlock(&pf->tc_mutex);\n }\n \n /**\n@@ -842,6 +820,8 @@ ice_dcb_process_lldp_set_mib_change(struct ice_pf *pf,\n \t\t}\n \t}\n \n+\tmutex_lock(&pf->tc_mutex);\n+\n \t/* store the old configuration */\n \ttmp_dcbx_cfg = pf->hw.port_info->local_dcbx_cfg;\n \n@@ -852,20 +832,20 @@ ice_dcb_process_lldp_set_mib_change(struct ice_pf *pf,\n \tret = ice_get_dcb_cfg(pf->hw.port_info);\n \tif (ret) {\n \t\tdev_err(dev, \"Failed to get DCB config\\n\");\n-\t\treturn;\n+\t\tgoto out;\n \t}\n \n \t/* No change detected in DCBX configs */\n \tif (!memcmp(&tmp_dcbx_cfg, &pi->local_dcbx_cfg, sizeof(tmp_dcbx_cfg))) {\n \t\tdev_dbg(dev, \"No change detected in DCBX configuration.\\n\");\n-\t\treturn;\n+\t\tgoto out;\n \t}\n \n \tneed_reconfig = ice_dcb_need_recfg(pf, &tmp_dcbx_cfg,\n \t\t\t\t\t   &pi->local_dcbx_cfg);\n \tice_dcbnl_flush_apps(pf, &tmp_dcbx_cfg, &pi->local_dcbx_cfg);\n \tif (!need_reconfig)\n-\t\treturn;\n+\t\tgoto out;\n \n \t/* Enable DCB tagging only when more than one TC */\n \tif (ice_dcb_get_num_tc(&pi->local_dcbx_cfg) > 1) {\n@@ -879,7 +859,7 @@ ice_dcb_process_lldp_set_mib_change(struct ice_pf *pf,\n \tpf_vsi = ice_get_main_vsi(pf);\n \tif (!pf_vsi) {\n \t\tdev_dbg(dev, \"PF VSI doesn't exist\\n\");\n-\t\treturn;\n+\t\tgoto out;\n \t}\n \n \trtnl_lock();\n@@ -888,13 +868,15 @@ ice_dcb_process_lldp_set_mib_change(struct ice_pf *pf,\n \tret = ice_query_port_ets(pf->hw.port_info, &buf, sizeof(buf), NULL);\n \tif (ret) {\n \t\tdev_err(dev, \"Query Port ETS failed\\n\");\n-\t\trtnl_unlock();\n-\t\treturn;\n+\t\tgoto unlock_rtnl;\n \t}\n \n \t/* changes in configuration update VSI */\n \tice_pf_dcb_recfg(pf);\n \n \tice_ena_vsi(pf_vsi, true);\n+unlock_rtnl:\n \trtnl_unlock();\n+out:\n+\tmutex_unlock(&pf->tc_mutex);\n }\ndiff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c\nindex 6ce422789df7..d4bc6fd3321c 100644\n--- a/drivers/net/ethernet/intel/ice/ice_main.c\n+++ b/drivers/net/ethernet/intel/ice/ice_main.c\n@@ -844,6 +844,7 @@ ice_link_event(struct ice_pf *pf, struct ice_port_info *pi, bool link_up,\n \t\t}\n \t}\n \n+\tice_dcb_rebuild(pf);\n \tice_vsi_link_event(vsi, link_up);\n \tice_print_link_msg(vsi, link_up);\n \n",
    "prefixes": [
        "S37",
        "v3",
        "01/15"
    ]
}