Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1227499/?format=api
{ "id": 1227499, "url": "http://patchwork.ozlabs.org/api/patches/1227499/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20200122152041.41498-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": "<20200122152041.41498-1-anthony.l.nguyen@intel.com>", "list_archive_url": null, "date": "2020-01-22T15:20:27", "name": "[S37,01/15] ice: Fix DCB rebuild after reset", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "c1880c17e7fe88dbc095d59244ec3cc3945630d1", "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/20200122152041.41498-1-anthony.l.nguyen@intel.com/mbox/", "series": [ { "id": 154775, "url": "http://patchwork.ozlabs.org/api/series/154775/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=154775", "date": "2020-01-22T15:20:28", "name": "[S37,01/15] ice: Fix DCB rebuild after reset", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/154775/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/1227499/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1227499/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 4832Kr324Wz9sRX\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 23 Jan 2020 10:53:36 +1100 (AEDT)", "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id F2B5286470;\n\tWed, 22 Jan 2020 23:53:34 +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 uyApEQvVvfO4; Wed, 22 Jan 2020 23:53:34 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 231928691C;\n\tWed, 22 Jan 2020 23:53:34 +0000 (UTC)", "from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n\tby ash.osuosl.org (Postfix) with ESMTP id 412D61BF281\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed, 22 Jan 2020 23:53:27 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 3C636864EA\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed, 22 Jan 2020 23:53:27 +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 cDlisA5TRpsf for <intel-wired-lan@lists.osuosl.org>;\n\tWed, 22 Jan 2020 23:53:25 +0000 (UTC)", "from mga05.intel.com (mga05.intel.com [192.55.52.43])\n\tby fraxinus.osuosl.org (Postfix) with ESMTPS id 36FE686463\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed, 22 Jan 2020 23:53:25 +0000 (UTC)", "from fmsmga008.fm.intel.com ([10.253.24.58])\n\tby fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t22 Jan 2020 15:53:24 -0800", "from unknown (HELO localhost.jf.intel.com) ([10.166.244.174])\n\tby fmsmga008.fm.intel.com with ESMTP; 22 Jan 2020 15:53:24 -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,351,1574150400\"; d=\"scan'208\";a=\"222189278\"", "From": "Tony Nguyen <anthony.l.nguyen@intel.com>", "To": "intel-wired-lan@lists.osuosl.org", "Date": "Wed, 22 Jan 2020 07:20:27 -0800", "Message-Id": "<20200122152041.41498-1-anthony.l.nguyen@intel.com>", "X-Mailer": "git-send-email 2.20.1", "MIME-Version": "1.0", "Subject": "[Intel-wired-lan] [PATCH S37 01/15] ice: Fix DCB rebuild after reset", "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---\n drivers/net/ethernet/intel/ice/ice_dcb_lib.c | 82 ++++++++------------\n drivers/net/ethernet/intel/ice/ice_main.c | 1 +\n 2 files changed, 35 insertions(+), 48 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..8268122face2 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,24 @@ 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\tmutex_unlock(&pf->tc_mutex);\n \t\treturn;\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\tmutex_unlock(&pf->tc_mutex);\n \t\treturn;\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+\tif (!need_reconfig) {\n+\t\tmutex_unlock(&pf->tc_mutex);\n \t\treturn;\n+\t}\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@@ -889,6 +873,7 @@ ice_dcb_process_lldp_set_mib_change(struct ice_pf *pf,\n \tif (ret) {\n \t\tdev_err(dev, \"Query Port ETS failed\\n\");\n \t\trtnl_unlock();\n+\t\tmutex_unlock(&pf->tc_mutex);\n \t\treturn;\n \t}\n \n@@ -897,4 +882,5 @@ ice_dcb_process_lldp_set_mib_change(struct ice_pf *pf,\n \n \tice_ena_vsi(pf_vsi, true);\n \trtnl_unlock();\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", "01/15" ] }