From nobody Fri Jun 12 19:48:46 2026 Received: from canpmsgout05.his.huawei.com (canpmsgout05.his.huawei.com [113.46.200.220]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B1ED234A3BC; Wed, 13 May 2026 02:17:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=113.46.200.220 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778638637; cv=none; b=MwPhzrrbTa2tV1Q9wtNRdYikWrwk7jz0S+iBKjN2wszBLpgt1TfKjGVyCKZzV/ZVDnJB85W5xSIsQFfGDHugX21wNBREDNb25QigIZH+cY54Z+3AJ1xr6Hdp0TSsbzr/vlVKpD2y2F4tI0Kfe3FWBvvzfybYVjLbMp3+PGjUlsc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778638637; c=relaxed/simple; bh=9m/ENIaZqWIQ6DDMOEhdapqwfQ/HaJOpbfhG9bTfjio=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=V7zWzYa9hIvG4lwaJBgDRFKgGaDMJK7Ww2kjNBpKf7nWGaC7l/8SExSXqOds3iFRr0kbWJs6RtBYdsojy5bVjO3+WibMvf7lsRHo+4LJ+hoMNjv3BA4kEEPwADWlv6CxbLy/lQE/ibaVSW/DVp7vdg1UgILEa5TslDr50DVAPAg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=h-partners.com; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b=UIPbf3gD; arc=none smtp.client-ip=113.46.200.220 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=h-partners.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b="UIPbf3gD" dkim-signature: v=1; a=rsa-sha256; d=h-partners.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=w6panE/YjIew6+Ph9IC7ua2w+0qUcB9C76gBt9Re0S4=; b=UIPbf3gDvxNklvW8VFVz1rO9pUvj/daoBzQlcJ9FK7NmJhwknyANE5/fRGRJY7Ee6rCwia0Ic jZINvRjETXCt2NWcJNodBvQ3fdbATdye5GCRpHRvJHXM5Uo51bAEpzZRBACsairF0VPwdwWuWbc RDsUk7FoODdCICM9IDA7Vjs= Received: from mail.maildlp.com (unknown [172.19.162.144]) by canpmsgout05.his.huawei.com (SkyGuard) with ESMTPS id 4gFcNv0dS9z12Ln6; Wed, 13 May 2026 10:10:07 +0800 (CST) Received: from kwepemj100018.china.huawei.com (unknown [7.202.194.12]) by mail.maildlp.com (Postfix) with ESMTPS id 703834056D; Wed, 13 May 2026 10:17:12 +0800 (CST) Received: from localhost.localdomain (10.50.163.32) by kwepemj100018.china.huawei.com (7.202.194.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.36; Wed, 13 May 2026 10:17:11 +0800 From: Xingui Yang To: , , , CC: , , , , , , Subject: [PATCH v2 1/3] scsi: libsas: refactor sas_ex_to_ata() using new helper sas_ex_to_dev() Date: Wed, 13 May 2026 10:16:01 +0800 Message-ID: <20260513021603.3023329-2-yangxingui@huawei.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260513021603.3023329-1-yangxingui@huawei.com> References: <20260513021603.3023329-1-yangxingui@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemj100018.china.huawei.com (7.202.194.12) Content-Type: text/plain; charset="utf-8" The sas_ex_to_ata() function checks for an attached ATA device on an expander phy. Refactor it to use a new helper function sas_ex_to_dev() which returns any device type attached to an expander phy, improving code reuse and allowing other code paths to find attached devices regardless of type. No functional changes intended. Signed-off-by: Xingui Yang Reviewed-by: Jason Yan --- drivers/scsi/libsas/sas_expander.c | 12 ++++++++---- drivers/scsi/libsas/sas_internal.h | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_e= xpander.c index f471ab464a78..f55ae9a979cd 100644 --- a/drivers/scsi/libsas/sas_expander.c +++ b/drivers/scsi/libsas/sas_expander.c @@ -345,11 +345,9 @@ static void sas_set_ex_phy(struct domain_device *dev, = int phy_id, SAS_ADDR(phy->attached_sas_addr), type); } =20 -/* check if we have an existing attached ata device on this expander phy */ -struct domain_device *sas_ex_to_ata(struct domain_device *ex_dev, int phy_= id) +struct domain_device *sas_ex_to_dev(struct domain_device *ex_dev, int phy_= id) { struct ex_phy *ex_phy =3D &ex_dev->ex_dev.ex_phy[phy_id]; - struct domain_device *dev; struct sas_rphy *rphy; =20 if (!ex_phy->port) @@ -359,7 +357,13 @@ struct domain_device *sas_ex_to_ata(struct domain_devi= ce *ex_dev, int phy_id) if (!rphy) return NULL; =20 - dev =3D sas_find_dev_by_rphy(rphy); + return sas_find_dev_by_rphy(rphy); +} + +/* check if we have an existing attached ata device on this expander phy */ +struct domain_device *sas_ex_to_ata(struct domain_device *ex_dev, int phy_= id) +{ + struct domain_device *dev =3D sas_ex_to_dev(ex_dev, phy_id); =20 if (dev && dev_is_sata(dev)) return dev; diff --git a/drivers/scsi/libsas/sas_internal.h b/drivers/scsi/libsas/sas_i= nternal.h index 7dce0f587149..350a70484bde 100644 --- a/drivers/scsi/libsas/sas_internal.h +++ b/drivers/scsi/libsas/sas_internal.h @@ -91,6 +91,7 @@ int sas_smp_get_phy_events(struct sas_phy *phy); =20 void sas_device_set_phy(struct domain_device *dev, struct sas_port *port); struct domain_device *sas_find_dev_by_rphy(struct sas_rphy *rphy); +struct domain_device *sas_ex_to_dev(struct domain_device *ex_dev, int phy_= id); struct domain_device *sas_ex_to_ata(struct domain_device *ex_dev, int phy_= id); int sas_ex_phy_discover(struct domain_device *dev, int single); int sas_get_report_phy_sata(struct domain_device *dev, int phy_id, --=20 2.43.0 From nobody Fri Jun 12 19:48:46 2026 Received: from canpmsgout08.his.huawei.com (canpmsgout08.his.huawei.com [113.46.200.223]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 588B43EDE72; Wed, 13 May 2026 02:17:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=113.46.200.223 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778638638; cv=none; b=ttdue0XNonPpCnpeoRSJmYZtXvHWEjGDctXkmXyMkvtbeZAAZOkUdP6uwkLyZeA3PWDFP2X25e5Udup/9aPQX0Sui/jE5Zq78/u9kMp9IO1w731FTk1feNkHVCrYUw/8OmkXuaZK7x9VvacW+SQqcJlzocFoCwckSfALD6toeXs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778638638; c=relaxed/simple; bh=DNDzjMl8AcFAc3buZHjn9/7TT234oGTqAmS85EFup9w=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=m/uG6SSelX5KX22SnI09TOV1Xg6UTZdBfmdcLz7iyxzYAV1a8fs0+IhrTBrxsQG3HdrNT6WOgzrbrvsohibuoQzBA2JgSy8yC187YZpQbCrDvEqynj100OenQkgt/UEsKTgXQORD9xiF7pct8VCnqz9DlXTy5ZAyB18bKqN/nz0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=h-partners.com; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b=GGcohAte; arc=none smtp.client-ip=113.46.200.223 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=h-partners.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b="GGcohAte" dkim-signature: v=1; a=rsa-sha256; d=h-partners.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=Vh0sJqCldgiBiQHfmOvdQJDZxxML5s029KT+v0vmHpA=; b=GGcohAteVGljupp1LTNm00FvJG4EiyF/3VgHZ6ii627NlmFqkoBPhge+zTZ+ZjUbBqJT/e6CC +bMkP2OuBurTwdtVtVJli+sRBrTeHD7oReR5jY1/kd/AEkQ3vgo5wuz0a2oh7/yE+eJN/xK7eVG Sm8CHrrOLdzcVpgpDzPWtC0= Received: from mail.maildlp.com (unknown [172.19.163.163]) by canpmsgout08.his.huawei.com (SkyGuard) with ESMTPS id 4gFcNG65kPzmV8q; Wed, 13 May 2026 10:09:34 +0800 (CST) Received: from kwepemj100018.china.huawei.com (unknown [7.202.194.12]) by mail.maildlp.com (Postfix) with ESMTPS id E58F34048B; Wed, 13 May 2026 10:17:12 +0800 (CST) Received: from localhost.localdomain (10.50.163.32) by kwepemj100018.china.huawei.com (7.202.194.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.36; Wed, 13 May 2026 10:17:12 +0800 From: Xingui Yang To: , , , CC: , , , , , , Subject: [PATCH v2 2/3] scsi: libsas: add lldd_dev_info_update callback for device info changes Date: Wed, 13 May 2026 10:16:02 +0800 Message-ID: <20260513021603.3023329-3-yangxingui@huawei.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260513021603.3023329-1-yangxingui@huawei.com> References: <20260513021603.3023329-1-yangxingui@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemj100018.china.huawei.com (7.202.194.12) Content-Type: text/plain; charset="utf-8" When a device attached to an expander phy experiences a linkrate change (e.g., due to cable reconnection or negotiation), the current code in sas_rediscover_dev() treats it as "broadcast flutter" and takes no action if the SAS address and device type remain unchanged. However, for drivers like hisi_sas, the ITCT entry needs to be updated to reflect the new linkrate. Without this update, the hardware continues using stale linkrate information, which can cause performance issues or protocol errors. Introduce a new LLDD callback lldd_dev_info_update() to notify the low-level driver when a device's information changes (such as linkrate), allowing the driver to update its hardware structures accordingly. This callback is designed to be extensible for future device information updates. Signed-off-by: Xingui Yang Reviewed-by: Jason Yan --- drivers/scsi/libsas/sas_discover.c | 12 ++++++++++++ drivers/scsi/libsas/sas_expander.c | 13 +++++++++++-- drivers/scsi/libsas/sas_internal.h | 1 + include/scsi/libsas.h | 1 + 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/libsas/sas_discover.c b/drivers/scsi/libsas/sas_d= iscover.c index b07062db50b2..60be59c45508 100644 --- a/drivers/scsi/libsas/sas_discover.c +++ b/drivers/scsi/libsas/sas_discover.c @@ -204,6 +204,18 @@ void sas_notify_lldd_dev_gone(struct domain_device *de= v) } } =20 +void sas_notify_lldd_dev_info_update(struct domain_device *dev) +{ + struct sas_ha_struct *sas_ha =3D dev->port->ha; + struct Scsi_Host *shost =3D sas_ha->shost; + struct sas_internal *i =3D to_sas_internal(shost->transportt); + + if (!i->dft->lldd_dev_info_update) + return; + + i->dft->lldd_dev_info_update(dev); +} + static void sas_probe_devices(struct asd_sas_port *port) { struct domain_device *dev, *n; diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_e= xpander.c index f55ae9a979cd..11165ba585b2 100644 --- a/drivers/scsi/libsas/sas_expander.c +++ b/drivers/scsi/libsas/sas_expander.c @@ -2017,13 +2017,22 @@ static int sas_rediscover_dev(struct domain_device = *dev, int phy_id, goto out_free_resp; } else if (SAS_ADDR(sas_addr) =3D=3D SAS_ADDR(phy->attached_sas_addr) && dev_type_flutter(type, phy->attached_dev_type)) { - struct domain_device *ata_dev =3D sas_ex_to_ata(dev, phy_id); + struct domain_device *child_dev =3D sas_ex_to_dev(dev, phy_id); char *action =3D ""; =20 sas_ex_phy_discover(dev, phy_id); =20 - if (ata_dev && phy->attached_dev_type =3D=3D SAS_SATA_PENDING) + if (child_dev && dev_is_sata(child_dev) && + phy->attached_dev_type =3D=3D SAS_SATA_PENDING) { action =3D ", needs recovery"; + } else if (child_dev && child_dev->linkrate !=3D phy->linkrate) { + pr_debug("ex %016llx phy%02d linkrate changed: %d -> %d\n", + SAS_ADDR(dev->sas_addr), phy_id, + child_dev->linkrate, phy->linkrate); + child_dev->linkrate =3D phy->linkrate; + sas_notify_lldd_dev_info_update(child_dev); + } + pr_debug("ex %016llx phy%02d broadcast flutter%s\n", SAS_ADDR(dev->sas_addr), phy_id, action); goto out_free_resp; diff --git a/drivers/scsi/libsas/sas_internal.h b/drivers/scsi/libsas/sas_i= nternal.h index 350a70484bde..9ee37b8abd78 100644 --- a/drivers/scsi/libsas/sas_internal.h +++ b/drivers/scsi/libsas/sas_internal.h @@ -82,6 +82,7 @@ bool sas_queue_work(struct sas_ha_struct *ha, struct sas_= work *sw); =20 int sas_notify_lldd_dev_found(struct domain_device *); void sas_notify_lldd_dev_gone(struct domain_device *); +void sas_notify_lldd_dev_info_update(struct domain_device *dev); =20 void sas_smp_handler(struct bsg_job *job, struct Scsi_Host *shost, struct sas_rphy *rphy); diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h index 163f23c92b41..973b4445b7e0 100644 --- a/include/scsi/libsas.h +++ b/include/scsi/libsas.h @@ -674,6 +674,7 @@ struct sas_domain_function_template { /* GPIO support */ int (*lldd_write_gpio)(struct sas_ha_struct *, u8 reg_type, u8 reg_index, u8 reg_count, u8 *write_data); + void (*lldd_dev_info_update)(struct domain_device *dev); }; =20 extern int sas_register_ha(struct sas_ha_struct *); --=20 2.43.0 From nobody Fri Jun 12 19:48:46 2026 Received: from canpmsgout04.his.huawei.com (canpmsgout04.his.huawei.com [113.46.200.219]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8ED4F37DAA3; Wed, 13 May 2026 02:17:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=113.46.200.219 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778638637; cv=none; b=IOj/Lnt8qrBCVuyDnlrUhSIN6PpsAYUcU3EO5ThJb853sIrRv+80fApTjF54DP0ZMTTTR/T2bW+0ZlL0W7cInnqdNSckq3BBtShhohkX0W75Uea4Qa80zfCOnzZvW1yuy3I+LMb0hgY8S6yNKu1XFBlMCs9DXD2TfWoSILZYIYI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778638637; c=relaxed/simple; bh=y7AN/kjfIaDUjAs68wyzm8U1nSM+wxtEywdyuxi9noo=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kvNs0uQTWzajF6krSBiC4PJ311o8Nef2IeSI+VbMSqhcwOUw8felhY+Nd1P6b7H5fOqXdqUYlLFeob3bQT9eGG5WPVzrWg9MSzIUl3ssTMTxPvhTYpLLNftGBwEcP72C4UdMne3HBVCge4dY7XtAOUzI9RPofCUuFTj32MF6PpU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=h-partners.com; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b=O+zTUc5G; arc=none smtp.client-ip=113.46.200.219 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=h-partners.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b="O+zTUc5G" dkim-signature: v=1; a=rsa-sha256; d=h-partners.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=0aZ6fiaSRIdI1DR6jHyD3+VcENmT7D4KK2+OhAb5Hwg=; b=O+zTUc5GADoz6ZI6e2Zclokk0JOMcVwpLJzJSAxHmj30pU76p2x9c+vYqScWMYD8uhrgKU72X r5EgfcDNYrJNgeRs/baJnBkxRlWHQD8NGPjwLPc4hk8OGob1dz7WfM/kc9Ewf6khX94o3aRT2gI rHo/y3+K7F+1mmQaqi61T1g= Received: from mail.maildlp.com (unknown [172.19.162.144]) by canpmsgout04.his.huawei.com (SkyGuard) with ESMTPS id 4gFcNF6Lnfz1prm1; Wed, 13 May 2026 10:09:33 +0800 (CST) Received: from kwepemj100018.china.huawei.com (unknown [7.202.194.12]) by mail.maildlp.com (Postfix) with ESMTPS id 53B464056D; Wed, 13 May 2026 10:17:13 +0800 (CST) Received: from localhost.localdomain (10.50.163.32) by kwepemj100018.china.huawei.com (7.202.194.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.36; Wed, 13 May 2026 10:17:12 +0800 From: Xingui Yang To: , , , CC: , , , , , , Subject: [PATCH v2 3/3] scsi: hisi_sas: add support for dev info update notification Date: Wed, 13 May 2026 10:16:03 +0800 Message-ID: <20260513021603.3023329-4-yangxingui@huawei.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260513021603.3023329-1-yangxingui@huawei.com> References: <20260513021603.3023329-1-yangxingui@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemj100018.china.huawei.com (7.202.194.12) Content-Type: text/plain; charset="utf-8" Implement the lldd_dev_info_update callback for hisi_sas driver. When a device's information changes (such as linkrate), clear the old ITCT entry and setup a new one to reflect the new settings. This ensures the hardware uses the correct information after events like cable reconnection or renegotiation. Signed-off-by: Xingui Yang Reviewed-by: Jason Yan --- drivers/scsi/hisi_sas/hisi_sas_main.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/= hisi_sas_main.c index 944ce19ae2fc..095960aef6d8 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -900,6 +900,21 @@ static int hisi_sas_dev_found(struct domain_device *de= vice) return rc; } =20 +static void hisi_sas_dev_info_update(struct domain_device *device) +{ + struct hisi_hba *hisi_hba =3D dev_to_hisi_hba(device); + struct hisi_sas_device *sas_dev =3D device->lldd_dev; + struct device *dev =3D hisi_hba->dev; + + if (!sas_dev) + return; + + dev_info(dev, "update itct for device %016llx\n", + SAS_ADDR(device->sas_addr)); + hisi_hba->hw->clear_itct(hisi_hba, sas_dev); + hisi_hba->hw->setup_itct(hisi_hba, sas_dev); +} + int hisi_sas_sdev_configure(struct scsi_device *sdev, struct queue_limits = *lim) { struct domain_device *dev =3D sdev_to_domain_dev(sdev); @@ -2168,6 +2183,7 @@ EXPORT_SYMBOL_GPL(hisi_sas_stt); static struct sas_domain_function_template hisi_sas_transport_ops =3D { .lldd_dev_found =3D hisi_sas_dev_found, .lldd_dev_gone =3D hisi_sas_dev_gone, + .lldd_dev_info_update =3D hisi_sas_dev_info_update, .lldd_execute_task =3D hisi_sas_queue_command, .lldd_control_phy =3D hisi_sas_control_phy, .lldd_abort_task =3D hisi_sas_abort_task, --=20 2.43.0