xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: George Dunlap <george.dunlap@eu.citrix.com>
To: George Dunlap <george.dunlap@eu.citrix.com>
Cc: Keir Fraser <keir@xen.org>, Tim Deegan <tim@xen.org>,
	Jan Beulich <jan.beulich@suse.com>,
	xen-devel@lists.xen.org
Subject: Re: [PATCH RFC v12 05/21] Introduce pv guest type and has_hvm_container macros
Date: Thu, 19 Sep 2013 17:58:49 +0100	[thread overview]
Message-ID: <523B2D49.5030902@eu.citrix.com> (raw)
In-Reply-To: <1379089521-25720-6-git-send-email-george.dunlap@eu.citrix.com>

On 13/09/13 17:25, George Dunlap wrote:
> The goal of this patch is to classify conditionals more clearly, as to
> whether they relate to pv guests, hvm-only guests, or guests with an
> "hvm container" (which will eventually include PVH).
>
> This patch introduces an enum for guest type, as well as two new macros
> for switching behavior on and off: is_pv_* and has_hvm_container_*.
>
> In general, a switch should use is_pv_* (or !is_pv_*) if the code in question
> relates directly to a PV guest.  Examples include use of pv_vcpu structs or
> other behavior directly related to PV domains.
>
> hvm_container is more of a fuzzy concept, but in general:
>
> * Most core HVM behavior will be included in this.  Behavior not
> appropriate for PVH mode will be disabled in later patches
>
> * Hypercalls related to HVM guests will *not* be included by default;
> functionality needed by PVH guests will be enabled in future patches
>
> * The following functionality are not considered part of the HVM
> container, and PVH will end up behaving like PV by default: Event
> channel, vtsc offset, code related to emulated timers, nested HVM,
> emuirq, PoD
>
> * Some features are left to implement for PVH later: vpmu, shadow mode
>
> Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
> Signed-off-by: Mukesh Rathor <mukesh.rathor@oracle.com>
> CC: Jan Beulich <jan.beulich@suse.com>
> CC: Tim Deegan <tim@xen.org>
> CC: Keir Fraser <keir@xen.org>
> ---
>   xen/arch/x86/acpi/suspend.c        |    2 +-
>   xen/arch/x86/cpu/mcheck/vmce.c     |    6 ++--
>   xen/arch/x86/debug.c               |    2 +-
>   xen/arch/x86/domain.c              |   54 ++++++++++++++++++------------------
>   xen/arch/x86/domain_page.c         |   10 +++----
>   xen/arch/x86/domctl.c              |   10 +++----
>   xen/arch/x86/efi/runtime.c         |    4 +--
>   xen/arch/x86/hvm/vmx/vmcs.c        |    4 +--
>   xen/arch/x86/mm.c                  |    6 ++--
>   xen/arch/x86/mm/shadow/common.c    |    6 ++--
>   xen/arch/x86/mm/shadow/multi.c     |    7 +++--
>   xen/arch/x86/physdev.c             |    4 +--
>   xen/arch/x86/traps.c               |    5 ++--
>   xen/arch/x86/x86_64/traps.c        |    8 +++---
>   xen/common/domain.c                |    2 +-
>   xen/common/grant_table.c           |    4 +--
>   xen/common/kernel.c                |    2 +-
>   xen/include/asm-x86/domain.h       |    2 +-
>   xen/include/asm-x86/event.h        |    2 +-
>   xen/include/asm-x86/guest_access.h |   12 ++++----
>   xen/include/asm-x86/guest_pt.h     |    4 +--
>   xen/include/xen/sched.h            |   14 ++++++++--
>   xen/include/xen/tmem_xen.h         |    2 +-
>   23 files changed, 91 insertions(+), 81 deletions(-)
>
> diff --git a/xen/arch/x86/acpi/suspend.c b/xen/arch/x86/acpi/suspend.c
> index c690b45..2b7aa3b 100644
> --- a/xen/arch/x86/acpi/suspend.c
> +++ b/xen/arch/x86/acpi/suspend.c
> @@ -78,7 +78,7 @@ void restore_rest_processor_state(void)
>       }
>   
>       /* Maybe load the debug registers. */
> -    BUG_ON(is_hvm_vcpu(curr));
> +    BUG_ON(has_hvm_container_vcpu(curr));
>       if ( !is_idle_vcpu(curr) && curr->arch.debugreg[7] )
>       {
>           write_debugreg(0, curr->arch.debugreg[0]);
> diff --git a/xen/arch/x86/cpu/mcheck/vmce.c b/xen/arch/x86/cpu/mcheck/vmce.c
> index af3b491..f6c35db 100644
> --- a/xen/arch/x86/cpu/mcheck/vmce.c
> +++ b/xen/arch/x86/cpu/mcheck/vmce.c
> @@ -83,7 +83,7 @@ int vmce_restore_vcpu(struct vcpu *v, const struct hvm_vmce_vcpu *ctxt)
>       {
>           dprintk(XENLOG_G_ERR, "%s restore: unsupported MCA capabilities"
>                   " %#" PRIx64 " for d%d:v%u (supported: %#Lx)\n",
> -                is_hvm_vcpu(v) ? "HVM" : "PV", ctxt->caps,
> +                has_hvm_container_vcpu(v) ? "HVM" : "PV", ctxt->caps,
>                   v->domain->domain_id, v->vcpu_id,
>                   guest_mcg_cap & ~MCG_CAP_COUNT);
>           return -EPERM;
> @@ -357,7 +357,7 @@ int inject_vmce(struct domain *d, int vcpu)
>           if ( vcpu != VMCE_INJECT_BROADCAST && vcpu != v->vcpu_id )
>               continue;
>   
> -        if ( (is_hvm_domain(d) ||
> +        if ( (has_hvm_container_domain(d) ||
>                 guest_has_trap_callback(d, v->vcpu_id, TRAP_machine_check)) &&
>                !test_and_set_bool(v->mce_pending) )
>           {
> @@ -439,7 +439,7 @@ int unmmap_broken_page(struct domain *d, mfn_t mfn, unsigned long gfn)
>       if (!mfn_valid(mfn_x(mfn)))
>           return -EINVAL;
>   
> -    if ( !is_hvm_domain(d) || !paging_mode_hap(d) )
> +    if ( !has_hvm_container_domain(d) || !paging_mode_hap(d) )
>           return -ENOSYS;
>   
>       rc = -1;
> diff --git a/xen/arch/x86/debug.c b/xen/arch/x86/debug.c
> index e67473e..3e21ca8 100644
> --- a/xen/arch/x86/debug.c
> +++ b/xen/arch/x86/debug.c
> @@ -158,7 +158,7 @@ dbg_rw_guest_mem(dbgva_t addr, dbgbyte_t *buf, int len, struct domain *dp,
>   
>           pagecnt = min_t(long, PAGE_SIZE - (addr & ~PAGE_MASK), len);
>   
> -        mfn = (dp->is_hvm
> +        mfn = (has_hvm_container_domain(dp)
>                  ? dbg_hvm_va2mfn(addr, dp, toaddr, &gfn)
>                  : dbg_pv_va2mfn(addr, dp, pgd3));
>           if ( mfn == INVALID_MFN )
> diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
> index a9e2383..5c38cb1 100644
> --- a/xen/arch/x86/domain.c
> +++ b/xen/arch/x86/domain.c
> @@ -167,7 +167,7 @@ void dump_pageframe_info(struct domain *d)
>           spin_unlock(&d->page_alloc_lock);
>       }
>   
> -    if ( is_hvm_domain(d) )
> +    if ( has_hvm_container_domain(d) )
>           p2m_pod_dump_data(d);
>   
>       spin_lock(&d->page_alloc_lock);
> @@ -385,7 +385,7 @@ int vcpu_initialise(struct vcpu *v)
>   
>       vmce_init_vcpu(v);
>   
> -    if ( is_hvm_domain(d) )
> +    if ( has_hvm_container_domain(d) )
>       {
>           rc = hvm_vcpu_initialise(v);
>           goto done;
> @@ -438,7 +438,7 @@ int vcpu_initialise(struct vcpu *v)
>       {
>           vcpu_destroy_fpu(v);
>   
> -        if ( !is_hvm_domain(d) )
> +        if ( is_pv_domain(d) )
>               xfree(v->arch.pv_vcpu.trap_ctxt);
>       }
>   
> @@ -452,7 +452,7 @@ void vcpu_destroy(struct vcpu *v)
>   
>       vcpu_destroy_fpu(v);
>   
> -    if ( is_hvm_vcpu(v) )
> +    if ( has_hvm_container_vcpu(v) )
>           hvm_vcpu_destroy(v);
>       else
>           xfree(v->arch.pv_vcpu.trap_ctxt);
> @@ -464,7 +464,7 @@ int arch_domain_create(struct domain *d, unsigned int domcr_flags)
>       int rc = -ENOMEM;
>   
>       d->arch.hvm_domain.hap_enabled =
> -        is_hvm_domain(d) &&
> +        has_hvm_container_domain(d) &&
>           hvm_funcs.hap_supported &&
>           (domcr_flags & DOMCRF_hap);
>       d->arch.hvm_domain.mem_sharing_enabled = 0;
> @@ -490,7 +490,7 @@ int arch_domain_create(struct domain *d, unsigned int domcr_flags)
>                  d->domain_id);
>       }
>   
> -    if ( is_hvm_domain(d) )
> +    if ( has_hvm_container_domain(d) )
>           rc = create_perdomain_mapping(d, PERDOMAIN_VIRT_START, 0, NULL, NULL);
>       else if ( is_idle_domain(d) )
>           rc = 0;
> @@ -512,7 +512,7 @@ int arch_domain_create(struct domain *d, unsigned int domcr_flags)
>       mapcache_domain_init(d);
>   
>       HYPERVISOR_COMPAT_VIRT_START(d) =
> -        is_hvm_domain(d) ? ~0u : __HYPERVISOR_COMPAT_VIRT_START;
> +        is_pv_domain(d) ? __HYPERVISOR_COMPAT_VIRT_START : ~0u;
>   
>       if ( (rc = paging_domain_init(d, domcr_flags)) != 0 )
>           goto fail;
> @@ -554,7 +554,7 @@ int arch_domain_create(struct domain *d, unsigned int domcr_flags)
>               goto fail;
>       }
>   
> -    if ( is_hvm_domain(d) )
> +    if ( has_hvm_container_domain(d) )
>       {
>           if ( (rc = hvm_domain_initialise(d)) != 0 )
>           {
> @@ -583,14 +583,14 @@ int arch_domain_create(struct domain *d, unsigned int domcr_flags)
>       if ( paging_initialised )
>           paging_final_teardown(d);
>       free_perdomain_mappings(d);
> -    if ( !is_hvm_domain(d) )
> +    if ( is_pv_domain(d) )
>           free_xenheap_page(d->arch.pv_domain.gdt_ldt_l1tab);
>       return rc;
>   }
>   
>   void arch_domain_destroy(struct domain *d)
>   {
> -    if ( is_hvm_domain(d) )
> +    if ( has_hvm_container_domain(d) )
>           hvm_domain_destroy(d);
>       else
>           xfree(d->arch.pv_domain.e820);
> @@ -602,7 +602,7 @@ void arch_domain_destroy(struct domain *d)
>       paging_final_teardown(d);
>   
>       free_perdomain_mappings(d);
> -    if ( !is_hvm_domain(d) )
> +    if ( is_pv_domain(d) )
>           free_xenheap_page(d->arch.pv_domain.gdt_ldt_l1tab);
>   
>       free_xenheap_page(d->shared_info);
> @@ -653,7 +653,7 @@ int arch_set_info_guest(
>   #define c(fld) (compat ? (c.cmp->fld) : (c.nat->fld))
>       flags = c(flags);
>   
> -    if ( !is_hvm_vcpu(v) )
> +    if ( is_pv_vcpu(v) )
>       {
>           if ( !compat )
>           {
> @@ -706,7 +706,7 @@ int arch_set_info_guest(
>       v->fpu_initialised = !!(flags & VGCF_I387_VALID);
>   
>       v->arch.flags &= ~TF_kernel_mode;
> -    if ( (flags & VGCF_in_kernel) || is_hvm_vcpu(v)/*???*/ )
> +    if ( (flags & VGCF_in_kernel) || has_hvm_container_vcpu(v)/*???*/ )
>           v->arch.flags |= TF_kernel_mode;
>   
>       v->arch.vgc_flags = flags;
> @@ -721,7 +721,7 @@ int arch_set_info_guest(
>       if ( !compat )
>       {
>           memcpy(&v->arch.user_regs, &c.nat->user_regs, sizeof(c.nat->user_regs));
> -        if ( !is_hvm_vcpu(v) )
> +        if ( is_pv_vcpu(v) )
>               memcpy(v->arch.pv_vcpu.trap_ctxt, c.nat->trap_ctxt,
>                      sizeof(c.nat->trap_ctxt));
>       }
> @@ -737,7 +737,7 @@ int arch_set_info_guest(
>   
>       v->arch.user_regs.eflags |= 2;
>   
> -    if ( is_hvm_vcpu(v) )
> +    if ( has_hvm_container_vcpu(v) )
>       {
>           hvm_set_info_guest(v);
>           goto out;
> @@ -966,7 +966,7 @@ int arch_set_info_guest(
>   
>   int arch_vcpu_reset(struct vcpu *v)
>   {
> -    if ( !is_hvm_vcpu(v) )
> +    if ( is_pv_vcpu(v) )
>       {
>           destroy_gdt(v);
>           return vcpu_destroy_pagetables(v);
> @@ -1316,7 +1316,7 @@ static void update_runstate_area(struct vcpu *v)
>   
>   static inline int need_full_gdt(struct vcpu *v)
>   {
> -    return (!is_hvm_vcpu(v) && !is_idle_vcpu(v));
> +    return (is_pv_vcpu(v) && !is_idle_vcpu(v));
>   }
>   
>   static void __context_switch(void)
> @@ -1438,9 +1438,9 @@ void context_switch(struct vcpu *prev, struct vcpu *next)
>       {
>           __context_switch();
>   
> -        if ( !is_hvm_vcpu(next) &&
> +        if ( is_pv_vcpu(next) &&
>                (is_idle_vcpu(prev) ||
> -              is_hvm_vcpu(prev) ||
> +              has_hvm_container_vcpu(prev) ||
>                 is_pv_32on64_vcpu(prev) != is_pv_32on64_vcpu(next)) )
>           {
>               uint64_t efer = read_efer();
> @@ -1451,13 +1451,13 @@ void context_switch(struct vcpu *prev, struct vcpu *next)
>           /* Re-enable interrupts before restoring state which may fault. */
>           local_irq_enable();
>   
> -        if ( !is_hvm_vcpu(next) )
> +        if ( is_pv_vcpu(next) )
>           {
>               load_LDT(next);
>               load_segments(next);
>           }
>   
> -        set_cpuid_faulting(!is_hvm_vcpu(next) &&
> +        set_cpuid_faulting(is_pv_vcpu(next) &&
>                              (next->domain->domain_id != 0));
>       }
>   
> @@ -1540,7 +1540,7 @@ void hypercall_cancel_continuation(void)
>       }
>       else
>       {
> -        if ( !is_hvm_vcpu(current) )
> +        if ( is_pv_vcpu(current) )
>               regs->eip += 2; /* skip re-execute 'syscall' / 'int $xx' */
>           else
>               current->arch.hvm_vcpu.hcall_preempted = 0;
> @@ -1577,12 +1577,12 @@ unsigned long hypercall_create_continuation(
>           regs->eax  = op;
>   
>           /* Ensure the hypercall trap instruction is re-executed. */
> -        if ( !is_hvm_vcpu(current) )
> +        if ( is_pv_vcpu(current) )
>               regs->eip -= 2;  /* re-execute 'syscall' / 'int $xx' */
>           else
>               current->arch.hvm_vcpu.hcall_preempted = 1;
>   
> -        if ( !is_hvm_vcpu(current) ?
> +        if ( is_pv_vcpu(current) ?
>                !is_pv_32on64_vcpu(current) :
>                (hvm_guest_x86_mode(current) == 8) )
>           {
> @@ -1850,7 +1850,7 @@ int domain_relinquish_resources(struct domain *d)
>                   return ret;
>           }
>   
> -        if ( !is_hvm_domain(d) )
> +        if ( is_pv_domain(d) )
>           {
>               for_each_vcpu ( d, v )
>               {
> @@ -1923,7 +1923,7 @@ int domain_relinquish_resources(struct domain *d)
>           BUG();
>       }
>   
> -    if ( is_hvm_domain(d) )
> +    if ( has_hvm_container_domain(d) )
>           hvm_domain_relinquish_resources(d);
>   
>       return 0;
> @@ -2007,7 +2007,7 @@ void vcpu_mark_events_pending(struct vcpu *v)
>       if ( already_pending )
>           return;
>   
> -    if ( is_hvm_vcpu(v) )
> +    if ( has_hvm_container_vcpu(v) )
>           hvm_assert_evtchn_irq(v);
>       else
>           vcpu_kick(v);
> diff --git a/xen/arch/x86/domain_page.c b/xen/arch/x86/domain_page.c
> index bc18263..b9db322 100644
> --- a/xen/arch/x86/domain_page.c
> +++ b/xen/arch/x86/domain_page.c
> @@ -35,7 +35,7 @@ static inline struct vcpu *mapcache_current_vcpu(void)
>        * then it means we are running on the idle domain's page table and must
>        * therefore use its mapcache.
>        */
> -    if ( unlikely(pagetable_is_null(v->arch.guest_table)) && !is_hvm_vcpu(v) )
> +    if ( unlikely(pagetable_is_null(v->arch.guest_table)) && is_pv_vcpu(v) )
>       {
>           /* If we really are idling, perform lazy context switch now. */
>           if ( (v = idle_vcpu[smp_processor_id()]) == current )
> @@ -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));
>   
>       dcache = &v->domain->arch.pv_domain.mapcache;
>       ASSERT(dcache->inuse);
> @@ -244,7 +244,7 @@ int mapcache_domain_init(struct domain *d)
>       struct mapcache_domain *dcache = &d->arch.pv_domain.mapcache;
>       unsigned int bitmap_pages;
>   
> -    if ( is_hvm_domain(d) || is_idle_domain(d) )
> +    if ( has_hvm_container_domain(d) || is_idle_domain(d) )
>           return 0;
>   
>   #ifdef NDEBUG
> @@ -275,7 +275,7 @@ int mapcache_vcpu_init(struct vcpu *v)
>       unsigned int ents = d->max_vcpus * MAPCACHE_VCPU_ENTRIES;
>       unsigned int nr = PFN_UP(BITS_TO_LONGS(ents) * sizeof(long));
>   
> -    if ( is_hvm_vcpu(v) || !dcache->inuse )
> +    if ( has_hvm_container_vcpu(v) || !dcache->inuse )
>           return 0;
>   
>       if ( ents > dcache->entries )
> diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
> index c2a04c4..e0e3fe7 100644
> --- a/xen/arch/x86/domctl.c
> +++ b/xen/arch/x86/domctl.c
> @@ -800,7 +800,7 @@ long arch_do_domctl(
>           if ( domctl->cmd == XEN_DOMCTL_get_ext_vcpucontext )
>           {
>               evc->size = sizeof(*evc);
> -            if ( !is_hvm_domain(d) )
> +            if ( is_pv_domain(d) )
>               {
>                   evc->sysenter_callback_cs      =
>                       v->arch.pv_vcpu.sysenter_callback_cs;
> @@ -833,7 +833,7 @@ long arch_do_domctl(
>               ret = -EINVAL;
>               if ( evc->size < offsetof(typeof(*evc), vmce) )
>                   goto ext_vcpucontext_out;
> -            if ( !is_hvm_domain(d) )
> +            if ( is_pv_domain(d) )
>               {
>                   if ( !is_canonical_address(evc->sysenter_callback_eip) ||
>                        !is_canonical_address(evc->syscall32_callback_eip) )
> @@ -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));
>       c(flags = v->arch.vgc_flags & ~(VGCF_i387_valid|VGCF_in_kernel));
> @@ -1248,7 +1248,7 @@ void arch_get_info_guest(struct vcpu *v, vcpu_guest_context_u c)
>       if ( !compat )
>       {
>           memcpy(&c.nat->user_regs, &v->arch.user_regs, sizeof(c.nat->user_regs));
> -        if ( !is_hvm_vcpu(v) )
> +        if ( is_pv_vcpu(v) )
>               memcpy(c.nat->trap_ctxt, v->arch.pv_vcpu.trap_ctxt,
>                      sizeof(c.nat->trap_ctxt));
>       }
> @@ -1263,7 +1263,7 @@ void arch_get_info_guest(struct vcpu *v, vcpu_guest_context_u c)
>       for ( i = 0; i < ARRAY_SIZE(v->arch.debugreg); ++i )
>           c(debugreg[i] = v->arch.debugreg[i]);
>   
> -    if ( is_hvm_vcpu(v) )
> +    if ( has_hvm_container_vcpu(v) )
>       {
>           struct segment_register sreg;
>   
> diff --git a/xen/arch/x86/efi/runtime.c b/xen/arch/x86/efi/runtime.c
> index 37bb535..d7c884b 100644
> --- a/xen/arch/x86/efi/runtime.c
> +++ b/xen/arch/x86/efi/runtime.c
> @@ -52,7 +52,7 @@ unsigned long efi_rs_enter(void)
>       /* prevent fixup_page_fault() from doing anything */
>       irq_enter();
>   
> -    if ( !is_hvm_vcpu(current) && !is_idle_vcpu(current) )
> +    if ( is_pv_vcpu(current) && !is_idle_vcpu(current) )
>       {
>           struct desc_ptr gdt_desc = {
>               .limit = LAST_RESERVED_GDT_BYTE,
> @@ -71,7 +71,7 @@ unsigned long efi_rs_enter(void)
>   void efi_rs_leave(unsigned long cr3)
>   {
>       write_cr3(cr3);
> -    if ( !is_hvm_vcpu(current) && !is_idle_vcpu(current) )
> +    if ( is_pv_vcpu(current) && !is_idle_vcpu(current) )
>       {
>           struct desc_ptr gdt_desc = {
>               .limit = LAST_RESERVED_GDT_BYTE,
> diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c
> index 0620f87..7087630 100644
> --- a/xen/arch/x86/hvm/vmx/vmcs.c
> +++ b/xen/arch/x86/hvm/vmx/vmcs.c
> @@ -637,7 +637,7 @@ void vmx_vmcs_exit(struct vcpu *v)
>       {
>           /* Don't confuse vmx_do_resume (for @v or @current!) */
>           vmx_clear_vmcs(v);
> -        if ( is_hvm_vcpu(current) )
> +        if ( has_hvm_container_vcpu(current) )
>               vmx_load_vmcs(current);
>   
>           spin_unlock(&v->arch.hvm_vmx.vmcs_lock);
> @@ -1477,7 +1477,7 @@ static void vmcs_dump(unsigned char ch)
>   
>       for_each_domain ( d )
>       {
> -        if ( !is_hvm_domain(d) )
> +        if ( !has_hvm_container_domain(d) )
>               continue;
>           printk("\n>>> Domain %d <<<\n", d->domain_id);
>           for_each_vcpu ( d, v )
> diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
> index e7f0e13..120599a 100644
> --- a/xen/arch/x86/mm.c
> +++ b/xen/arch/x86/mm.c
> @@ -181,7 +181,7 @@ static uint32_t base_disallow_mask;
>        (rangeset_is_empty((d)->iomem_caps) &&                     \
>         rangeset_is_empty((d)->arch.ioport_caps) &&               \
>         !has_arch_pdevs(d) &&                                     \
> -      !is_hvm_domain(d)) ?                                      \
> +      is_pv_domain(d)) ?                                        \
>        L1_DISALLOW_MASK : (L1_DISALLOW_MASK & ~PAGE_CACHE_ATTRS))
>   
>   static void __init init_frametable_chunk(void *start, void *end)
> @@ -433,7 +433,7 @@ int page_is_ram_type(unsigned long mfn, unsigned long mem_type)
>   
>   unsigned long domain_get_maximum_gpfn(struct domain *d)
>   {
> -    if ( is_hvm_domain(d) )
> +    if ( has_hvm_container_domain(d) )
>           return p2m_get_hostp2m(d)->max_mapped_pfn;
>       /* NB. PV guests specify nr_pfns rather than max_pfn so we adjust here. */
>       return (arch_get_max_pfn(d) ?: 1) - 1;
> @@ -2379,7 +2379,7 @@ static int __get_page_type(struct page_info *page, unsigned long type,
>       {
>           /* Special pages should not be accessible from devices. */
>           struct domain *d = page_get_owner(page);
> -        if ( d && !is_hvm_domain(d) && unlikely(need_iommu(d)) )
> +        if ( d && is_pv_domain(d) && unlikely(need_iommu(d)) )
>           {
>               if ( (x & PGT_type_mask) == PGT_writable_page )
>                   iommu_unmap_page(d, mfn_to_gmfn(d, page_to_mfn(page)));

This is one in particular I couldn't quite figure out what the PV/HVM 
split was for, so I couldn't figure out whether to take this conditional 
for PVH or not.

I think this is probably correct, as in common/grant_table.c, there is 
in one location under "need_iommu" the following two lines:

         /* Shouldn't happen, because you can't use iommu in a HVM 
domain. */
         BUG_ON(paging_mode_translate(ld));

Not sure exactly what the comment means...

  -George

  parent reply	other threads:[~2013-09-19 16:58 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
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 [this message]
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=523B2D49.5030902@eu.citrix.com \
    --to=george.dunlap@eu.citrix.com \
    --cc=jan.beulich@suse.com \
    --cc=keir@xen.org \
    --cc=tim@xen.org \
    --cc=xen-devel@lists.xen.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).