Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3523568imu; Mon, 7 Jan 2019 05:04:18 -0800 (PST) X-Google-Smtp-Source: ALg8bN7A2bFc+wrZceteia0g6udjXy6lwyY7OQCG3q/CBK3LMBgdMS8HR0qzUrveledfoNaEMEhf X-Received: by 2002:a62:b15:: with SMTP id t21mr65189597pfi.136.1546866258821; Mon, 07 Jan 2019 05:04:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546866258; cv=none; d=google.com; s=arc-20160816; b=rP73ehs7Q/0+dc3dpNXuRzQxq0lUVJ6UeFL/XtiklrMm/P3BsC3FS/jITPVsDTZjOb Cu+YjtZQN8AO1UtilFLYeQVLMJ5eXWmKA0dlOItkdpDs+9zjwssfMNpUV3kNOvj0uNgU AANJch+++gyiMMqL5/59RLCOI4D9KmFq/WQEVd9UXtAJaNjLcPBW3dPP3JQhg7Xusu/4 h0z0M4SZ1Rc0JSa8i4ax/DY6m7C7WbLWYzXpwpN776Zl1hmWP2lXG7K1oZM0WdvqZdYG mQl5Q67BWWDau39qFirFDWLMawu03OxFLHOYSda3vfjXWxtox3lgUOijsepXqPzfZmtI fq+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=CsWfxsfvAerSPER61G9/YQZJ98EgiYPHbtsxrWBY3dw=; b=Cx90hhh7+Ar7HVO2neJwsnOyWFSDdaA3aepFlqJGGDqmAf2zVJYaO2c09Qyj+00tW9 qt/mqWpVo02GgiIkZ+us6Oe5tAvb4XR2JcYFYaZreSTM2op3ZvGGkytvPRKkjRRsYgUk HukBkUeQsBDv7c15Dyg4m8kDEaLrliyLBZGuxanqDC40ushSt51LUOm4ZqQc9+20o3VT BUAJDaLgKmyN/+0YHfAEECSycrWXMGs6KDsj4dxngDygBE5wUHwa8pB17Y3aHM+5XdMY P9lrRqu4p4rHCcfYxYdP/XluDK3A4MGVVSTsIHW80lX0RayMPSw4ANJOM7LXwaUg66HW TmHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=SKfGHmKt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o124si9454595pfb.256.2019.01.07.05.04.02; Mon, 07 Jan 2019 05:04:18 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=SKfGHmKt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730489AbfAGNAy (ORCPT + 99 others); Mon, 7 Jan 2019 08:00:54 -0500 Received: from mail.kernel.org ([198.145.29.99]:48328 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730480AbfAGNAw (ORCPT ); Mon, 7 Jan 2019 08:00:52 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9BE5C2173C; Mon, 7 Jan 2019 13:00:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1546866051; bh=T+GbNDvXXAdGPmQNn7YU6TFZvOEG6J03FiP8Pb8wa0A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SKfGHmKt8ZwJDVfmfWohh3SOWwX5t/y2Azg/bWt4E0J4D0rQHZ+L+G0TaQJS8ak6R R7kHDnO+Gzj1wgnrezWIXjnnfE3q23Um07TJ8Mnn13vheayBTOgXnblDF+1d08m3qu G1N1/k0r7623iv+KZwE0+3bPSfEs5qUs/sytSqeI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Shalom Toledo , Ido Schimmel , "David S. Miller" Subject: [PATCH 4.14 029/101] mlxsw: core: Increase timeout during firmware flash process Date: Mon, 7 Jan 2019 13:32:17 +0100 Message-Id: <20190107105334.499873395@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190107105330.372621917@linuxfoundation.org> References: <20190107105330.372621917@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Shalom Toledo [ Upstream commit cf0b70e71b32137ccf9c1f3dd9fb30cbf89b4322 ] During the firmware flash process, some of the EMADs get timed out, which causes the driver to send them again with a limit of 5 retries. There are some situations in which 5 retries is not enough and the EMAD access fails. If the failed EMAD was related to the flashing process, the driver fails the flashing. The reason for these timeouts during firmware flashing is cache misses in the CPU running the firmware. In case the CPU needs to fetch instructions from the flash when a firmware is flashed, it needs to wait for the flashing to complete. Since flashing takes time, it is possible for pending EMADs to timeout. Fix by increasing EMADs' timeout while flashing firmware. Fixes: ce6ef68f433f ("mlxsw: spectrum: Implement the ethtool flash_device callback") Signed-off-by: Shalom Toledo Signed-off-by: Ido Schimmel Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/mellanox/mlxsw/core.c | 19 ++++++++++++++++++- drivers/net/ethernet/mellanox/mlxsw/core.h | 3 +++ drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 7 ++++++- 3 files changed, 27 insertions(+), 2 deletions(-) --- a/drivers/net/ethernet/mellanox/mlxsw/core.c +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c @@ -113,6 +113,7 @@ struct mlxsw_core { struct mlxsw_thermal *thermal; struct mlxsw_core_port *ports; unsigned int max_ports; + bool fw_flash_in_progress; unsigned long driver_priv[0]; /* driver_priv has to be always the last item */ }; @@ -460,12 +461,16 @@ struct mlxsw_reg_trans { struct rcu_head rcu; }; -#define MLXSW_EMAD_TIMEOUT_MS 200 +#define MLXSW_EMAD_TIMEOUT_DURING_FW_FLASH_MS 3000 +#define MLXSW_EMAD_TIMEOUT_MS 200 static void mlxsw_emad_trans_timeout_schedule(struct mlxsw_reg_trans *trans) { unsigned long timeout = msecs_to_jiffies(MLXSW_EMAD_TIMEOUT_MS); + if (trans->core->fw_flash_in_progress) + timeout = msecs_to_jiffies(MLXSW_EMAD_TIMEOUT_DURING_FW_FLASH_MS); + queue_delayed_work(trans->core->emad_wq, &trans->timeout_dw, timeout); } @@ -1791,6 +1796,18 @@ void mlxsw_core_flush_owq(void) } EXPORT_SYMBOL(mlxsw_core_flush_owq); +void mlxsw_core_fw_flash_start(struct mlxsw_core *mlxsw_core) +{ + mlxsw_core->fw_flash_in_progress = true; +} +EXPORT_SYMBOL(mlxsw_core_fw_flash_start); + +void mlxsw_core_fw_flash_end(struct mlxsw_core *mlxsw_core) +{ + mlxsw_core->fw_flash_in_progress = false; +} +EXPORT_SYMBOL(mlxsw_core_fw_flash_end); + static int __init mlxsw_core_module_init(void) { int err; --- a/drivers/net/ethernet/mellanox/mlxsw/core.h +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h @@ -312,6 +312,9 @@ struct mlxsw_driver { const struct mlxsw_config_profile *profile; }; +void mlxsw_core_fw_flash_start(struct mlxsw_core *mlxsw_core); +void mlxsw_core_fw_flash_end(struct mlxsw_core *mlxsw_core); + bool mlxsw_core_res_valid(struct mlxsw_core *mlxsw_core, enum mlxsw_res_id res_id); --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c @@ -333,8 +333,13 @@ static int mlxsw_sp_firmware_flash(struc }, .mlxsw_sp = mlxsw_sp }; + int err; - return mlxfw_firmware_flash(&mlxsw_sp_mlxfw_dev.mlxfw_dev, firmware); + mlxsw_core_fw_flash_start(mlxsw_sp->core); + err = mlxfw_firmware_flash(&mlxsw_sp_mlxfw_dev.mlxfw_dev, firmware); + mlxsw_core_fw_flash_end(mlxsw_sp->core); + + return err; } static bool mlxsw_sp_fw_rev_ge(const struct mlxsw_fw_rev *a,