08.06.2012 20:56, Jan Kiszka написал: > On 2012-06-08 10:47, Alexey Kardashevskiy wrote: >> Yet another try :) >> >> Normally the pci_add_capability is called on devices to add new >> capability. This is ok for emulated devices which capabilities list >> is being built by QEMU. >> >> In the case of VFIO the capability may already exist and adding new > > Why does it exit? VFIO should build the virtual capability list from > scratch (just like classic device assignment does), recreating the > layout of the physical device (except for masked out caps). In that > case, this conflict should become impossible, no? Normally capabilities in emulated devices are created by calling msi_init or msix_init - just when emulated device wants to advertise it to the guest. In the case of VFIO, there is a lot of capabilities which QEMU does not know and does not want to know about. They are read from the host kernel as is. And we definitely want to pass these capabilities to the guest as is, i.e. on the same position and the same number of them. Just for some we call pci_add_capability (indirectly!) if we want QEMU to support them somehow. If we invent some function which "readds" all the capabilities we got from the host to keep internal QEMU's PCIDevice data in sync, then we'll need to change every piece of code which adds capabilities. I noticed, this is very common approach here to change a lot for a very small thing or rare case but I'd like to avoid this :) > But if pci_*add*_capability should actually be used like this (I doubt > this), MSI/MSIX use it. To enable MSI/MSIX on VFIO PCIDevice, we call msi_init/msix_init and they call pci_add_capability. > some renaming would be required. "Add" sound like "append" to me, > not "update". It is "add" for all the cases but VFIO. VFIO is the very special case and I do not see another one doing the same soon. -- With best regards Alexey Kardashevskiy -- icq: 52150396 -- 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