| From f971a85439bd25dc7b4d597cf5e4e8dc7ffc884b Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Reimar=20D=C3=B6ffinger?= <Reimar.Doeffinger@gmx.de> |
| Date: Tue, 12 Oct 2021 08:27:44 +0200 |
| Subject: libata: fix checking of DMA state |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Reimar Döffinger <Reimar.Doeffinger@gmx.de> |
| |
| commit f971a85439bd25dc7b4d597cf5e4e8dc7ffc884b upstream. |
| |
| Checking if DMA is enabled should be done via the |
| ata_dma_enabled helper function, since the init state |
| 0xff indicates disabled. |
| This meant that ATA_CMD_READ_LOG_DMA_EXT was used and probed |
| for before DMA was enabled, which caused hangs for some combinations |
| of controllers and devices. |
| It might also have caused it to be incorrectly disabled as broken, |
| but there have been no reports of that. |
| |
| Cc: stable@vger.kernel.org |
| BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=195895 |
| Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de> |
| Tested-by: Paul Menzel <pmenzel@molgen.mpg.de> |
| Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/ata/libata-core.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/ata/libata-core.c |
| +++ b/drivers/ata/libata-core.c |
| @@ -2057,7 +2057,7 @@ unsigned int ata_read_log_page(struct at |
| |
| retry: |
| ata_tf_init(dev, &tf); |
| - if (dev->dma_mode && ata_id_has_read_log_dma_ext(dev->id) && |
| + if (ata_dma_enabled(dev) && ata_id_has_read_log_dma_ext(dev->id) && |
| !(dev->horkage & ATA_HORKAGE_NO_DMA_LOG)) { |
| tf.command = ATA_CMD_READ_LOG_DMA_EXT; |
| tf.protocol = ATA_PROT_DMA; |