All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: Avi Kivity <avi-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: kvm-ppc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 01/15] KVM: PPC: Make register read/write wrappers always
Date: Mon, 08 Mar 2010 14:14:05 +0000	[thread overview]
Message-ID: <4B95062D.2020908@suse.de> (raw)
In-Reply-To: <4B950475.1020106-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.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

WARNING: multiple messages have this Message-ID (diff)
From: Alexander Graf <agraf-l3A5Bk7waGM@public.gmane.org>
To: Avi Kivity <avi-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: kvm-ppc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 01/15] KVM: PPC: Make register read/write wrappers always work
Date: Mon, 08 Mar 2010 15:14:05 +0100	[thread overview]
Message-ID: <4B95062D.2020908@suse.de> (raw)
In-Reply-To: <4B950475.1020106-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.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

  parent reply	other threads:[~2010-03-08 14:14 UTC|newest]

Thread overview: 140+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-05 16:50 [PATCH 00/15] KVM: PPC: MOL bringup patches Alexander Graf
2010-03-05 16:50 ` Alexander Graf
2010-03-05 16:50 ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always work Alexander Graf
2010-03-05 16:50   ` Alexander Graf
     [not found]   ` <1267807842-3751-2-git-send-email-agraf-l3A5Bk7waGM@public.gmane.org>
2010-03-08 13:40     ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always Avi Kivity
2010-03-08 13:40       ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always work Avi Kivity
     [not found]       ` <4B94FE41.1040904-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-03-08 13:44         ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always Alexander Graf
2010-03-08 13:44           ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always work Alexander Graf
     [not found]           ` <4B94FF56.9060200-l3A5Bk7waGM@public.gmane.org>
2010-03-08 13:50             ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always Avi Kivity
2010-03-08 13:50               ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always work Avi Kivity
2010-03-08 13:53               ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always Alexander Graf
2010-03-08 13:53                 ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always work Alexander Graf
     [not found]                 ` <4B950174.7010709-l3A5Bk7waGM@public.gmane.org>
2010-03-08 14:06                   ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always Avi Kivity
2010-03-08 14:06                     ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always work Avi Kivity
     [not found]                     ` <4B950475.1020106-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-03-08 14:14                       ` Alexander Graf [this message]
2010-03-08 14:14                         ` Alexander Graf
     [not found]                         ` <4B95062D.2020908-l3A5Bk7waGM@public.gmane.org>
2010-03-08 14:16                           ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always Avi Kivity
2010-03-08 14:16                             ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always work Avi Kivity
     [not found]                             ` <4B9506C5.30606-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-03-08 14:20                               ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always Alexander Graf
2010-03-08 14:20                                 ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always work Alexander Graf
2010-03-08 14:23                                 ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always Avi Kivity
2010-03-08 14:23                                   ` [PATCH 01/15] KVM: PPC: Make register read/write wrappers always work Avi Kivity
     [not found] ` <1267807842-3751-1-git-send-email-agraf-l3A5Bk7waGM@public.gmane.org>
2010-03-05 16:50   ` [PATCH 02/15] KVM: PPC: Ensure split mode works Alexander Graf
2010-03-05 16:50     ` Alexander Graf
2010-03-05 16:50   ` [PATCH 04/15] KVM: PPC: Make DSISR 32 bits wide Alexander Graf
2010-03-05 16:50     ` Alexander Graf
2010-03-05 16:50   ` [PATCH 05/15] KVM: PPC: Book3S_32 guest MMU fixes Alexander Graf
2010-03-05 16:50     ` Alexander Graf
2010-03-05 16:50   ` [PATCH 10/15] KVM: PPC: Implement BAT reads Alexander Graf
2010-03-05 16:50     ` Alexander Graf
2010-03-05 16:50   ` [PATCH 13/15] KVM: PPC: Implement alignment interrupt Alexander Graf
2010-03-05 16:50     ` Alexander Graf
2010-03-05 16:50 ` [PATCH 03/15] KVM: PPC: Allow userspace to unset the IRQ line Alexander Graf
2010-03-05 16:50   ` Alexander Graf
     [not found]   ` <1267807842-3751-4-git-send-email-agraf-l3A5Bk7waGM@public.gmane.org>
2010-03-08 13:44     ` Avi Kivity
2010-03-08 13:44       ` Avi Kivity
     [not found]       ` <4B94FF27.5010800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-03-08 13:48         ` Alexander Graf
