Merge patch series "libsas cleanups"

Damien Le Moal <dlemoal@kernel.org> says:

Martin, John,

While debugging an issue with the pm8001 driver, I generated these
cleanup patches. No functional changes overall.

These patches are against the 6.17/scsi-staging branch of the scsi tree.

Link: https://lore.kernel.org/r/20250725015818.171252-1-dlemoal@kernel.org
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Martin K. Petersen 2025-07-25 09:05:23 -04:00
commit 7038db7033
6 changed files with 101 additions and 99 deletions

View file

@ -252,7 +252,7 @@ static int sas_get_ata_command_set(struct domain_device *dev)
return ata_dev_classify(&tf);
}
int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy)
static int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy)
{
if (phy->attached_tproto & SAS_PROTOCOL_STP)
dev->tproto = phy->attached_tproto;
@ -927,13 +927,7 @@ EXPORT_SYMBOL_GPL(sas_ata_schedule_reset);
void sas_ata_wait_eh(struct domain_device *dev)
{
struct ata_port *ap;
if (!dev_is_sata(dev))
return;
ap = dev->sata_dev.ap;
ata_port_wait_eh(ap);
ata_port_wait_eh(dev->sata_dev.ap);
}
void sas_ata_device_link_abort(struct domain_device *device, bool force_reset)

View file

@ -406,7 +406,7 @@ void sas_unregister_dev(struct asd_sas_port *port, struct domain_device *dev)
}
}
void sas_unregister_domain_devices(struct asd_sas_port *port, int gone)
void sas_unregister_domain_devices(struct asd_sas_port *port, bool gone)
{
struct domain_device *dev, *n;

View file

@ -44,7 +44,7 @@ void sas_hash_addr(u8 *hashed, const u8 *sas_addr);
int sas_discover_root_expander(struct domain_device *dev);
int sas_ex_revalidate_domain(struct domain_device *dev);
void sas_unregister_domain_devices(struct asd_sas_port *port, int gone);
void sas_unregister_domain_devices(struct asd_sas_port *port, bool gone);
void sas_init_disc(struct sas_discovery *disc, struct asd_sas_port *port);
void sas_discover_event(struct asd_sas_port *port, enum discover_event ev);
@ -70,7 +70,7 @@ void sas_enable_revalidation(struct sas_ha_struct *ha);
void sas_queue_deferred_work(struct sas_ha_struct *ha);
void __sas_drain_work(struct sas_ha_struct *ha);
void sas_deform_port(struct asd_sas_phy *phy, int gone);
void sas_deform_port(struct asd_sas_phy *phy, bool gone);
void sas_porte_bytes_dmaed(struct work_struct *work);
void sas_porte_broadcast_rcvd(struct work_struct *work);
@ -222,4 +222,78 @@ static inline void sas_put_device(struct domain_device *dev)
kref_put(&dev->kref, sas_free_device);
}
#ifdef CONFIG_SCSI_SAS_ATA
int sas_ata_init(struct domain_device *dev);
void sas_ata_task_abort(struct sas_task *task);
int sas_discover_sata(struct domain_device *dev);
int sas_ata_add_dev(struct domain_device *parent, struct ex_phy *phy,
struct domain_device *child, int phy_id);
void sas_ata_strategy_handler(struct Scsi_Host *shost);
void sas_ata_eh(struct Scsi_Host *shost, struct list_head *work_q);
void sas_ata_end_eh(struct ata_port *ap);
void sas_ata_wait_eh(struct domain_device *dev);
void sas_probe_sata(struct asd_sas_port *port);
void sas_suspend_sata(struct asd_sas_port *port);
void sas_resume_sata(struct asd_sas_port *port);
#else
static inline int sas_ata_init(struct domain_device *dev)
{
return 0;
}
static inline void sas_ata_task_abort(struct sas_task *task)
{
}
static inline void sas_ata_strategy_handler(struct Scsi_Host *shost)
{
}
static inline void sas_ata_eh(struct Scsi_Host *shost, struct list_head *work_q)
{
}
static inline void sas_ata_end_eh(struct ata_port *ap)
{
}
static inline void sas_ata_wait_eh(struct domain_device *dev)
{
}
static inline void sas_probe_sata(struct asd_sas_port *port)
{
}
static inline void sas_suspend_sata(struct asd_sas_port *port)
{
}
static inline void sas_resume_sata(struct asd_sas_port *port)
{
}
static inline void sas_ata_disabled_notice(void)
{
pr_notice_once("ATA device seen but CONFIG_SCSI_SAS_ATA=N\n");
}
static inline int sas_discover_sata(struct domain_device *dev)
{
sas_ata_disabled_notice();
return -ENXIO;
}
static inline int sas_ata_add_dev(struct domain_device *parent, struct ex_phy *phy,
struct domain_device *child, int phy_id)
{
sas_ata_disabled_notice();
return -ENODEV;
}
#endif
#endif /* _SAS_INTERNAL_H_ */

