From: Greg Kroah-Hartman Date: Thu, 27 Feb 2020 12:56:16 +0000 (+0100) Subject: 4.9-stable patches X-Git-Tag: v4.4.215~19 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0d9584bac61260796648ac98646412b25a56ec3c;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: ata-ahci-add-shutdown-to-freeze-hardware-resources-of-ahci.patch --- diff --git a/queue-4.9/ata-ahci-add-shutdown-to-freeze-hardware-resources-of-ahci.patch b/queue-4.9/ata-ahci-add-shutdown-to-freeze-hardware-resources-of-ahci.patch new file mode 100644 index 00000000000..b7cd7218ec4 --- /dev/null +++ b/queue-4.9/ata-ahci-add-shutdown-to-freeze-hardware-resources-of-ahci.patch @@ -0,0 +1,105 @@ +From 10a663a1b15134a5a714aa515e11425a44d4fdf7 Mon Sep 17 00:00:00 2001 +From: Prabhakar Kushwaha +Date: Sat, 25 Jan 2020 03:37:29 +0000 +Subject: ata: ahci: Add shutdown to freeze hardware resources of ahci + +From: Prabhakar Kushwaha + +commit 10a663a1b15134a5a714aa515e11425a44d4fdf7 upstream. + +device_shutdown() called from reboot or power_shutdown expect +all devices to be shutdown. Same is true for even ahci pci driver. +As no ahci shutdown function is implemented, the ata subsystem +always remains alive with DMA & interrupt support. File system +related calls should not be honored after device_shutdown(). + +So defining ahci pci driver shutdown to freeze hardware (mask +interrupt, stop DMA engine and free DMA resources). + +Signed-off-by: Prabhakar Kushwaha +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ata/ahci.c | 7 +++++++ + drivers/ata/libata-core.c | 21 +++++++++++++++++++++ + include/linux/libata.h | 1 + + 3 files changed, 29 insertions(+) + +--- a/drivers/ata/ahci.c ++++ b/drivers/ata/ahci.c +@@ -86,6 +86,7 @@ enum board_ids { + + static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); + static void ahci_remove_one(struct pci_dev *dev); ++static void ahci_shutdown_one(struct pci_dev *dev); + static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class, + unsigned long deadline); + static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class, +@@ -582,6 +583,7 @@ static struct pci_driver ahci_pci_driver + .id_table = ahci_pci_tbl, + .probe = ahci_init_one, + .remove = ahci_remove_one, ++ .shutdown = ahci_shutdown_one, + .driver = { + .pm = &ahci_pci_pm_ops, + }, +@@ -1775,6 +1777,11 @@ static int ahci_init_one(struct pci_dev + return 0; + } + ++static void ahci_shutdown_one(struct pci_dev *pdev) ++{ ++ ata_pci_shutdown_one(pdev); ++} ++ + static void ahci_remove_one(struct pci_dev *pdev) + { + pm_runtime_get_noresume(&pdev->dev); +--- a/drivers/ata/libata-core.c ++++ b/drivers/ata/libata-core.c +@@ -6580,6 +6580,26 @@ void ata_pci_remove_one(struct pci_dev * + ata_host_detach(host); + } + ++void ata_pci_shutdown_one(struct pci_dev *pdev) ++{ ++ struct ata_host *host = pci_get_drvdata(pdev); ++ int i; ++ ++ for (i = 0; i < host->n_ports; i++) { ++ struct ata_port *ap = host->ports[i]; ++ ++ ap->pflags |= ATA_PFLAG_FROZEN; ++ ++ /* Disable port interrupts */ ++ if (ap->ops->freeze) ++ ap->ops->freeze(ap); ++ ++ /* Stop the port DMA engines */ ++ if (ap->ops->port_stop) ++ ap->ops->port_stop(ap); ++ } ++} ++ + /* move to PCI subsystem */ + int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits) + { +@@ -7200,6 +7220,7 @@ EXPORT_SYMBOL_GPL(ata_timing_cycle2mode) + + #ifdef CONFIG_PCI + EXPORT_SYMBOL_GPL(pci_test_config_bits); ++EXPORT_SYMBOL_GPL(ata_pci_shutdown_one); + EXPORT_SYMBOL_GPL(ata_pci_remove_one); + #ifdef CONFIG_PM + EXPORT_SYMBOL_GPL(ata_pci_device_do_suspend); +--- a/include/linux/libata.h ++++ b/include/linux/libata.h +@@ -1222,6 +1222,7 @@ struct pci_bits { + }; + + extern int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits); ++extern void ata_pci_shutdown_one(struct pci_dev *pdev); + extern void ata_pci_remove_one(struct pci_dev *pdev); + + #ifdef CONFIG_PM diff --git a/queue-4.9/series b/queue-4.9/series index 66c619eb9ec..1f4304a51c4 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -160,4 +160,5 @@ alsa-rawmidi-avoid-bit-fields-for-state-flags.patch alsa-seq-avoid-concurrent-access-to-queue-flags.patch alsa-seq-fix-concurrent-access-to-queue-current-tick-time.patch netfilter-xt_hashlimit-limit-the-max-size-of-hashtable.patch +ata-ahci-add-shutdown-to-freeze-hardware-resources-of-ahci.patch kvm-nvmx-handle-nested-posted-interrupts-when-apicv-is-disabled-for-l1.patch