···1529152915301530 * atapi_dmadir: Enable ATAPI DMADIR bridge support1531153115321532+ * disable: Disable this device.15331533+15321534 If there are multiple matching configurations changing15331535 the same attribute, the last one is used.15341536
+12-9
drivers/ata/ahci.c
···429429 .driver_data = board_ahci_yes_fbs }, /* 88se9128 */430430 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9125),431431 .driver_data = board_ahci_yes_fbs }, /* 88se9125 */432432+ { PCI_DEVICE_SUB(PCI_VENDOR_ID_MARVELL_EXT, 0x9178,433433+ PCI_VENDOR_ID_MARVELL_EXT, 0x9170),434434+ .driver_data = board_ahci_yes_fbs }, /* 88se9170 */432435 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x917a),433436 .driver_data = board_ahci_yes_fbs }, /* 88se9172 */434437 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9172),···12831280 if (rc)12841281 return rc;1285128212861286- /* AHCI controllers often implement SFF compatible interface.12871287- * Grab all PCI BARs just in case.12881288- */12891289- rc = pcim_iomap_regions_request_all(pdev, 1 << ahci_pci_bar, DRV_NAME);12901290- if (rc == -EBUSY)12911291- pcim_pin_device(pdev);12921292- if (rc)12931293- return rc;12941294-12951283 if (pdev->vendor == PCI_VENDOR_ID_INTEL &&12961284 (pdev->device == 0x2652 || pdev->device == 0x2653)) {12971285 u8 map;···12981304 return -ENODEV;12991305 }13001306 }13071307+13081308+ /* AHCI controllers often implement SFF compatible interface.13091309+ * Grab all PCI BARs just in case.13101310+ */13111311+ rc = pcim_iomap_regions_request_all(pdev, 1 << ahci_pci_bar, DRV_NAME);13121312+ if (rc == -EBUSY)13131313+ pcim_pin_device(pdev);13141314+ if (rc)13151315+ return rc;1301131613021317 hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);13031318 if (!hpriv)
···38713871 return;38723872 }3873387338743874+ /*38753875+ * XXX - UGLY HACK38763876+ *38773877+ * The block layer suspend/resume path is fundamentally broken due38783878+ * to freezable kthreads and workqueue and may deadlock if a block38793879+ * device gets removed while resume is in progress. I don't know38803880+ * what the solution is short of removing freezable kthreads and38813881+ * workqueues altogether.38823882+ *38833883+ * The following is an ugly hack to avoid kicking off device38843884+ * removal while freezer is active. This is a joke but does avoid38853885+ * this particular deadlock scenario.38863886+ *38873887+ * https://bugzilla.kernel.org/show_bug.cgi?id=6280138883888+ * http://marc.info/?l=linux-kernel&m=13869569851648738893889+ */38903890+#ifdef CONFIG_FREEZER38913891+ while (pm_freezing)38923892+ msleep(10);38933893+#endif38943894+38743895 DPRINTK("ENTER\n");38753896 mutex_lock(&ap->scsi_scan_mutex);38763897
···418418 ATA_HORKAGE_DUMP_ID = (1 << 16), /* dump IDENTIFY data */419419 ATA_HORKAGE_MAX_SEC_LBA48 = (1 << 17), /* Set max sects to 65535 */420420 ATA_HORKAGE_ATAPI_DMADIR = (1 << 18), /* device requires dmadir */421421+ ATA_HORKAGE_NO_NCQ_TRIM = (1 << 19), /* don't use queued TRIM */421422422423 /* DMA mask for user DMA control: User visible values; DO NOT423424 renumber */
+6
kernel/freezer.c
···1919bool pm_freezing;2020bool pm_nosig_freezing;21212222+/*2323+ * Temporary export for the deadlock workaround in ata_scsi_hotplug().2424+ * Remove once the hack becomes unnecessary.2525+ */2626+EXPORT_SYMBOL_GPL(pm_freezing);2727+2228/* protects freezing and frozen transitions */2329static DEFINE_SPINLOCK(freezer_lock);2430