pci_ext_cfg_is_aliased(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– pci_ext_cfg_is_aliased(9) β€” the Kernel API Manual page, bestie edition πŸŽ€

okay so real quick, this is pci_ext_cfg_is_aliased from the Kernel API Manual (section 9, kernel-land only, no user commands here babes) β€” and it is lowkey one of those tiny helper functions that exists purely because some hardware vendors woke up and chose chaos. let's get into it ✨


🌸 NAME 🌸

pci_ext_cfg_is_aliased β€” is ext config space literally just an alias of std config space?? like, is it the same thing wearing a different outfit? πŸ‘€


✨ SYNOPSIS ✨

bool pci_ext_cfg_is_aliased (struct pci_dev *dev );

🫢 ARGUMENTS 🫢

  • dev β€” the PCI device in question. that's it. that's the whole parameter. give it a device, it gives you a bool πŸ¦‹

πŸ’… DESCRIPTION πŸ’…

okay so picture this: the PCI Express to PCI/PCI-X Bridge Specification, rev 1.0, 4.1.4 says β€” and I'm paraphrasing but also not, this is literally what it says β€” that when a bridge is forwarding a type1 configuration request, it must check that the extended register address field is zero. that's the rule. non-negotiable. and if it's not zero, the bridge is not permitted to forward the transaction at all, and it has to handle it as an Unsupported Request. periodt. πŸ“œ

but bestie… some bridges simply did not get the memo πŸ™ˆ they do NOT follow this rule β€” they just casually drop the extended register bits. and what happens when you drop bits? the standard config space ends up being aliased, repeating every 256 bytes across the entire configuration space. like a wallpaper pattern. iconic behavior, terrible spec compliance. 😭

so how do we catch these offenders? the function tests for this exact condition by comparing the first dword of each potential alias against the vendor/device ID. if it matches where it shouldn't β€” boom, aliased, we got 'em. πŸ”₯

Known offenders (the hall of shame, in the source's own words):

  • ASM1083/1085 PCIe-to-PCI Reversible Bridge (1b21:1080, rev 01 & 03)
  • AMD/ATI SBx00 PCI to PCI Bridge (1002:4384, rev 40)

these two are on the list, and honestly? they earned it. πŸ’€


πŸ‘‘ SEE ALSO πŸ‘‘

Kernel file ./drivers/pci/probe.c, plus a whole squad of related functions:


πŸ’œ one thing to remember: this function is a detector, not a fixer. it tells you the bridge is being sus β€” what you do with that information is between you and your PCI core. no cap.

and that's the whole page, bestie! this one lives in ./drivers/pci, dated October 2026 in this printing, and it ate. go forth and check your bridges 🌈⭐

πŸ“¦ where this page comes from