On 10.01.2025 23:21, Bjorn Helgaas wrote: > On Fri, Jan 10, 2025 at 03:01:48PM +0100, Roger Pau Monne wrote: >> The PCI segment value is limited to 16 bits, however there are buses like VMD >> that fake being part of the PCI topology by adding segment with a number >> outside the scope of the PCI firmware specification range (>= 0x10000). The >> MCFG ACPI Table "PCI Segment Group Number" field is defined as having a 16 >> bit >> width. >> >> Attempting to register or manage those devices with Xen would result in >> errors >> at best, or overlaps with existing devices living on the truncated equivalent >> segment values. > > The ACPI _SEG method (ACPI r6.5, sec 6.5.6) and the corresponding > value in the MCFG table (PCI Firmware r3.3, sec 4.1.2) are clearly > 16-bit values. > > But otherwise, the segment value is pretty much an arbitrary software > value, and the kernel works fine with the larger domain values from > vmd_find_free_domain(), so this isn't quite enough to explain what the > issue with Xen is. > > Does Xen truncate the domain to 16 bits or use it to look up something > in ACPI?
One of the involved public interface structs starts like this: struct physdev_pci_device_add { /* IN */ uint16_t seg; uint8_t bus; uint8_t devfn; ... So yes, wider segment values would be truncated. Plus, even if they weren't, there would need to be coordination between Dom0 and Xen on which devices gets which segment number, since - as you say - the assignment in Linux is pretty much arbitrary. Jan