Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp995369yba; Thu, 4 Apr 2019 02:01:38 -0700 (PDT) X-Google-Smtp-Source: APXvYqyfeF7qGUM2igYPDXYWfu+54jECiD4Pr5ye3Yn2Fmna3RnEWq7O0gqHxY8Gex7dUMx50TDz X-Received: by 2002:a65:6107:: with SMTP id z7mr4617860pgu.313.1554368498379; Thu, 04 Apr 2019 02:01:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554368498; cv=none; d=google.com; s=arc-20160816; b=vnl9COiivfXSENAYBZBSUf2ZP/kYeFyX4smQOzhp/FdPnoXl6nM+M9ZMlNGE930Sjd jiQBn6aTbYolOHA+H4L1JvSJ/+bmYInldppBcj5BC32KSbro3Ze7ojeS0nGLdS5oBdmB IkeDlSW9ZoFIsYiXm5tbJRftZo268GRHKIBddo4V7Yd6Tqyz5KpzVjnWrKL/VzTBi7VT EijVls7kt3tpRrCj/lfl4lgIcbH0CQ+4ii2d+wOKy7FyjLffFBOHQjB7rGBZW8zEC2YK kB3ccDiSPjH0iT+jsqF+W0sMqghivrLjdfKza3VWtMGhWrSd7F/xKlzIee774HLO20U8 9OsA== 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=QPOsF2Q1vuHpg+X89e3CdVvjhOqgTIwd9afkZ28dN0I=; b=ZndXcZeG+gwYvtOg3Q9EHDzXdkyGP1ux9zTIDUN5YUoVvy2OrfHdcpEnCH+60B0TM0 ReaXr645lcqJfD3DT36tca67FJ/67UWfgBVxmAB07nTlYItayOGdTYtfMtho7D7iZznc hKPnyTivHOZ0m66cqeHuweqoN9ncTuzuh+It/kOuzsvm5IZ5VbJ3xaRbgSUyfcc0RUW0 EbS4H/l8kt5d93H7FjEzgcLn+8MqsVsr4Q+WQVr2AvJ9CX3DnBvBaRigOMEsGf53a4DB 3cAcUiqVyaidLK2p+J77JG1h/x4bybi5ER0qU6AglDSHzR1pDh1G4SSRWY3bC5bSg/VB POVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=jQwe6xrh; 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 j187si16421099pfc.251.2019.04.04.02.01.22; Thu, 04 Apr 2019 02:01:38 -0700 (PDT) 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=jQwe6xrh; 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 S1729248AbfDDJAv (ORCPT + 99 others); Thu, 4 Apr 2019 05:00:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:37680 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731300AbfDDJAs (ORCPT ); Thu, 4 Apr 2019 05:00:48 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.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 43F0321855; Thu, 4 Apr 2019 09:00:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554368447; bh=qWevxc1nSbbuFpapfW3dmvkK6GZ7vAYk+0BfaiYiDH4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jQwe6xrhEi256gVCMMCYXEYE8VmqDiOZBRujQS5FewhonLBusbvx3wLslHb9Xw84v N6+ZMKlmZ2U+14N6Lf/niVIt3SuvhUrIGNopti6rhvZpYhvUGkDElCVw5asMuUfSeS z22dhoTWC4c5LQCZkArm+Upm/4wIgFFD75Qxggg4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, John Garry , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 4.19 018/187] scsi: hisi_sas: Set PHY linkrate when disconnected Date: Thu, 4 Apr 2019 10:45:55 +0200 Message-Id: <20190404084603.951238295@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190404084603.119654039@linuxfoundation.org> References: <20190404084603.119654039@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.19-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit efdcad62e7b8a02fcccc5ccca57806dce1482ac8 ] When the PHY comes down, we currently do not set the negotiated linkrate: root@(none)$ pwd /sys/class/sas_phy/phy-0:0 root@(none)$ more enable 1 root@(none)$ more negotiated_linkrate 12.0 Gbit root@(none)$ echo 0 > enable root@(none)$ more negotiated_linkrate 12.0 Gbit root@(none)$ This patch fixes the driver code to set it properly when the PHY comes down. If the PHY had been enabled, then set unknown; otherwise, flag as disabled. The logical place to set the negotiated linkrate for this scenario is PHY down routine, which is called from the PHY down ISR. However, it is not possible to know if the PHY comes down due to PHY disable or loss of link, as sas_phy.enabled member is not set until after the transport disable routine is complete, which races with the PHY down ISR. As an imperfect solution, use sas_phy_data.enable as the flag to know if the PHY is down due to disable. It's imperfect, as sas_phy_data is internal to libsas. I can't see another way without adding a new field to hisi_sas_phy and managing it, or changing SCSI SAS transport. Signed-off-by: John Garry Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/hisi_sas/hisi_sas_main.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c index a4e2e6aa9a6b..c25f3a9b0b9f 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -10,6 +10,7 @@ */ #include "hisi_sas.h" +#include "../libsas/sas_internal.h" #define DRV_NAME "hisi_sas" #define DEV_IS_GONE(dev) \ @@ -1879,9 +1880,18 @@ static int hisi_sas_write_gpio(struct sas_ha_struct *sha, u8 reg_type, static void hisi_sas_phy_disconnected(struct hisi_sas_phy *phy) { + struct asd_sas_phy *sas_phy = &phy->sas_phy; + struct sas_phy *sphy = sas_phy->phy; + struct sas_phy_data *d = sphy->hostdata; + phy->phy_attached = 0; phy->phy_type = 0; phy->port = NULL; + + if (d->enable) + sphy->negotiated_linkrate = SAS_LINK_RATE_UNKNOWN; + else + sphy->negotiated_linkrate = SAS_PHY_DISABLED; } void hisi_sas_phy_down(struct hisi_hba *hisi_hba, int phy_no, int rdy) -- 2.19.1