From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:34531) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TvZCs-0006w0-15 for qemu-devel@nongnu.org; Wed, 16 Jan 2013 15:03:32 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TvZCq-0002Du-PP for qemu-devel@nongnu.org; Wed, 16 Jan 2013 15:03:29 -0500 Received: from e06smtp16.uk.ibm.com ([195.75.94.112]:48703) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TvZCq-0002Dg-Gt for qemu-devel@nongnu.org; Wed, 16 Jan 2013 15:03:28 -0500 Received: from /spool/local by e06smtp16.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 16 Jan 2013 20:02:14 -0000 Received: from d06av04.portsmouth.uk.ibm.com (d06av04.portsmouth.uk.ibm.com [9.149.37.216]) by b06cxnps3074.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0GK3DKe62128260 for ; Wed, 16 Jan 2013 20:03:13 GMT Received: from d06av04.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av04.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0GK3LfL032408 for ; Wed, 16 Jan 2013 13:03:21 -0700 Message-ID: <50F70788.5020607@de.ibm.com> Date: Wed, 16 Jan 2013 21:03:20 +0100 From: Christian Borntraeger MIME-Version: 1.0 References: <1357831744-3950-1-git-send-email-jjherne@us.ibm.com> <20130116160533.GA8541@amt.cnet> In-Reply-To: <20130116160533.GA8541@amt.cnet> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 4/7 v2] KVM regsync: Add register bitmap parameter to do_kvm_cpu_synchronize_state List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Marcelo Tosatti Cc: agraf@suse.de, aliguori@us.ibm.com, jan.kiszka@siemens.com, qemu-devel@nongnu.org, "Jason J. Herne" , R65777@freescale.com On 16/01/13 17:05, Marcelo Tosatti wrote: > The S/390 problem, from > http://lists.nongnu.org/archive/html/qemu-devel/2012-11/msg02213.html: > > ">>> The kvm register sync needs to happen in the kvm register sync >>>> function :) >>> That would eliminate the whole purpose of sync regs and forces us to >>> have an >>> expensive ioctl on lots of exits (again). I would prefer to sync the >>> registers >>> that we never need in qemu just here. >> >> That's why the register sync has different stages. > > Not the get_register. Which is called on every synchronize_state. Which > happen > quite often > on s390." > > But wait: on these S/390 codepaths, you do GET_REGS already, via > cpu_synchronize_state. > > So on S/390 > > - cpu_synchronize_state(env) > - read any register from env > > Is not valid? This is what generic code assumes. TO recap the motiviation: cpu_synchronize_state on s390 currently updates any register in env that is used by qemu (general purpose, prefix, psw, control and access) in the normal runtime. it turns out we have all of these regs in kvm_run, so we can do synchronize states without doing an additional ioctl call. Now, for life migration and dump we need some additional registers (which are only accessable via onereg interface). So synchronize_state would need to do 3 or 4 additional system calls on the hot path, only to take care of something that is not on the hot path at all. For historic reasons, we have one exit code for almost all exits. Therefore, we need to call synchronize_states almost always. We could now start to have a poor mans synchronize_state in arch code, but that would collide with common code synchronize_state if done at the wrong time. Thus we want to make common code capable of having only a subset of the register synched - by making it possible to sync the other regs later on if needed without wiping the former sync. Makes sense? Christian