On 26.02.2025 20:57, Stewart Hildebrand wrote: > On 2/26/25 06:38, Jan Beulich wrote: >> Have callers invoke pci_add_segment() directly instead: With radix tree >> initialization moved out of the function, its name isn't quite >> describing anymore what it actually does. >> >> On x86 move the logic into __start_xen() itself, to reduce the risk of >> re-introducing ordering issues like the one which was addressed by >> 26fe09e34566 ("radix-tree: introduce RADIX_TREE{,_INIT}()"). >> >> Signed-off-by: Jan Beulich <jbeul...@suse.com> >> --- >> This is entirely optional and up for discussion. There certainly also is >> an argument towards keeping the function. Otoh on Arm there is the still >> open question whether segment 0 really is kind of special there (as it >> is on x86, largely for historical reasons), or whether the code can be >> dropped there altogether. > > Segment 0 is not special on Arm as far as I'm aware. You can have a > perfectly functioning system with only, say, segment 1, for example: > > (XEN) ==== PCI devices ==== > (XEN) ==== segment 0001 ==== > (XEN) 0001:00:01.0 - d0 - node -1 > (XEN) 0001:00:00.0 - d0 - node -1 > > Segment numbers can be arbitrarily chosen by specifying the > linux,pci-domain device tree property.
Right, that was the vague understanding I had. >> --- a/xen/arch/arm/pci/pci.c >> +++ b/xen/arch/arm/pci/pci.c >> @@ -88,7 +88,8 @@ static int __init pci_init(void) >> if ( !pci_passthrough_enabled ) >> return 0; >> >> - pci_segments_init(); >> + if ( pci_add_segment(0) ) >> + panic("Could not initialize PCI segment 0\n"); > > IMO it's okay to remove the call here since there is already a call to > pci_add_segment() in > xen/arch/arm/pci/pci-host-common.c:pci_host_common_probe() Is there? I can't see one, so maybe you're working from a tree with extra patches applied? Jan