View file

@ -20,7 +20,7 @@ static void sas_phye_loss_of_signal(struct work_struct *work)
struct asd_sas_phy *phy = ev->phy;
phy->error = 0;
sas_deform_port(phy, 1);
sas_deform_port(phy, true);
}
static void sas_phye_oob_done(struct work_struct *work)
@ -40,7 +40,7 @@ static void sas_phye_oob_error(struct work_struct *work)
struct sas_internal *i =
to_sas_internal(sas_ha->shost->transportt);
sas_deform_port(phy, 1);
sas_deform_port(phy, true);
if (!port && phy->enabled && i->dft->lldd_control_phy) {
phy->error++;
@ -85,7 +85,7 @@ static void sas_phye_resume_timeout(struct work_struct *work)
phy->error = 0;
phy->suspended = 0;
sas_deform_port(phy, 1);
sas_deform_port(phy, true);
}

View file

@ -113,7 +113,7 @@ static void sas_form_port(struct asd_sas_phy *phy)
if (port) {
if (!phy_is_wideport_member(port, phy))
sas_deform_port(phy, 0);
sas_deform_port(phy, false);
else if (phy->suspended) {
phy->suspended = 0;
sas_resume_port(phy);
@ -206,7 +206,7 @@ static void sas_form_port(struct asd_sas_phy *phy)
* This is called when the physical link to the other phy has been
* lost (on this phy), in Event thread context. We cannot delay here.
*/
void sas_deform_port(struct asd_sas_phy *phy, int gone)
void sas_deform_port(struct asd_sas_phy *phy, bool gone)
{
struct sas_ha_struct *sas_ha = phy->ha;
struct asd_sas_port *port = phy->port;
@ -301,7 +301,7 @@ void sas_porte_link_reset_err(struct work_struct *work)
struct asd_sas_event *ev = to_asd_sas_event(work);
struct asd_sas_phy *phy = ev->phy;
sas_deform_port(phy, 1);
sas_deform_port(phy, true);
}
void sas_porte_timer_event(struct work_struct *work)
@ -309,7 +309,7 @@ void sas_porte_timer_event(struct work_struct *work)
struct asd_sas_event *ev = to_asd_sas_event(work);
struct asd_sas_phy *phy = ev->phy;
sas_deform_port(phy, 1);
sas_deform_port(phy, true);
}
void sas_porte_hard_reset(struct work_struct *work)
@ -317,7 +317,7 @@ void sas_porte_hard_reset(struct work_struct *work)
struct asd_sas_event *ev = to_asd_sas_event(work);
struct asd_sas_phy *phy = ev->phy;
sas_deform_port(phy, 1);
sas_deform_port(phy, true);
}
/* ---------- SAS port registration ---------- */
@ -358,8 +358,7 @@ void sas_unregister_ports(struct sas_ha_struct *sas_ha)
for (i = 0; i < sas_ha->num_phys; i++)
if (sas_ha->sas_phy[i]->port)
sas_deform_port(sas_ha->sas_phy[i], 0);
sas_deform_port(sas_ha->sas_phy[i], false);
}
const work_func_t sas_port_event_fns[PORT_NUM_EVENTS] = {

View file

@ -15,89 +15,37 @@
#ifdef CONFIG_SCSI_SAS_ATA
static inline int dev_is_sata(struct domain_device *dev)
static inline bool dev_is_sata(struct domain_device *dev)
{
return dev->dev_type == SAS_SATA_DEV || dev->dev_type == SAS_SATA_PM ||
dev->dev_type == SAS_SATA_PM_PORT || dev->dev_type == SAS_SATA_PENDING;
switch (dev->dev_type) {
case SAS_SATA_DEV:
case SAS_SATA_PENDING:
case SAS_SATA_PM:
case SAS_SATA_PM_PORT:
return true;
default:
return false;
}
}
int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy);
int sas_ata_init(struct domain_device *dev);
void sas_ata_task_abort(struct sas_task *task);
void sas_ata_strategy_handler(struct Scsi_Host *shost);
void sas_ata_eh(struct Scsi_Host *shost, struct list_head *work_q);
void sas_ata_schedule_reset(struct domain_device *dev);
void sas_ata_wait_eh(struct domain_device *dev);
void sas_probe_sata(struct asd_sas_port *port);
void sas_suspend_sata(struct asd_sas_port *port);
void sas_resume_sata(struct asd_sas_port *port);
void sas_ata_end_eh(struct ata_port *ap);
void sas_ata_device_link_abort(struct domain_device *dev, bool force_reset);
int sas_execute_ata_cmd(struct domain_device *device, u8 *fis,
int force_phy_id);
int sas_execute_ata_cmd(struct domain_device *device, u8 *fis, int force_phy_id);
int smp_ata_check_ready_type(struct ata_link *link);
int sas_discover_sata(struct domain_device *dev);
int sas_ata_add_dev(struct domain_device *parent, struct ex_phy *phy,
struct domain_device *child, int phy_id);
extern const struct attribute_group sas_ata_sdev_attr_group;
#else
static inline void sas_ata_disabled_notice(void)
{
pr_notice_once("ATA device seen but CONFIG_SCSI_SAS_ATA=N\n");
}
static inline int dev_is_sata(struct domain_device *dev)
{
return 0;
}
static inline int sas_ata_init(struct domain_device *dev)
{
return 0;
}
static inline void sas_ata_task_abort(struct sas_task *task)
{
}
static inline void sas_ata_strategy_handler(struct Scsi_Host *shost)
{
}
static inline void sas_ata_eh(struct Scsi_Host *shost, struct list_head *work_q)
static inline bool dev_is_sata(struct domain_device *dev)
{
return false;
}
static inline void sas_ata_schedule_reset(struct domain_device *dev)
{
}
static inline void sas_ata_wait_eh(struct domain_device *dev)
{
}
static inline void sas_probe_sata(struct asd_sas_port *port)
{
}
static inline void sas_suspend_sata(struct asd_sas_port *port)
{
}
static inline void sas_resume_sata(struct asd_sas_port *port)
{
}
static inline int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy)
{
return 0;
}
static inline void sas_ata_end_eh(struct ata_port *ap)
{
}
static inline void sas_ata_device_link_abort(struct domain_device *dev,
bool force_reset)
{
@ -114,19 +62,6 @@ static inline int smp_ata_check_ready_type(struct ata_link *link)
return 0;
}
static inline int sas_discover_sata(struct domain_device *dev)
{
sas_ata_disabled_notice();
return -ENXIO;
}
static inline int sas_ata_add_dev(struct domain_device *parent, struct ex_phy *phy,
struct domain_device *child, int phy_id)
{
sas_ata_disabled_notice();
return -ENODEV;
}
#define sas_ata_sdev_attr_group ((struct attribute_group) {})
#endif