All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: failed to set xfermode (err_mask=0x40): READ LOG DMA EXT failed, trying PIO
       [not found] <f7cef1cf-69d0-82e7-7902-fee56c19577a@molgen.mpg.de>
@ 2019-05-05  8:41 ` Paul Menzel
  0 siblings, 0 replies; only message in thread
From: Paul Menzel @ 2019-05-05  8:41 UTC (permalink / raw)
  To: Jens Axboe, Tejun Heo; +Cc: linux-block, LKML

Dear Linux folks,


On 01.05.19 11:34, Paul Menzel wrote:

> On an MSI B350M MORTAR (MS-7A37) with all firmwares, and the AHCI SSD 
> Crucial MX500, *sometimes* boot and resume are delayed by four to five 
> seconds, and the log contains the message *failed to set xfermode*.
> 
>> [    0.474150] ata9: SATA link up 6.0 Gbps (SStatus 133 SControl 0)
>> [    0.474267] microcode: Microcode Update Driver: v2.2.
>> [    0.474294] AVX2 version of gcm_enc/dec engaged.
>> [    0.474295] AES CTR mode by8 optimization enabled
>> [    0.474304] ata9.00: supports DRM functions and may not be fully accessible
>> [    0.474368] ata9.00: ATA-10: CT1000MX500SSD4, M3CR020, max UDMA/133
>> [    0.474370] ata9.00: 1953525168 sectors, multi 1: LBA48 NCQ (depth 32), AA
>> [    0.474569] ata9.00: READ LOG DMA EXT failed, trying PIO
>> [    0.474571] ata9.00: failed to get Identify Device Data, Emask 0x40
>> [    0.474572] ata9.00: ATA Identify Device Log not supported
>> [    0.474573] ata9.00: Security Log not supported
>> [    0.474576] ata9.00: failed to set xfermode (err_mask=0x40)
>> [    0.493193] sched_clock: Marking stable (504159603, -10991650)->(615393192, -122225239)
>> [    0.493768] registered taskstats version 1
>> [    0.493770] Loading compiled-in X.509 certificates
>> [    0.497894] Loaded X.509 cert 'Build time autogenerated kernel key: 4682756457c0b7b167f0b726943cf53ade93bd78'
>> [    0.497984] zswap: loaded using pool lzo/zbud
>> [    0.498237] kmemleak: Kernel memory leak detector initialized
>> [    0.498243] kmemleak: Automatic memory scanning thread started
>> [    0.506469] Key type big_key registered
>> [    0.508864]   Magic number: 11:580:189
>> [    0.508914] acpi device:48: hash matches
>> [    0.508922] acpi device:1b: hash matches
>> [    0.509017] rtc_cmos 00:02: setting system clock to 2019-03-29T17:09:41 UTC (1553879381)
>> [    0.509485] After kernel_init_freeable
>> [    1.364358] tsc: Refined TSC clocksource calibration: 3499.982 MHz
>> [    1.364370] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x32734013f67, max_idle_ns: 440795323134 ns
>> [    1.364419] clocksource: Switched to clocksource tsc
>> [    5.593141] ata9: SATA link up 6.0 Gbps (SStatus 133 SControl 0)
>> [    5.593270] ata9.00: supports DRM functions and may not be fully accessible
>> [    5.594006] ata9.00: supports DRM functions and may not be fully accessible
>> [    5.594600] ata9.00: configured for UDMA/133
>> [    5.595893] scsi 8:0:0:0: Direct-Access     ATA      CT1000MX500SSD4  020  PQ: 0 ANSI: 5
>> [    5.596611] sd 8:0:0:0: [sda] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)
>> [    5.596613] sd 8:0:0:0: [sda] 4096-byte physical blocks
>> [    5.596626] sd 8:0:0:0: [sda] Write Protect is off
>> [    5.596629] sd 8:0:0:0: [sda] Mode Sense: 00 3a 00 00
>> [    5.596650] sd 8:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
>> [    5.596837] sd 8:0:0:0: Attached scsi generic sg0 type 0
>> [    5.597329]  sda: sda1 sda2 sda3
>> [    5.599079] sd 8:0:0:0: [sda] Attached SCSI disk
> 
> This happens with all Linux kernel versions – tested since 4.14. 
> Searching for this error on the Web, several people seem to be affected 
> with different boards and drives [1].
> 
> In a lot of those reports, I also see the message *Security Log not 
> supported*.
> 
> Do you have an idea, why this is only happening sometimes? Is it likely 
> a drive firmware issue? As it affects several vendors, can Linux work 
> around this problem (if it can be pinpointed)?

The first error seems to be `READ LOG DMA EXT failed, trying PIO`. The 
code looks like below [2].

> retry:
>         ata_tf_init(dev, &tf);
>         if (dev->dma_mode && 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;
>                 dma = true;
>         } else {
>                 tf.command = ATA_CMD_READ_LOG_EXT;
>                 tf.protocol = ATA_PROT_PIO;
>                 dma = false;
>         }
>         tf.lbal = log;
>         tf.lbam = page;
>         tf.nsect = sectors;
>         tf.hob_nsect = sectors >> 8;
>         tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_LBA48 | ATA_TFLAG_DEVICE;
> 
>         err_mask = ata_exec_internal(dev, &tf, NULL, DMA_FROM_DEVICE,
>                                      buf, sectors * ATA_SECT_SIZE, 0);
> 
>         if (err_mask && dma) {
>                 dev->horkage |= ATA_HORKAGE_NO_DMA_LOG;
>                 ata_dev_warn(dev, "READ LOG DMA EXT failed, trying PIO\n");
>                 goto retry;
>         }
> 
>         DPRINTK("EXIT, err_mask=%x\n", err_mask);
>         return err_mask;

So when trying PIO, that also seems to fail, and the error mask 0x40 is 
propagated up.

> enum ata_completion_errors {
>         AC_ERR_DEV              = (1 << 0), /* device reported error */
>         AC_ERR_HSM              = (1 << 1), /* host state machine violation */
>         AC_ERR_TIMEOUT          = (1 << 2), /* timeout */
>         AC_ERR_MEDIA            = (1 << 3), /* media error */
>         AC_ERR_ATA_BUS          = (1 << 4), /* ATA bus error */
>         AC_ERR_HOST_BUS         = (1 << 5), /* host bus error */
>         AC_ERR_SYSTEM           = (1 << 6), /* system error */
>         AC_ERR_INVALID          = (1 << 7), /* invalid argument */
>         AC_ERR_OTHER            = (1 << 8), /* unknown */
>         AC_ERR_NODEV_HINT       = (1 << 9), /* polling device detection hint */
>         AC_ERR_NCQ              = (1 << 10), /* marker for offending NCQ qc */
> };

So 0x40 is AC_ERR_HOST_BUS, right? Any idea, what might cause this?

Would it be helpful to enable the debug messages?

     #undef ATA_DEBUG                /* debugging output */


Kind regards,

Paul


> [1]: https://bugzilla.kernel.org/show_bug.cgi?id=195895[2]: 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/ata/libata-core.c?id=1daa0449d287a109b93c4516914eddeff4baff65#n2075
[3]: 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/libata.h?id=1daa0449d287a109b93c4516914eddeff4baff65#n508

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-05-05  8:41 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <f7cef1cf-69d0-82e7-7902-fee56c19577a@molgen.mpg.de>
2019-05-05  8:41 ` failed to set xfermode (err_mask=0x40): READ LOG DMA EXT failed, trying PIO Paul Menzel

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.