On Thu, Jan 20, 2011 at 7:37 PM, Anthony Liguori <aliguori@xxxxxxxxxxxxxxxxxx> wrote: > On 01/20/2011 03:33 AM, Jan Kiszka wrote: >> >> On 2011-01-19 20:32, Blue Swirl wrote: >> >>> >>> On Wed, Jan 19, 2011 at 4:57 PM, Anthony Liguori >>> <aliguori@xxxxxxxxxxxxxxxxxx> Âwrote: >>> >>>> >>>> On 01/19/2011 07:15 AM, Markus Armbruster wrote: >>>> >>>>> >>>>> So they interact with KVM (need kvm_state), and they interact with the >>>>> emulated PCI bus. ÂCould you elaborate on the fundamental difference >>>>> between the two interactions that makes you choose the (hypothetical) >>>>> KVM bus over the PCI bus as device parent? >>>>> >>>>> >>>> >>>> It's almost arbitrary, but I would say it's the direction that I/Os >>>> flow. >>>> >>>> But if the underlying observation is that the device tree is not really >>>> a >>>> tree, you're 100% correct. ÂThis is part of why a factory interface that >>>> just takes a parent bus is too simplistic. >>>> >>>> I think we ought to introduce a -pci-device option that is specifically >>>> for >>>> creating PCI devices that doesn't require a parent bus argument but >>>> provides >>>> a way to specify stable addressing (for instancing, using a linear >>>> index). >>>> >>> >>> I think kvm_state should not be a property of any device or bus. It >>> should be split to more logical pieces. >>> >>> Some parts of it could remain in CPUState, because they are associated >>> with a VCPU. >>> >>> Also, for example irqfd could be considered to be similar object to >>> char or block devices provided by QEMU to devices. Would it make sense >>> to introduce new host types for passing parts of kvm_state to devices? >>> >>> I'd also make coalesced MMIO stuff part of memory object. We are not >>> passing any state references when using cpu_physical_memory_rw(), but >>> that could be changed. >>> >> >> There are currently no VCPU-specific bits remaining in kvm_state. It may >> be a good idea to introduce an arch-specific kvm_state and move related >> bits over. It may also once be feasible to carve out memory management >> related fields if we have proper abstractions for that, but I'm not >> completely sure here. >> >> Anyway, all these things are secondary. The primary topic here is how to >> deal with kvm_state and its fields that have VM-global scope. >> > > The debate is really: > > 1) should we remove all passing of kvm_state and just assume it's static > > 2) deal with a couple places in the code where we need to figure out how to > get at kvm_state > > I think we've only identified 1 real instance of (2) and it's resulted in > some good discussions about how to model KVM devices vs. emulated devices. > ÂHonestly, (1) just stinks. ÂI see absolutely no advantage to it at all. Fully agree. > In the very worst case scenario, the thing we need to do is just reference > an extern variable in a few places. ÂThat completely avoids all of the > modelling discussions for now (while leaving for placeholder FIXMEs so the > problem can be tackled later). I think KVMState was designed to match KVM ioctl interface: all stuff that is needed for talking to KVM or received from KVM are there. But I think this shouldn't be a design driver. If the only pieces of kvm_state that are needed by the devices are irqchip_in_kernel, pit_in_kernel and many_ioeventfds, the problem of passing kvm_state to devices becomes very different. Each of these are just single bits, affecting only a few devices. Perhaps they could be device properties which the board level sets when KVM is used? -- 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