Hi, >> Why use two bars for this? You can put them into one mmio bar, together >> with the msi-x vector table and PBA. Of course a pci capability >> describing the location is helpful for that ;) > > You don't need a capability. You can also just add a "config offset" > field to the register set and then make the semantics that it occurs in > the same region. Yes, that will work too. Removes some freedom to place the register ranges, but given that we don't want burn bars and thus prefer to place everything into a single mmio bar that shouldn't be an issue. Real hardware does this too btw (xhci for example). >> Main advantage of defining a register set with just isr is that it >> reduces pio address space consumtion for new virtio devices which don't >> have to worry about the legacy layout (8 bytes which is minimum size for >> io bars instead of 64 bytes). > > Doing some rough math, we should have at least 16k of PIO space. That > let's us have well over 500 virtio-pci devices with the current register > layout. I've seen worries nevertheless, but given we have virtio-scsi now which can handle lots of disks without needing lots of virtio-pci devices it is probably not that a big issue any more. >>>> The detection is simple: if BAR1 has non-zero length, it's new-style, >>>> otherwise legacy. >> >> Doesn't fly. BAR1 is in use today for MSI-X support. > > But the location is specified via capabilities so we can change the > location to be within BAR1 at a non-conflicting offset. Sure. Nevertheless "BAR1 has non-zero length" can't be used to detect new-style virtio as old-style devices already have BAR1 with a non-zero length. So how about this: (1) Add a vendor specific pci capability for new-style virtio. Specifies the pci bar used for new-style virtio registers. Guests can use it to figure whenever new-style virtio is supported and to map the correct bar (which will probably be bar 1 in most cases). (2) Have virtio-offsets register set, located at the new-style bar, offset 0: struct virtio_offsets { __le32 num_offsets; // so we can extend this later __le32 virtio_pci_offset; // location of virtio-pci registers __le32 virtio_cfg_offset; // location of virtio config space }; (3) place virtio-pci registers (same as 0..23 in bar 0) in the new-style bar, offset virtio_pci_offset (4) place virtio config space (same as 20+/24+ in bar 0) in the new-style bar, offset virtio_cfg_offset cheers, Gerd -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html