xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: George Dunlap <george.dunlap@eu.citrix.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>,
	Keir Fraser <keir@xen.org>, Tim Deegan <tim@xen.org>
Subject: Re: [PATCH RFC v12 05/21] Introduce pv guest type and has_hvm_container macros
Date: Thu, 19 Sep 2013 17:27:53 +0100	[thread overview]
Message-ID: <523B2609.7030809@eu.citrix.com> (raw)
In-Reply-To: <5239CAD002000078000F4616@nat28.tlf.novell.com>

On 18/09/13 14:46, Jan Beulich wrote:
>>>> On 13.09.13 at 18:25, George Dunlap <george.dunlap@eu.citrix.com> wrote:
>> @@ -72,7 +72,7 @@ void *map_domain_page(unsigned long mfn)
>>   #endif
>>   
>>       v = mapcache_current_vcpu();
>> -    if ( !v || is_hvm_vcpu(v) )
>> +    if ( !v || has_hvm_container_vcpu(v) )
>>           return mfn_to_virt(mfn);
>>   
>>       dcache = &v->domain->arch.pv_domain.mapcache;
>> @@ -177,7 +177,7 @@ void unmap_domain_page(const void *ptr)
>>       ASSERT(va >= MAPCACHE_VIRT_START && va < MAPCACHE_VIRT_END);
>>   
>>       v = mapcache_current_vcpu();
>> -    ASSERT(v && !is_hvm_vcpu(v));
>> +    ASSERT(v && is_pv_vcpu(v));
> This is inconsistent with the above change to map_domain_page()
> and the changes later in this file.

You mean, making this "is_pv_vcpu" instead of 
"!has_hvm_container_vcpu"?  I guess that's true.

>
>> @@ -1237,7 +1237,7 @@ void arch_get_info_guest(struct vcpu *v, vcpu_guest_context_u c)
>>       bool_t compat = is_pv_32on64_domain(v->domain);
>>   #define c(fld) (!compat ? (c.nat->fld) : (c.cmp->fld))
>>   
>> -    if ( is_hvm_vcpu(v) )
>> +    if ( has_hvm_container_vcpu(v) )
>>           memset(c.nat, 0, sizeof(*c.nat));
>>       memcpy(&c.nat->fpu_ctxt, v->arch.fpu_ctxt, sizeof(c.nat->fpu_ctxt));
> I think best would be to drop the condition here altogether.

Ack.

>
>> --- a/xen/arch/x86/traps.c
>> +++ b/xen/arch/x86/traps.c
>> @@ -119,6 +119,7 @@ static void show_guest_stack(struct vcpu *v, struct cpu_user_regs *regs)
>>       unsigned long *stack, addr;
>>       unsigned long mask = STACK_SIZE;
>>   
>> +    /* Avoid HVM as we don't know what the stack looks like */
>>       if ( is_hvm_vcpu(v) )
> So why do you not change this one to !is_pv_vcpu()? In particular
> the do_page_walk() further down is inherently PV.

I guess it depends.  I was thinking that the reason we didn't do this 
for HVM guests was that there was no guarantee what the stack looked 
like -- it looks like another aspect is that for VMs that are not 
current, whether the PTs are controlled by Xen or the guest is a factor.

But if we make do_page_walk gated on is_pv_vcpu(), then it seems like it 
should work when v==current, and fail gracefully when v!=current.

>
>> @@ -732,8 +736,12 @@ void watchdog_domain_destroy(struct domain *d);
>>   
>>   #define VM_ASSIST(_d,_t) (test_bit((_t), &(_d)->vm_assist))
>>   
>> -#define is_hvm_domain(d) ((d)->is_hvm)
>> +#define is_pv_domain(d) ((d)->guest_type == guest_type_pv)
>> +#define is_pv_vcpu(v)   (is_pv_domain((v)->domain))
>> +#define is_hvm_domain(d) ((d)->guest_type == guest_type_hvm)
>>   #define is_hvm_vcpu(v)   (is_hvm_domain(v->domain))
>> +#define has_hvm_container_domain(d) ((d)->guest_type != guest_type_pv)
>> +#define has_hvm_container_vcpu(v)   (has_hvm_container_domain((v)->domain))
> So in the end is_pv_...() = !has_hvm_container_...(), i.e. I
> don't really see the point in having both.

Yes, is_pv <=> !has_hvm_container.  My original goal with having 
something different between the two was to try to hint to the coder 
whether the check had something to do with PV stuff or with HVM stuff.  
For example, in arch_set_info_guest(), at the top, it uses "is_pv" 
because the various selectors are only fixed up for PV guests; in 
arch_vcpu_reset() it's "is_pv" because it's related to destroying 
PV-only structures.  Whereas in, say, domain_relinquish_resources, the 
call to hvm_domain_relinquish_resources() is gated on has_hvm_container, 
because it has to do with HVM structures; and in vmcs_dump() it's 
"!has_hvm_container" instead if "is_pv" for the same reasons.

I can see now that this hasn't been consistently applied; for one, in 
many places the patch still assumes two alternatives.  And in the 
map_domain_page() functions, it looks like it should be "!is_pv", since 
it appears only PV guests have per-domain mapcache structures.