2010-03-08 13:48           ` Alexander Graf
2010-03-08 13:52           ` Avi Kivity
2010-03-08 13:52             ` Avi Kivity
2010-03-08 13:55             ` Alexander Graf
2010-03-08 13:55               ` Alexander Graf
2010-03-08 13:58               ` Avi Kivity
2010-03-08 13:58                 ` Avi Kivity
     [not found]                 ` <4B95029C.6000800-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-03-08 14:01                   ` Alexander Graf
2010-03-08 14:01                     ` Alexander Graf
2010-03-08 14:09                     ` Avi Kivity
2010-03-08 14:09                       ` Avi Kivity
2010-03-05 16:50 ` [PATCH 06/15] KVM: PPC: Split instruction reading out Alexander Graf
2010-03-05 16:50   ` Alexander Graf
2010-03-05 16:50 ` [PATCH 07/15] KVM: PPC: Don't reload FPU with invalid values Alexander Graf
2010-03-05 16:50   ` Alexander Graf
2010-03-05 16:50 ` [PATCH 08/15] KVM: PPC: Load VCPU for register fetching Alexander Graf
2010-03-05 16:50   ` Alexander Graf
2010-03-05 16:50 ` [PATCH 09/15] KVM: PPC: Implement mfsr emulation Alexander Graf
2010-03-05 16:50   ` Alexander Graf
2010-03-05 16:50 ` [PATCH 11/15] KVM: PPC: Make XER load 32 bit Alexander Graf
2010-03-05 16:50   ` Alexander Graf
2010-03-05 16:50 ` [PATCH 12/15] KVM: PPC: Implement emulation for lbzux and lhax Alexander Graf
2010-03-05 16:50   ` Alexander Graf
2010-03-05 16:50 ` [PATCH 14/15] KVM: Add support for enabling capabilities per-vcpu Alexander Graf
2010-03-05 16:50   ` Alexander Graf
     [not found]   ` <1267807842-3751-15-git-send-email-agraf-l3A5Bk7waGM@public.gmane.org>
2010-03-08 13:49     ` Avi Kivity
2010-03-08 13:49       ` Avi Kivity
     [not found]       ` <4B950057.1090204-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-03-08 13:51         ` Alexander Graf
2010-03-08 13:51           ` Alexander Graf
     [not found]           ` <4B9500D1.2060008-l3A5Bk7waGM@public.gmane.org>
2010-03-08 13:52             ` Avi Kivity
2010-03-08 13:52               ` Avi Kivity
     [not found]               ` <4B95012B.3030505-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-03-08 13:56                 ` Alexander Graf
2010-03-08 13:56                   ` Alexander Graf
2010-03-08 14:02                   ` Avi Kivity
2010-03-08 14:02                     ` Avi Kivity
2010-03-08 14:10                     ` Alexander Graf
2010-03-08 14:10                       ` Alexander Graf
     [not found]                       ` <4B950562.6050509-l3A5Bk7waGM@public.gmane.org>
2010-03-08 14:14                         ` Avi Kivity
2010-03-08 14:14                           ` Avi Kivity
     [not found]                           ` <4B950656.4010307-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-03-08 14:18                             ` Alexander Graf
2010-03-08 14:18                               ` Alexander Graf
2010-03-08 14:21                               ` Avi Kivity
2010-03-08 14:21                                 ` Avi Kivity
2010-03-05 16:50 ` [PATCH 15/15] KVM: PPC: Add OSI hypercall interface Alexander Graf
2010-03-05 16:50   ` Alexander Graf
2010-03-08 18:03 ` [PATCH 00/15] KVM: PPC: MOL bringup patches Alexander Graf
2010-03-08 18:03   ` Alexander Graf
     [not found]   ` <1268071402-27112-1-git-send-email-agraf-l3A5Bk7waGM@public.gmane.org>
2010-03-08 18:03     ` [PATCH 01/15] KVM: PPC: Ensure split mode works Alexander Graf
2010-03-08 18:03       ` Alexander Graf
2010-03-08 18:03     ` [PATCH 03/15] KVM: PPC: Make DSISR 32 bits wide Alexander Graf
2010-03-08 18:03       ` Alexander Graf
2010-03-08 18:03     ` [PATCH 05/15] KVM: PPC: Split instruction reading out Alexander Graf
2010-03-08 18:03       ` Alexander Graf
2010-03-08 18:03     ` [PATCH 07/15] KVM: PPC: Load VCPU for register fetching Alexander Graf
2010-03-08 18:03       ` Alexander Graf
2010-03-08 18:03     ` [PATCH 08/15] KVM: PPC: Implement mfsr emulation Alexander Graf
2010-03-08 18:03       ` Alexander Graf
2010-03-08 18:03     ` [PATCH 12/15] KVM: PPC: Implement alignment interrupt Alexander Graf
2010-03-08 18:03       ` Alexander Graf
2010-03-08 18:03     ` [PATCH 13/15] KVM: Add support for enabling capabilities per-vcpu Alexander Graf
2010-03-08 18:03       ` Alexander Graf
2010-03-09 12:56       ` Avi Kivity
2010-03-09 12:56         ` Avi Kivity
2010-03-09 13:01         ` Alexander Graf
2010-03-09 13:01           ` Alexander Graf
2010-03-09 13:09           ` Avi Kivity
2010-03-09 13:09             ` Avi Kivity
2010-03-08 18:03     ` [PATCH 14/15] KVM: PPC: Add OSI hypercall interface Alexander Graf
2010-03-08 18:03       ` Alexander Graf
2010-03-09 13:00       ` Avi Kivity
2010-03-09 13:00         ` Avi Kivity
2010-03-09 13:04         ` Alexander Graf
2010-03-09 13:04           ` Alexander Graf
2010-03-09 13:11           ` Avi Kivity
2010-03-09 13:11             ` Avi Kivity
2010-03-09 13:12             ` Alexander Graf
2010-03-09 13:12               ` Alexander Graf
     [not found]               ` <3D0D6963-FEC8-4A53-ACCE-570BEAF3721B-l3A5Bk7waGM@public.gmane.org>
