Merge patch series "scsi: libsas: Some coding style fixes and cleanups"
authorMartin K. Petersen <martin.petersen@oracle.com>
Fri, 30 Dec 2022 16:59:30 +0000 (16:59 +0000)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 30 Dec 2022 16:59:30 +0000 (16:59 +0000)
Jason Yan <yanaijie@huawei.com> says:

A few coding style fixes and cleanups. There should be no functional
changes in this series besides the debug log prints.

Link: https://lore.kernel.org/r/20221214133808.1649122-1-yanaijie@huawei.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1  2 
drivers/scsi/libsas/sas_ata.c

index 1ccce706167a5b054c987f38575f65ef08494f70,13fbb862905736e8c7aacb6820382585be67a85b..9b4a9c3b58f2930f78420a47f9477f62724d6f82
@@@ -101,7 -101,7 +101,7 @@@ static void sas_ata_task_done(struct sa
  
        spin_lock_irqsave(ap->lock, flags);
        /* check if we lost the race with libata/sas_ata_post_internal() */
 -      if (unlikely(ap->pflags & ATA_PFLAG_FROZEN)) {
 +      if (unlikely(ata_port_is_frozen(ap))) {
                spin_unlock_irqrestore(ap->lock, flags);
                if (qc->scsicmd)
                        goto qc_already_gone;
@@@ -239,7 -239,17 +239,17 @@@ static struct sas_internal *dev_to_sas_
        return to_sas_internal(dev->port->ha->core.shost->transportt);
  }
  
- static int sas_get_ata_command_set(struct domain_device *dev);
+ static int sas_get_ata_command_set(struct domain_device *dev)
+ {
+       struct ata_taskfile tf;
+       if (dev->dev_type == SAS_SATA_PENDING)
+               return ATA_DEV_UNKNOWN;
+       ata_tf_from_fis(dev->frame_rcvd, &tf);
+       return ata_dev_classify(&tf);
+ }
  
  int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy)
  {
@@@ -637,20 -647,6 +647,6 @@@ void sas_ata_task_abort(struct sas_tas
        complete(waiting);
  }
  
- static int sas_get_ata_command_set(struct domain_device *dev)
- {
-       struct dev_to_host_fis *fis =
-               (struct dev_to_host_fis *) dev->frame_rcvd;
-       struct ata_taskfile tf;
-       if (dev->dev_type == SAS_SATA_PENDING)
-               return ATA_DEV_UNKNOWN;
-       ata_tf_from_fis((const u8 *)fis, &tf);
-       return ata_dev_classify(&tf);
- }
  void sas_probe_sata(struct asd_sas_port *port)
  {
        struct domain_device *dev, *n;
  
  }
  
+ int sas_ata_add_dev(struct domain_device *parent, struct ex_phy *phy,
+                   struct domain_device *child, int phy_id)
+ {
+       struct sas_rphy *rphy;
+       int ret;
+       if (child->linkrate > parent->min_linkrate) {
+               struct sas_phy *cphy = child->phy;
+               enum sas_linkrate min_prate = cphy->minimum_linkrate,
+                       parent_min_lrate = parent->min_linkrate,
+                       min_linkrate = (min_prate > parent_min_lrate) ?
+                                       parent_min_lrate : 0;
+               struct sas_phy_linkrates rates = {
+                       .maximum_linkrate = parent->min_linkrate,
+                       .minimum_linkrate = min_linkrate,
+               };
+               pr_notice("ex %016llx phy%02d SATA device linkrate > min pathway connection rate, attempting to lower device linkrate\n",
+                         SAS_ADDR(child->sas_addr), phy_id);
+               ret = sas_smp_phy_control(parent, phy_id,
+                                         PHY_FUNC_LINK_RESET, &rates);
+               if (ret) {
+                       pr_err("ex %016llx phy%02d SATA device could not set linkrate (%d)\n",
+                              SAS_ADDR(child->sas_addr), phy_id, ret);
+                       return ret;
+               }
+               pr_notice("ex %016llx phy%02d SATA device set linkrate successfully\n",
+                         SAS_ADDR(child->sas_addr), phy_id);
+               child->linkrate = child->min_linkrate;
+       }
+       ret = sas_get_ata_info(child, phy);
+       if (ret)
+               return ret;
+       sas_init_dev(child);
+       ret = sas_ata_init(child);
+       if (ret)
+               return ret;
+       rphy = sas_end_device_alloc(phy->port);
+       if (!rphy)
+               return ret;
+       rphy->identify.phy_identifier = phy_id;
+       child->rphy = rphy;
+       get_device(&rphy->dev);
+       list_add_tail(&child->disco_list_node, &parent->port->disco_list);
+       ret = sas_discover_sata(child);
+       if (ret) {
+               pr_notice("sas_discover_sata() for device %16llx at %016llx:%02d returned 0x%x\n",
+                         SAS_ADDR(child->sas_addr),
+                         SAS_ADDR(parent->sas_addr), phy_id, ret);
+               sas_rphy_free(child->rphy);
+               list_del(&child->disco_list_node);
+               return ret;
+       }
+       return 0;
+ }
  static void sas_ata_flush_pm_eh(struct asd_sas_port *port, const char *func)
  {
        struct domain_device *dev, *n;