From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=48840 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pg230-00011Y-Jv for qemu-devel@nongnu.org; Thu, 20 Jan 2011 16:28:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pg22z-0000zL-IR for qemu-devel@nongnu.org; Thu, 20 Jan 2011 16:28:02 -0500 Received: from fmmailgate01.web.de ([217.72.192.221]:42965) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pg22z-0000z5-7f for qemu-devel@nongnu.org; Thu, 20 Jan 2011 16:28:01 -0500 Message-ID: <4D38A8DF.4000200@web.de> Date: Thu, 20 Jan 2011 22:27:59 +0100 From: Jan Kiszka MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 28/35] kvm: x86: Introduce kvmclock device to save/restore its state References: <4D2B6CB5.9050602@codemonkey.ws> <4D2B74D8.4080309@web.de> <4D2B8662.9060909@web.de> <4D2C60FB.7030009@linux.vnet.ibm.com> <4D2D80ED.8030405@redhat.com> <4D2D82EE.20002@siemens.com> <4D35A39A.8000801@siemens.com> <4D35ABF8.9050700@linux.vnet.ibm.com> <4D35B521.3090601@siemens.com> <4D35B6DD.1020005@linux.vnet.ibm.com> <4D3717E7.3010105@linux.vnet.ibm.com> <4D38017D.2020401@siemens.com> <4D388EE8.3000004@linux.vnet.ibm.com> In-Reply-To: <4D388EE8.3000004@linux.vnet.ibm.com> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig2D45B8E8219912F0FAC88365" Sender: jan.kiszka@web.de List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: "kvm@vger.kernel.org" , Glauber Costa , Marcelo Tosatti , Markus Armbruster , "qemu-devel@nongnu.org" , Blue Swirl , Avi Kivity This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig2D45B8E8219912F0FAC88365 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 2011-01-20 20:37, Anthony Liguori wrote: > On 01/20/2011 03:33 AM, Jan Kiszka wrote: >> On 2011-01-19 20:32, Blue Swirl wrote: >> =20 >>> On Wed, Jan 19, 2011 at 4:57 PM, Anthony Liguori >>> wrote: >>> =20 >>>> On 01/19/2011 07:15 AM, Markus Armbruster wrote: >>>> =20 >>>>> So they interact with KVM (need kvm_state), and they interact with = the >>>>> emulated PCI bus. Could you elaborate on the fundamental differenc= e >>>>> between the two interactions that makes you choose the (hypothetica= l) >>>>> KVM bus over the PCI bus as device parent? >>>>> >>>>> =20 >>>> 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). >>>> =20 >>> 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 associate= d >>> 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 sens= e >>> 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. >>> =20 >> There are currently no VCPU-specific bits remaining in kvm_state. It m= ay >> be a good idea to introduce an arch-specific kvm_state and move relate= d >> 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. >> =20 >=20 > The debate is really: >=20 > 1) should we remove all passing of kvm_state and just assume it's stati= c >=20 > 2) deal with a couple places in the code where we need to figure out ho= w > to get at kvm_state >=20 > 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. In the very worst case scenario, the thing we need to do i= s > 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). The PCI bus discussion is surely an interesting outcome, but now almost completely off-topic to the original, way less critical issue (as we were discussing internals). >=20 > I don't understand the resistance here. IMHO, most suggestions on the table are still over-designed (like a KVMBus that only passes a kvm_state - or do you have more features for it in mind?). The idea I love most so far is establishing a machine state that also carries those few KVM bits which correspond to the KVM extension of CPUState. But in the end I want an implementable consensus that helps moving forward with main topic: the overdue KVM upstream merge. I just do not have a clear picture yet. Jan --------------enig2D45B8E8219912F0FAC88365 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.15 (GNU/Linux) Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org/ iEYEARECAAYFAk04qN8ACgkQitSsb3rl5xS6GwCeKCB/1d9cziks8DBePcnXfb5M NbkAoKxvZjXD1ktXuYY3ZVA6Nl/UBZ9T =Nivw -----END PGP SIGNATURE----- --------------enig2D45B8E8219912F0FAC88365--