2010-03-09 13:19                 ` Avi Kivity
2010-03-09 13:19                   ` Avi Kivity
     [not found]                   ` <4B964ADE.5030200-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-03-09 13:20                     ` Alexander Graf
2010-03-09 13:20                       ` Alexander Graf
2010-03-08 18:03     ` [PATCH 15/15] KVM: PPC: Make build work without CONFIG_VSX/ALTIVEC Alexander Graf
2010-03-08 18:03       ` Alexander Graf
2010-03-08 18:03   ` [PATCH 02/15] KVM: PPC: Allow userspace to unset the IRQ line Alexander Graf
2010-03-08 18:03     ` Alexander Graf
     [not found]     ` <1268071402-27112-3-git-send-email-agraf-l3A5Bk7waGM@public.gmane.org>
2010-03-09 12:50       ` Avi Kivity
2010-03-09 12:50         ` Avi Kivity
     [not found]         ` <4B964412.8030708-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-03-09 12:54           ` Alexander Graf
2010-03-09 12:54             ` Alexander Graf
     [not found]             ` <954C5195-A8E4-4CA5-8D5E-AA21E2E21C5B-l3A5Bk7waGM@public.gmane.org>
2010-03-09 13:05               ` Avi Kivity
2010-03-09 13:05                 ` Avi Kivity
2010-03-08 18:03   ` [PATCH 04/15] KVM: PPC: Book3S_32 guest MMU fixes Alexander Graf
2010-03-08 18:03     ` Alexander Graf
2010-03-08 18:03   ` [PATCH 06/15] KVM: PPC: Don't reload FPU with invalid values Alexander Graf
2010-03-08 18:03     ` Alexander Graf
2010-03-08 18:03   ` [PATCH 09/15] KVM: PPC: Implement BAT reads Alexander Graf
2010-03-08 18:03     ` Alexander Graf
2010-03-08 18:03   ` [PATCH 10/15] KVM: PPC: Make XER load 32 bit Alexander Graf
2010-03-08 18:03     ` Alexander Graf
2010-03-08 18:03   ` [PATCH 11/15] KVM: PPC: Implement emulation for lbzux and lhax Alexander Graf
2010-03-08 18:03     ` Alexander Graf
2010-03-08 18:06   ` [PATCH 00/15] KVM: PPC: MOL bringup patches Alexander Graf
2010-03-08 18:06     ` Alexander Graf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4B95062D.2020908@suse.de \
    --to=agraf@suse.de \
    --cc=avi-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=kvm-ppc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.