It still makes more sense to me to have two different labels, because to 
me they don't seem like the same thing: Taking a codepath because you 
*don't* have PV structures is different than taking a codepath because 
you *do* have HVM structures, even if it happens that at the moment the 
two happen to coincide 100% of the time.

  -George

  reply	other threads:[~2013-09-19 16:28 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-13 16:25 Introduce PVH domU support George Dunlap
2013-09-13 16:25 ` [PATCH RFC v12 01/21] Fix failure path in hvm_vcpu_initialise George Dunlap
2013-09-13 16:25 ` [PATCH RFC v12 02/21] Fix failure path in construct_vmcs George Dunlap
2013-09-13 16:25 ` [PATCH RFC v12 03/21] Remove an unnecessary assert from vmx_update_debug_state George Dunlap
2013-09-16 21:09   ` Mukesh Rathor
2013-09-18 10:39     ` George Dunlap
2013-09-18 12:38       ` Jan Beulich
2013-09-18 12:53         ` George Dunlap
2013-09-18 13:51           ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 04/21] pvh prep: code motion George Dunlap
2013-09-18 12:59   ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 05/21] Introduce pv guest type and has_hvm_container macros George Dunlap
2013-09-18 13:46   ` Jan Beulich
2013-09-19 16:27     ` George Dunlap [this message]
2013-09-20  8:11       ` Jan Beulich
2013-09-20  9:23         ` George Dunlap
2013-09-20  9:44           ` Jan Beulich
2013-09-19 16:58   ` George Dunlap
2013-09-20  8:38     ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 06/21] pvh: Introduce PVH guest type George Dunlap
2013-09-18 14:10   ` Jan Beulich
2013-09-20 10:01     ` George Dunlap
2013-09-13 16:25 ` [PATCH RFC v12 07/21] pvh: Disable unneeded features of HVM containers George Dunlap
2013-09-13 16:36   ` George Dunlap
     [not found]     ` <CAGU+aus16muryVYd-aOzv-CAXPk_xxVh_e-R7Ug1RxGRJ_MAfQ@mail.gmail.com>
2013-09-13 21:33       ` Aravindh Puthiyaparambil (aravindp)
2013-09-16 23:17     ` Mukesh Rathor
2013-09-18 10:50       ` George Dunlap
2013-09-18 14:18   ` Jan Beulich
2013-09-18 14:43     ` George Dunlap
2013-09-18 14:47       ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 08/21] pvh: vmx-specific changes George Dunlap
2013-09-13 16:38   ` George Dunlap
2013-09-16  7:37     ` Jan Beulich
2013-09-16  9:15       ` George Dunlap
2013-09-16 23:12     ` Mukesh Rathor
2013-09-17  8:48       ` George Dunlap
2013-09-18  0:13         ` Mukesh Rathor
2013-09-18 14:25   ` Jan Beulich
2013-09-20 13:07     ` George Dunlap
2013-09-13 16:25 ` [PATCH RFC v12 09/21] pvh: Do not allow PVH guests to change paging modes George Dunlap
2013-09-18 14:32   ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 10/21] pvh: PVH access to hypercalls George Dunlap
2013-09-18 14:45   ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 11/21] pvh: Use PV e820 George Dunlap
2013-09-18 14:48   ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 12/21] pvh: Support guest_kernel_mode for PVH George Dunlap
2013-09-18 14:52   ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 13/21] pvh: Support read_segment_register " George Dunlap
2013-09-18 14:56   ` Jan Beulich
2013-09-20 14:18     ` George Dunlap
2013-09-20 14:56       ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 14/21] pvh: read_descriptor for PVH guests George Dunlap
2013-09-13 16:40   ` George Dunlap
2013-09-18 15:00   ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 15/21] pvh: Set up more PV stuff in set_info_guest George Dunlap
2013-09-18 15:17   ` Jan Beulich
2013-09-20 14:50     ` George Dunlap
2013-09-20 14:58       ` Jan Beulich
2013-09-20 15:12         ` George Dunlap
2013-09-20 15:26           ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 16/21] pvh: Use PV handlers for emulated forced invalid ops, cpuid, and IO George Dunlap
2013-09-18 15:31   ` Jan Beulich
2013-09-19  1:02     ` Mukesh Rathor
2013-09-19 10:09       ` Jan Beulich
2013-09-20 17:03         ` George Dunlap
2013-09-20 17:06           ` George Dunlap
2013-09-23  6:49           ` Jan Beulich
2013-09-23 13:48     ` George Dunlap
2013-09-23 14:09       ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 17/21] pvh: Disable 32-bit guest support for now George Dunlap
2013-09-18 15:36   ` Jan Beulich
2013-09-13 16:25 ` [PATCH RFC v12 18/21] pvh: Restrict tsc_mode to NEVER_EMULATE " George Dunlap
2013-09-13 16:25 ` [PATCH RFC v12 19/21] pvh: Disable debug traps when doing pv emulation for PVH domains George Dunlap
2013-09-13 16:25 ` [PATCH RFC v12 20/21] pvh: Disable memevents for PVH guests for now George Dunlap
2013-09-13 16:25 ` [PATCH RFC v12 21/21] pvh: Documentation George Dunlap
2013-09-13 16:41 ` Introduce PVH domU support George Dunlap

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=523B2609.7030809@eu.citrix.com \
    --to=george.dunlap@eu.citrix.com \
    --cc=JBeulich@suse.com \
    --cc=keir@xen.org \
    --cc=tim@xen.org \
    --cc=xen-devel@lists.xenproject.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).