STRUCT AER_ERR_INFO(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– struct aer_err_info β€” AER Error Information πŸ’–

okay bestie, welcome to the struct aer_err_info(9) page, straight out of the Kernel API Manual ✨ this is one of those pages you read once, go "wait huh", read again, and then suddenly you're the group chat's PCIe expert. no cap. let's go 🫢


🌸 NAME 🌸

struct aer_err_info β€” AER Error Information. that's it, that's the whole vibe check πŸ’… it's the little info-bag the kernel fills up when an Advanced Error Reporting situation goes down.


✨ SYNOPSIS ✨

here's the whole struct, character for character, copy it exactly because we do not freestyle struct definitions in this house 😀

struct aer_err_info {
    struct pci_dev *dev[AER_MAX_MULTI_ERR_DEVICES];
    int ratelimit_print[AER_MAX_MULTI_ERR_DEVICES];
    int error_dev_num;
    const char *level;
    unsigned int id:16;
    unsigned int severity:2;
    unsigned int root_ratelimit_print:1;
    unsigned int __pad1:4;
    unsigned int multi_error_valid:1;
    unsigned int first_error:5;
    unsigned int __pad2:1;
    unsigned int is_cxl:1;
    unsigned int tlp_header_valid:1;
    unsigned int status;
    unsigned int mask;
    u32 anfe_status;
    struct pcie_tlp_log tlp;
};

yes there are bitfields. yes there is padding. no we are not scared πŸ¦‹


πŸŽ€ Members πŸŽ€

time for the roll call, one by one, no skipping, we love an exhaustive list 🌈

  • dev β€” the devices reporting the error. it's an array, so if your whole squad is messy, everyone shows up πŸ’€
  • ratelimit_print β€” flag that says whether to log or not log the devices' error. 0=NotLog/1=Log. the anti-spam control fr fr πŸ™ˆ
  • error_dev_num β€” how many devices are reporting an error. the actual headcount πŸ“‹
  • level β€” the printk level to use when logging. this is the volume knob on the drama πŸ”Š
  • id β€” value from register PCI_ERR_ROOT_ERR_SRC. literally straight from the register, no middleman πŸ”₯
  • severity β€” the AER severity: 0-UNCOR Non-fatal, 1-UNCOR fatal, 2-COR. three whole moods 😭
  • root_ratelimit_print β€” flag to log or not log the root's error. 0=NotLog/1=Log. same energy as ratelimit_print but for the root πŸ‘‘
  • __pad1 β€” padding for alignment. it does nothing and it's iconic for it πŸ’…
  • multi_error_valid β€” set if multiple errors are reported. yes babe, more than one 😡
  • first_error β€” the first reported error. the OG error πŸ₯‡
  • __pad2 β€” padding for alignment. again. still doing nothing. still slaying ✨
  • is_cxl β€” bus type error: 0-PCI Bus error, 1-CXL Bus error. pick your universe 🌌
  • tlp_header_valid β€” indicates if the tlp field contains error information. if it's not valid, don't go reading it, okay? 🚫
  • status β€” COR/UNCOR error status πŸ“Š
  • mask β€” COR/UNCOR mask 🎭
  • anfe_status β€” Advisory Non-Fatal Errors, i.e. Uncorrectable Errors signaled as Correctable Errors (PCIe r7.0 sec 6.2.4.3). only used if severity is AER_CORRECTABLE and status has Advisory Non-Fatal Error Status set. read that condition twice bestie, it's not optional 🧚
note the citation: PCIe r7.0 sec 6.2.4.3. that's the receipts 🧾
  • tlp β€” transaction packet information. the actual packet gossip πŸ“¦

πŸ” SEE ALSO πŸ”

go read these next, the lore is deep, iykyk πŸ‘‘


aaaand that's the page!! πŸŽ‰ this one came from the source tree at ./drivers/pci, version stamped October 2026, and it's filed under struct aer_err_info(9) in the Kernel API Manual. drink some water, go read pci.h, and remember: padding fields are people too πŸ’œπŸ«ΆπŸ“

πŸ“¦ where this page comes from