ATA exception Emask
ATA exception Emask Meldungen des Linux Kernels können auf unterschiedliche Fehler hinweisen. Dieser Artikel gibt einen Überblick, um welche Fehler es sich handeln könnte.
SATA exception
Eine SATA exception Zeile enthält folgende Felder:
Feld | Bedeutung |
---|---|
Emask | Bitmaske zur Fehlerklassifizierung (AC_ERR_xxx im Quellcode) |
SAct | SATA SActive Register (bei Native Command Queuing). Das SActive-Register wird verwendet, um den Abschlussstatus von Befehlen in der Warteschlange zu verfolgen. Dieses Register ist Teil der in der Serial-ATA-Spezifikation definierten Steuer-, Status- und Fehler-Superset-Register.[1][2] |
SErr | SATA SError Register |
action | ATA_EH_xxx-Aktionen, wie revalidate, softreset, hardreset (siehe include/linux/libata.h) |
frozen | wenn vorhanden, zeigt an, dass der Anschluss für die SATA-Fehlerbehandlung (EH, error handling) eingefroren wurde |
Emask
Die Emask Hex-Werte haben folgende Bedeutung:[3]
Einzelne Bits | Byte (in Hex) | Bedeutung | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Emask | Details | ||
AC_ERR_OK | 0x0 | no error | Beispiel siehe SATA exception Emask 0x0 SAct 0x80 SErr 0x0 action 0x6 frozen | ||||||||||
1 | AC_ERR_DEV | 0x1 | device error | Hardware indicates an error with last command. This error is delivered directly from the ATA device. If you see a lot of these, that is often an indication of a hardware problem. | |||||||||
1 | AC_ERR_HSM | 0x2 | HSM violation | Hardware failed to respond in an expected manner. "HSM" stands for Host State Machine, a software-based finite state machine required by ATA that expects certain hardware behaviors, based on the current ATA command and other hardware-state programming details. | |||||||||
1 | AC_ERR_TIMEOUT | 0x4 | Timeout | Controller failed to respond to an active ATA command. This could be any number of causes. Most often this is due to an unrelated interrupt subsystem bug (try booting with 'pci=nomsi' or 'acpi=off' or 'noapic'), which failed to deliver an interrupt when we were expecting one from the hardware. | |||||||||
1 | AC_ERR_MEDIA | 0x8 | Media Error | Software detected a media error | |||||||||
1 | AC_ERR_HOST_BUS | 0x10 | ATA Bus Error | chip<->device bus error
Beispiel siehe SATA exception Emask 0x10 SAct 0x0 SErr 0x4000000 action 0xe frozen | |||||||||
1 | AC_ERR_SYSTEM | 0x20 | Host Bus Error | Host<->chip bus error (i.e. PCI, if on PCI bus) | |||||||||
1 | AC_ERR_INVALID | 0x40 | System Error / Internal Error | Hardware flagged an impossible condition, most likely due to software misprogramming. | |||||||||
1 | AC_ERR_OTHER | 0x80 | Invalid Argument | Software marked ATA command as invalid, for some reason | |||||||||
1 | AC_ERR_NODEV_HINT | 0x100 | Unknown | Uncategorized error (should never happen) | |||||||||
1 | AC_ERR_NCQ | 0x200? | Polling Device Detection Hint |
Auszug aus dem Linux Kernel (include/linux/libata.h):[4]
enum ata_completion_errors { AC_ERR_OK = 0, /* no error */ 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 */
action
Die action Hex-Werte haben folgende Bedeutung:
Einzelne Bits | Byte (in Hex) | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
1 | ATA_EH_REVALIDATE | 0x1 | |||||||||
1 | ATA_EH_SOFTRESET | 0x2 | |||||||||
1 | ATA_EH_HARDRESET | 0x4 | |||||||||
1 | ATA_EH_ENABLE_LINK | 0x8 | |||||||||
1 | ATA_EH_PARK | 0x20 |
Auszug aus dem Linux Kernel (include/linux/libata.h):[5]
/* reset / recovery action types */ ATA_EH_REVALIDATE = (1 << 0), ATA_EH_SOFTRESET = (1 << 1), /* meaningful only in ->prereset */ ATA_EH_HARDRESET = (1 << 2), /* meaningful only in ->prereset */ ATA_EH_RESET = ATA_EH_SOFTRESET | ATA_EH_HARDRESET, ATA_EH_ENABLE_LINK = (1 << 3), ATA_EH_PARK = (1 << 5), /* unload heads and stop I/O */ ATA_EH_PERDEV_MASK = ATA_EH_REVALIDATE | ATA_EH_PARK, ATA_EH_ALL_ACTIONS = ATA_EH_REVALIDATE | ATA_EH_RESET | ATA_EH_ENABLE_LINK,
Einzelnachweise
- ↑ Serial ATA II Native Command Queuing Overview (www.intel.com, April 2003)
- ↑ Serial ATA Native Command Queuing (www.seagate.com, Juli 2003)
- ↑ Libata error messages - Error classes (ata.wiki.kernel.org)
- ↑ include/linux/libata.h - Kernel 6.2 - Zeile 443 (git.kernel.org)
- ↑ include/linux/libata.h - Kernel 6.2 - Zeile 303 (git.kernel.org)
Autor: Werner Fischer Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.
|