From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Graf Subject: Re: [PATCH 01/15] KVM: PPC: Make register read/write wrappers always work Date: Mon, 08 Mar 2010 15:14:05 +0100 Message-ID: <4B95062D.2020908@suse.de> References: <1267807842-3751-1-git-send-email-agraf@suse.de> <1267807842-3751-2-git-send-email-agraf@suse.de> <4B94FE41.1040904@redhat.com> <4B94FF56.9060200@suse.de> <4B9500B2.7030708@redhat.com> <4B950174.7010709@suse.de> <4B950475.1020106@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: kvm-ppc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Avi Kivity Return-path: In-Reply-To: <4B950475.1020106-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> Sender: kvm-ppc-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: kvm.vger.kernel.org Avi Kivity wrote: > On 03/08/2010 03:53 PM, Alexander Graf wrote: >> >>> So do it the other way around. Always load the registers (of course, >>> do nothing if already loaded) and then access them in just one way. I >>> assume during emulation the registers will always be loaded? >>> >> During emulation we're always in VCPU_RUN, so the vcpu is loaded. >> >> Do you mean something like: >> >> read_register(num) { >> vcpu_load(); >> read register from PACA(num); >> vcpu_put(); >> } >> >> ? Does vcpu_load incur overhead when it doesnt' need to do anything? >> > > If the vcpu is always loaded, this would be redundant, no? > > The situation is that a piece of data is in one of two places. > Instead of checking and loading it from either, force it to the place > where it normally is, and load it from there. > > So instead of > > if (x) > y = p1; > else > y = p2; > > in a zillion places, just do > > force_to_p2(); // the common case anyway > y = p2; > > which results in cleaner code. Assuming that you have a common case > of course. We're looking at two different ifs here. 1) GPR Inside the PACA or not (volatile vs non-volatile) This is constant. Volatile registers go to the PACA; non-volatiles go to the vcpu struct. 2) GPR actually loaded in the PACA When we're in vcpu_load context the registers in the PACA, when not they're in the vcpu struct If you have a really easy and fast way to assure that we're always inside a vcpu_load context, all is great. I could probably even just put in a BUG_ON(not in vcpu_load context) and make the callers safe. But some check needs to be done. Alex