Hi Jag, Thanks for this latest revision. The biggest outstanding question I have is about the isolated address spaces design.
This patch series needs a PCIBus with its own Memory Space, I/O Space, and interrupts. That way a single QEMU process can host vfio-user servers that different VMs connect to. They all need isolated address spaces so that mapping a BAR in Device A does not conflict with mapping a BAR in Device B. The current approach adds special code to hw/pci/pci.c so that custom AddressSpace can be set up. The isolated PCIBus is an automatically created PCIe root port that's a child of the machine's main PCI bus. On one hand it's neat because QEMU's assumption that there is only one root SysBus isn't violated. On the other hand it seems like a special case hack for PCI and I'm not sure in what sense these PCIBusses are really children of the machine's main PCI bus since they don't share or interact in any way. Another approach that came to mind is to allow multiple root SysBusses. Each vfio-user server would need its own SysBus and put a regular PCI host onto that isolated SysBus without modifying hw/pci/pci.c with a special case. The downside to this is that violating the single SysBus assumption probably breaks monitor commands that rely on qdev_find_recursive() and friends. It seems cleaner than adding isolated address spaces to PCI specifically, but also raises the question if multiple machine instances are needed (which would raise even more questions). I wanted to raise this to see if Peter, Kevin, Michael, and others are happy with the current approach or have ideas for a clean solution. Stefan
signature.asc
Description: PGP signature