Loading drivers/ata/ahci.c +20 −6 Original line number Diff line number Diff line Loading @@ -429,7 +429,6 @@ static const struct pci_device_id ahci_pci_tbl[] = { { PCI_VDEVICE(INTEL, 0x02d7), board_ahci_pcs_quirk }, /* Comet Lake PCH RAID */ /* Elkhart Lake IDs 0x4b60 & 0x4b62 https://sata-io.org/product/8803 not tested yet */ { PCI_VDEVICE(INTEL, 0x4b63), board_ahci_pcs_quirk }, /* Elkhart Lake AHCI */ { PCI_VDEVICE(INTEL, 0x7ae2), board_ahci_pcs_quirk }, /* Alder Lake-P AHCI */ /* JMicron 360/1/3/5/6, match class to avoid IDE function */ { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, Loading Loading @@ -1736,6 +1735,14 @@ static void ahci_update_initial_lpm_policy(struct ata_port *ap) if (ap->pflags & ATA_PFLAG_EXTERNAL) return; /* If no LPM states are supported by the HBA, do not bother with LPM */ if ((ap->host->flags & ATA_HOST_NO_PART) && (ap->host->flags & ATA_HOST_NO_SSC) && (ap->host->flags & ATA_HOST_NO_DEVSLP)) { ata_port_dbg(ap, "no LPM states supported, not enabling LPM\n"); return; } /* user modified policy via module param */ if (mobile_lpm_policy != -1) { policy = mobile_lpm_policy; Loading Loading @@ -1968,8 +1975,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map)); host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports); if (!host) return -ENOMEM; if (!host) { rc = -ENOMEM; goto err_rm_sysfs_file; } host->private_data = hpriv; if (ahci_init_msi(pdev, n_ports, hpriv) < 0) { Loading Loading @@ -2024,11 +2033,11 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) /* initialize adapter */ rc = ahci_configure_dma_masks(pdev, hpriv); if (rc) return rc; goto err_rm_sysfs_file; rc = ahci_pci_reset_controller(host); if (rc) return rc; goto err_rm_sysfs_file; ahci_pci_init_controller(host); ahci_pci_print_info(host); Loading @@ -2037,10 +2046,15 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) rc = ahci_host_activate(host, &ahci_sht); if (rc) return rc; goto err_rm_sysfs_file; pm_runtime_put_noidle(&pdev->dev); return 0; err_rm_sysfs_file: sysfs_remove_file_from_group(&pdev->dev.kobj, &dev_attr_remapped_nvme.attr, NULL); return rc; } static void ahci_shutdown_one(struct pci_dev *pdev) Loading drivers/ata/libata-core.c +26 −13 Original line number Diff line number Diff line Loading @@ -4136,8 +4136,8 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { { "PIONEER BD-RW BDR-207M", NULL, ATA_HORKAGE_NOLPM }, { "PIONEER BD-RW BDR-205", NULL, ATA_HORKAGE_NOLPM }, /* Crucial BX100 SSD 500GB has broken LPM support */ { "CT500BX100SSD1", NULL, ATA_HORKAGE_NOLPM }, /* Crucial devices with broken LPM support */ { "CT*0BX*00SSD1", NULL, ATA_HORKAGE_NOLPM }, /* 512GB MX100 with MU01 firmware has both queued TRIM and LPM issues */ { "Crucial_CT512MX100*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM | Loading @@ -4155,6 +4155,12 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { ATA_HORKAGE_ZERO_AFTER_TRIM | ATA_HORKAGE_NOLPM }, /* AMD Radeon devices with broken LPM support */ { "R3SL240G", NULL, ATA_HORKAGE_NOLPM }, /* Apacer models with LPM issues */ { "Apacer AS340*", NULL, ATA_HORKAGE_NOLPM }, /* These specific Samsung models/firmware-revs do not handle LPM well */ { "SAMSUNG MZMPC128HBFU-000MV", "CXM14M1Q", ATA_HORKAGE_NOLPM }, { "SAMSUNG SSD PM830 mSATA *", "CXM13D1Q", ATA_HORKAGE_NOLPM }, Loading Loading @@ -5491,6 +5497,18 @@ struct ata_port *ata_port_alloc(struct ata_host *host) return ap; } void ata_port_free(struct ata_port *ap) { if (!ap) return; kfree(ap->pmp_link); kfree(ap->slave_link); kfree(ap->ncq_sense_buf); kfree(ap); } EXPORT_SYMBOL_GPL(ata_port_free); static void ata_devres_release(struct device *gendev, void *res) { struct ata_host *host = dev_get_drvdata(gendev); Loading @@ -5517,12 +5535,7 @@ static void ata_host_release(struct kref *kref) int i; for (i = 0; i < host->n_ports; i++) { struct ata_port *ap = host->ports[i]; kfree(ap->pmp_link); kfree(ap->slave_link); kfree(ap->ncq_sense_buf); kfree(ap); ata_port_free(host->ports[i]); host->ports[i] = NULL; } kfree(host); Loading Loading @@ -5572,8 +5585,10 @@ struct ata_host *ata_host_alloc(struct device *dev, int max_ports) if (!host) return NULL; if (!devres_open_group(dev, NULL, GFP_KERNEL)) goto err_free; if (!devres_open_group(dev, NULL, GFP_KERNEL)) { kfree(host); return NULL; } dr = devres_alloc(ata_devres_release, 0, GFP_KERNEL); if (!dr) Loading Loading @@ -5605,8 +5620,6 @@ struct ata_host *ata_host_alloc(struct device *dev, int max_ports) err_out: devres_release_group(dev, NULL); err_free: kfree(host); return NULL; } EXPORT_SYMBOL_GPL(ata_host_alloc); Loading Loading @@ -5905,7 +5918,7 @@ int ata_host_register(struct ata_host *host, const struct scsi_host_template *sh * allocation time. */ for (i = host->n_ports; host->ports[i]; i++) kfree(host->ports[i]); ata_port_free(host->ports[i]); /* give ports names and add SCSI hosts */ for (i = 0; i < host->n_ports; i++) { Loading drivers/ata/libata-scsi.c +4 −4 Original line number Diff line number Diff line Loading @@ -1864,11 +1864,11 @@ static unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf) 2 }; /* set scsi removable (RMB) bit per ata bit, or if the * AHCI port says it's external (Hotplug-capable, eSATA). /* * Set the SCSI Removable Media Bit (RMB) if the ATA removable media * device bit (obsolete since ATA-8 ACS) is set. */ if (ata_id_removable(args->id) || (args->dev->link->ap->pflags & ATA_PFLAG_EXTERNAL)) if (ata_id_removable(args->id)) hdr[1] |= (1 << 7); if (args->dev->class == ATA_DEV_ZAC) { Loading drivers/ata/pata_macio.c +6 −3 Original line number Diff line number Diff line Loading @@ -915,10 +915,13 @@ static const struct scsi_host_template pata_macio_sht = { .sg_tablesize = MAX_DCMDS, /* We may not need that strict one */ .dma_boundary = ATA_DMA_BOUNDARY, /* Not sure what the real max is but we know it's less than 64K, let's * use 64K minus 256 /* * The SCSI core requires the segment size to cover at least a page, so * for 64K page size kernels this must be at least 64K. However the * hardware can't handle 64K, so pata_macio_qc_prep() will split large * requests. */ .max_segment_size = MAX_DBDMA_SEG, .max_segment_size = SZ_64K, .device_configure = pata_macio_device_configure, .sdev_groups = ata_common_sdev_groups, .can_queue = ATA_DEF_QUEUE, Loading drivers/scsi/libsas/sas_ata.c +3 −3 Original line number Diff line number Diff line Loading @@ -610,15 +610,15 @@ int sas_ata_init(struct domain_device *found_dev) rc = ata_sas_tport_add(ata_host->dev, ap); if (rc) goto destroy_port; goto free_port; found_dev->sata_dev.ata_host = ata_host; found_dev->sata_dev.ap = ap; return 0; destroy_port: kfree(ap); free_port: ata_port_free(ap); free_host: ata_host_put(ata_host); return rc; Loading Loading
drivers/ata/ahci.c +20 −6 Original line number Diff line number Diff line Loading @@ -429,7 +429,6 @@ static const struct pci_device_id ahci_pci_tbl[] = { { PCI_VDEVICE(INTEL, 0x02d7), board_ahci_pcs_quirk }, /* Comet Lake PCH RAID */ /* Elkhart Lake IDs 0x4b60 & 0x4b62 https://sata-io.org/product/8803 not tested yet */ { PCI_VDEVICE(INTEL, 0x4b63), board_ahci_pcs_quirk }, /* Elkhart Lake AHCI */ { PCI_VDEVICE(INTEL, 0x7ae2), board_ahci_pcs_quirk }, /* Alder Lake-P AHCI */ /* JMicron 360/1/3/5/6, match class to avoid IDE function */ { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, Loading Loading @@ -1736,6 +1735,14 @@ static void ahci_update_initial_lpm_policy(struct ata_port *ap) if (ap->pflags & ATA_PFLAG_EXTERNAL) return; /* If no LPM states are supported by the HBA, do not bother with LPM */ if ((ap->host->flags & ATA_HOST_NO_PART) && (ap->host->flags & ATA_HOST_NO_SSC) && (ap->host->flags & ATA_HOST_NO_DEVSLP)) { ata_port_dbg(ap, "no LPM states supported, not enabling LPM\n"); return; } /* user modified policy via module param */ if (mobile_lpm_policy != -1) { policy = mobile_lpm_policy; Loading Loading @@ -1968,8 +1975,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map)); host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports); if (!host) return -ENOMEM; if (!host) { rc = -ENOMEM; goto err_rm_sysfs_file; } host->private_data = hpriv; if (ahci_init_msi(pdev, n_ports, hpriv) < 0) { Loading Loading @@ -2024,11 +2033,11 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) /* initialize adapter */ rc = ahci_configure_dma_masks(pdev, hpriv); if (rc) return rc; goto err_rm_sysfs_file; rc = ahci_pci_reset_controller(host); if (rc) return rc; goto err_rm_sysfs_file; ahci_pci_init_controller(host); ahci_pci_print_info(host); Loading @@ -2037,10 +2046,15 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) rc = ahci_host_activate(host, &ahci_sht); if (rc) return rc; goto err_rm_sysfs_file; pm_runtime_put_noidle(&pdev->dev); return 0; err_rm_sysfs_file: sysfs_remove_file_from_group(&pdev->dev.kobj, &dev_attr_remapped_nvme.attr, NULL); return rc; } static void ahci_shutdown_one(struct pci_dev *pdev) Loading
drivers/ata/libata-core.c +26 −13 Original line number Diff line number Diff line Loading @@ -4136,8 +4136,8 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { { "PIONEER BD-RW BDR-207M", NULL, ATA_HORKAGE_NOLPM }, { "PIONEER BD-RW BDR-205", NULL, ATA_HORKAGE_NOLPM }, /* Crucial BX100 SSD 500GB has broken LPM support */ { "CT500BX100SSD1", NULL, ATA_HORKAGE_NOLPM }, /* Crucial devices with broken LPM support */ { "CT*0BX*00SSD1", NULL, ATA_HORKAGE_NOLPM }, /* 512GB MX100 with MU01 firmware has both queued TRIM and LPM issues */ { "Crucial_CT512MX100*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM | Loading @@ -4155,6 +4155,12 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { ATA_HORKAGE_ZERO_AFTER_TRIM | ATA_HORKAGE_NOLPM }, /* AMD Radeon devices with broken LPM support */ { "R3SL240G", NULL, ATA_HORKAGE_NOLPM }, /* Apacer models with LPM issues */ { "Apacer AS340*", NULL, ATA_HORKAGE_NOLPM }, /* These specific Samsung models/firmware-revs do not handle LPM well */ { "SAMSUNG MZMPC128HBFU-000MV", "CXM14M1Q", ATA_HORKAGE_NOLPM }, { "SAMSUNG SSD PM830 mSATA *", "CXM13D1Q", ATA_HORKAGE_NOLPM }, Loading Loading @@ -5491,6 +5497,18 @@ struct ata_port *ata_port_alloc(struct ata_host *host) return ap; } void ata_port_free(struct ata_port *ap) { if (!ap) return; kfree(ap->pmp_link); kfree(ap->slave_link); kfree(ap->ncq_sense_buf); kfree(ap); } EXPORT_SYMBOL_GPL(ata_port_free); static void ata_devres_release(struct device *gendev, void *res) { struct ata_host *host = dev_get_drvdata(gendev); Loading @@ -5517,12 +5535,7 @@ static void ata_host_release(struct kref *kref) int i; for (i = 0; i < host->n_ports; i++) { struct ata_port *ap = host->ports[i]; kfree(ap->pmp_link); kfree(ap->slave_link); kfree(ap->ncq_sense_buf); kfree(ap); ata_port_free(host->ports[i]); host->ports[i] = NULL; } kfree(host); Loading Loading @@ -5572,8 +5585,10 @@ struct ata_host *ata_host_alloc(struct device *dev, int max_ports) if (!host) return NULL; if (!devres_open_group(dev, NULL, GFP_KERNEL)) goto err_free; if (!devres_open_group(dev, NULL, GFP_KERNEL)) { kfree(host); return NULL; } dr = devres_alloc(ata_devres_release, 0, GFP_KERNEL); if (!dr) Loading Loading @@ -5605,8 +5620,6 @@ struct ata_host *ata_host_alloc(struct device *dev, int max_ports) err_out: devres_release_group(dev, NULL); err_free: kfree(host); return NULL; } EXPORT_SYMBOL_GPL(ata_host_alloc); Loading Loading @@ -5905,7 +5918,7 @@ int ata_host_register(struct ata_host *host, const struct scsi_host_template *sh * allocation time. */ for (i = host->n_ports; host->ports[i]; i++) kfree(host->ports[i]); ata_port_free(host->ports[i]); /* give ports names and add SCSI hosts */ for (i = 0; i < host->n_ports; i++) { Loading
drivers/ata/libata-scsi.c +4 −4 Original line number Diff line number Diff line Loading @@ -1864,11 +1864,11 @@ static unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf) 2 }; /* set scsi removable (RMB) bit per ata bit, or if the * AHCI port says it's external (Hotplug-capable, eSATA). /* * Set the SCSI Removable Media Bit (RMB) if the ATA removable media * device bit (obsolete since ATA-8 ACS) is set. */ if (ata_id_removable(args->id) || (args->dev->link->ap->pflags & ATA_PFLAG_EXTERNAL)) if (ata_id_removable(args->id)) hdr[1] |= (1 << 7); if (args->dev->class == ATA_DEV_ZAC) { Loading
drivers/ata/pata_macio.c +6 −3 Original line number Diff line number Diff line Loading @@ -915,10 +915,13 @@ static const struct scsi_host_template pata_macio_sht = { .sg_tablesize = MAX_DCMDS, /* We may not need that strict one */ .dma_boundary = ATA_DMA_BOUNDARY, /* Not sure what the real max is but we know it's less than 64K, let's * use 64K minus 256 /* * The SCSI core requires the segment size to cover at least a page, so * for 64K page size kernels this must be at least 64K. However the * hardware can't handle 64K, so pata_macio_qc_prep() will split large * requests. */ .max_segment_size = MAX_DBDMA_SEG, .max_segment_size = SZ_64K, .device_configure = pata_macio_device_configure, .sdev_groups = ata_common_sdev_groups, .can_queue = ATA_DEF_QUEUE, Loading
drivers/scsi/libsas/sas_ata.c +3 −3 Original line number Diff line number Diff line Loading @@ -610,15 +610,15 @@ int sas_ata_init(struct domain_device *found_dev) rc = ata_sas_tport_add(ata_host->dev, ap); if (rc) goto destroy_port; goto free_port; found_dev->sata_dev.ata_host = ata_host; found_dev->sata_dev.ap = ap; return 0; destroy_port: kfree(ap); free_port: ata_port_free(ap); free_host: ata_host_put(ata_host); return rc; Loading