From patchwork Tue Feb 28 17:39:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Roger_Pau_Monn=C3=A9?= X-Patchwork-Id: 9596433 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D3A2F60453 for ; Tue, 28 Feb 2017 17:42:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C8622201BC for ; Tue, 28 Feb 2017 17:42:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BD0B6205FC; Tue, 28 Feb 2017 17:42:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id C1D83201BC for ; Tue, 28 Feb 2017 17:42:25 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cilki-0003mZ-Qy; Tue, 28 Feb 2017 17:39:56 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cilkg-0003lL-NJ for xen-devel@lists.xenproject.org; Tue, 28 Feb 2017 17:39:55 +0000 Received: from [85.158.137.68] by server-12.bemta-3.messagelabs.com id 09/69-20054-AE5B5B85; Tue, 28 Feb 2017 17:39:54 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrFIsWRWlGSWpSXmKPExsXitHSDve7LrVs jDD6d4LX4vmUykwOjx+EPV1gCGKNYM/OS8isSWDPO9ncxFyyZylTR+mcecwPjsUuMXYycHBIC /hLzHj5kBbHZBHQkLs7dydbFyMEhIqAicXuvQRcjFwezwFdmie17pzOB1AgLOEt0Pt3FDGKzC KhKPD+7B6yeV8BSYk6fBcRIPYldR36DjeQUsJLY96EPrFwIqOTy9Hdga3kFBCVOznzCAmIzC2 hKtG7/zQ5hy0s0b50NVa8o0T/vAdsERr5ZSFpmIWmZhaRlASPzKkaN4tSistQiXUMDvaSizPS MktzEzBwgz1gvN7W4ODE9NScxqVgvOT93EyMw3OoZGBh3MG7rcj7EKMnBpCTKGzRja4QQX1J+ SmVGYnFGfFFpTmrxIUYZDg4lCd6qLUA5waLU9NSKtMwcYODDpCU4eJREeN+DpHmLCxJzizPTI VKnGHU55sze/YZJiCUvPy9VSpz3EEiRAEhRRmke3AhYFF5ilJUS5mVkYGAQ4ilILcrNLEGVf8 UozsGoJMx7E2QKT2ZeCdymV0BHMAEd8UIF7IiSRISUVAPjlqnrGV3KOxu/Ldrx95egyX5NmQX Tdki9WbqxUXyd0NXT3R2/OTRm8l1Ou7Znl+jGGruENQLu/ea+s9NP5J7wbfqp8STS05c141jN wYt/+X1s0402PrdyCbcrXsu7UX1DssLWstY4N5nCgyFu69fuYUt2KBMtM3R2Fp3z9cjWc+r8h +e0rd+jxFKckWioxVxUnAgAsn065b0CAAA= X-Env-Sender: prvs=225b12261=roger.pau@citrix.com X-Msg-Ref: server-12.tower-31.messagelabs.com!1488303587!71090079!2 X-Originating-IP: [66.165.176.63] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n, received_headers: No Received headers X-StarScan-Received: X-StarScan-Version: 9.2.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 47288 invoked from network); 28 Feb 2017 17:39:52 -0000 Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63) by server-12.tower-31.messagelabs.com with RC4-SHA encrypted SMTP; 28 Feb 2017 17:39:52 -0000 X-IronPort-AV: E=Sophos;i="5.35,220,1484006400"; d="scan'208";a="419228827" From: Roger Pau Monne To: Date: Tue, 28 Feb 2017 17:39:40 +0000 Message-ID: <20170228173941.69473-3-roger.pau@citrix.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20170228173941.69473-1-roger.pau@citrix.com> References: <20170228173941.69473-1-roger.pau@citrix.com> MIME-Version: 1.0 Cc: Elena Ufimtseva , Kevin Tian , Jan Beulich , Jun Nakajima , Andrew Cooper , Christoph Egger , Tim Deegan , George Dunlap , Suravee Suthikulpanit , Boris Ostrovsky , Roger Pau Monne Subject: [Xen-devel] [PATCH v2 2/3] x86: remove has_hvm_container_{domain/vcpu} X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP It is now useless since PVHv1 is removed and PVHv2 is a HVM domain from Xen's point of view. Signed-off-by: Roger Pau Monné Reviewed-by: Andrew Cooper Acked-by: Tim Deegan Reviewed-by: Kevin Tian Reviewed-by: Boris Ostrovsky Acked-by: George Dunlap --- Cc: Christoph Egger Cc: Jan Beulich Cc: Andrew Cooper Cc: Boris Ostrovsky Cc: Suravee Suthikulpanit Cc: Jun Nakajima Cc: Kevin Tian Cc: Elena Ufimtseva Cc: George Dunlap Cc: Tim Deegan Cc: Konrad Rzeszutek Wilk --- xen/arch/x86/cpu/mcheck/vmce.c | 6 +++--- xen/arch/x86/cpu/vpmu.c | 4 ++-- xen/arch/x86/cpu/vpmu_amd.c | 12 ++++++------ xen/arch/x86/cpu/vpmu_intel.c | 31 +++++++++++++++---------------- xen/arch/x86/cpuid.c | 6 +++--- xen/arch/x86/debug.c | 2 +- xen/arch/x86/domain.c | 28 ++++++++++++++-------------- xen/arch/x86/domain_build.c | 5 ++--- xen/arch/x86/domctl.c | 2 +- xen/arch/x86/hvm/dm.c | 2 +- xen/arch/x86/hvm/hvm.c | 6 +++--- xen/arch/x86/hvm/irq.c | 2 +- xen/arch/x86/hvm/mtrr.c | 2 +- xen/arch/x86/hvm/vmsi.c | 3 +-- xen/arch/x86/hvm/vmx/vmcs.c | 4 ++-- xen/arch/x86/hvm/vmx/vmx.c | 4 ++-- xen/arch/x86/mm.c | 4 ++-- xen/arch/x86/mm/paging.c | 2 +- xen/arch/x86/mm/shadow/common.c | 9 ++++----- xen/arch/x86/setup.c | 2 +- xen/arch/x86/time.c | 11 +++++------ xen/arch/x86/traps.c | 4 ++-- xen/arch/x86/x86_64/traps.c | 4 ++-- xen/drivers/passthrough/x86/iommu.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/hvm/hvm.h | 2 +- xen/include/xen/sched.h | 2 -- xen/include/xen/tmem_xen.h | 5 ++--- 30 files changed, 87 insertions(+), 95 deletions(-) diff --git a/xen/arch/x86/cpu/mcheck/vmce.c b/xen/arch/x86/cpu/mcheck/vmce.c index 8b727b4..6fb7833 100644 --- a/xen/arch/x86/cpu/mcheck/vmce.c +++ b/xen/arch/x86/cpu/mcheck/vmce.c @@ -82,7 +82,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 %pv (supported: %#Lx)\n", - has_hvm_container_vcpu(v) ? "HVM" : "PV", ctxt->caps, + is_hvm_vcpu(v) ? "HVM" : "PV", ctxt->caps, v, guest_mcg_cap & ~MCG_CAP_COUNT); return -EPERM; } @@ -364,7 +364,7 @@ int inject_vmce(struct domain *d, int vcpu) if ( !v->is_initialised ) continue; - if ( (has_hvm_container_domain(d) || + if ( (is_hvm_domain(d) || guest_has_trap_callback(d, v->vcpu_id, TRAP_machine_check)) && !test_and_set_bool(v->mce_pending) ) { @@ -444,7 +444,7 @@ int unmmap_broken_page(struct domain *d, mfn_t mfn, unsigned long gfn) if ( !mfn_valid(mfn) ) return -EINVAL; - if ( !has_hvm_container_domain(d) || !paging_mode_hap(d) ) + if ( !is_hvm_domain(d) || !paging_mode_hap(d) ) return -EOPNOTSUPP; rc = -1; diff --git a/xen/arch/x86/cpu/vpmu.c b/xen/arch/x86/cpu/vpmu.c index d319dea..5b1e0ec 100644 --- a/xen/arch/x86/cpu/vpmu.c +++ b/xen/arch/x86/cpu/vpmu.c @@ -237,7 +237,7 @@ void vpmu_do_interrupt(struct cpu_user_regs *regs) vpmu->arch_vpmu_ops->arch_vpmu_save(sampling, 1); vpmu_reset(vpmu, VPMU_CONTEXT_SAVE | VPMU_CONTEXT_LOADED); - if ( has_hvm_container_vcpu(sampled) ) + if ( is_hvm_vcpu(sampled) ) *flags = 0; else *flags = PMU_SAMPLE_PV; @@ -288,7 +288,7 @@ void vpmu_do_interrupt(struct cpu_user_regs *regs) r->sp = cur_regs->rsp; r->flags = cur_regs->rflags; - if ( !has_hvm_container_vcpu(sampled) ) + if ( !is_hvm_vcpu(sampled) ) { r->ss = cur_regs->ss; r->cs = cur_regs->cs; diff --git a/xen/arch/x86/cpu/vpmu_amd.c b/xen/arch/x86/cpu/vpmu_amd.c index e0acbf4..b3c3697 100644 --- a/xen/arch/x86/cpu/vpmu_amd.c +++ b/xen/arch/x86/cpu/vpmu_amd.c @@ -305,8 +305,8 @@ static int amd_vpmu_save(struct vcpu *v, bool_t to_guest) context_save(v); - if ( !vpmu_is_set(vpmu, VPMU_RUNNING) && - has_hvm_container_vcpu(v) && is_msr_bitmap_on(vpmu) ) + if ( !vpmu_is_set(vpmu, VPMU_RUNNING) && is_hvm_vcpu(v) && + is_msr_bitmap_on(vpmu) ) amd_vpmu_unset_msr_bitmap(v); if ( to_guest ) @@ -367,7 +367,7 @@ static int amd_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content, return -EINVAL; /* For all counters, enable guest only mode for HVM guest */ - if ( has_hvm_container_vcpu(v) && (type == MSR_TYPE_CTRL) && + if ( is_hvm_vcpu(v) && (type == MSR_TYPE_CTRL) && !is_guest_mode(msr_content) ) { set_guest_mode(msr_content); @@ -381,7 +381,7 @@ static int amd_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content, return 0; vpmu_set(vpmu, VPMU_RUNNING); - if ( has_hvm_container_vcpu(v) && is_msr_bitmap_on(vpmu) ) + if ( is_hvm_vcpu(v) && is_msr_bitmap_on(vpmu) ) amd_vpmu_set_msr_bitmap(v); } @@ -390,7 +390,7 @@ static int amd_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content, (is_pmu_enabled(msr_content) == 0) && vpmu_is_set(vpmu, VPMU_RUNNING) ) { vpmu_reset(vpmu, VPMU_RUNNING); - if ( has_hvm_container_vcpu(v) && is_msr_bitmap_on(vpmu) ) + if ( is_hvm_vcpu(v) && is_msr_bitmap_on(vpmu) ) amd_vpmu_unset_msr_bitmap(v); release_pmu_ownership(PMU_OWNER_HVM); } @@ -433,7 +433,7 @@ static void amd_vpmu_destroy(struct vcpu *v) { struct vpmu_struct *vpmu = vcpu_vpmu(v); - if ( has_hvm_container_vcpu(v) && is_msr_bitmap_on(vpmu) ) + if ( is_hvm_vcpu(v) && is_msr_bitmap_on(vpmu) ) amd_vpmu_unset_msr_bitmap(v); xfree(vpmu->context); diff --git a/xen/arch/x86/cpu/vpmu_intel.c b/xen/arch/x86/cpu/vpmu_intel.c index 0ce68f1..4567cd3 100644 --- a/xen/arch/x86/cpu/vpmu_intel.c +++ b/xen/arch/x86/cpu/vpmu_intel.c @@ -306,7 +306,7 @@ static inline void __core2_vpmu_save(struct vcpu *v) for ( i = 0; i < arch_pmc_cnt; i++ ) rdmsrl(MSR_IA32_PERFCTR0 + i, xen_pmu_cntr_pair[i].counter); - if ( !has_hvm_container_vcpu(v) ) + if ( !is_hvm_vcpu(v) ) rdmsrl(MSR_CORE_PERF_GLOBAL_STATUS, core2_vpmu_cxt->global_status); } @@ -314,7 +314,7 @@ static int core2_vpmu_save(struct vcpu *v, bool_t to_guest) { struct vpmu_struct *vpmu = vcpu_vpmu(v); - if ( !has_hvm_container_vcpu(v) ) + if ( !is_hvm_vcpu(v) ) wrmsrl(MSR_CORE_PERF_GLOBAL_CTRL, 0); if ( !vpmu_are_all_set(vpmu, VPMU_CONTEXT_SAVE | VPMU_CONTEXT_LOADED) ) @@ -323,8 +323,8 @@ static int core2_vpmu_save(struct vcpu *v, bool_t to_guest) __core2_vpmu_save(v); /* Unset PMU MSR bitmap to trap lazy load. */ - if ( !vpmu_is_set(vpmu, VPMU_RUNNING) && - has_hvm_container_vcpu(v) && cpu_has_vmx_msr_bitmap ) + if ( !vpmu_is_set(vpmu, VPMU_RUNNING) && is_hvm_vcpu(v) && + cpu_has_vmx_msr_bitmap ) core2_vpmu_unset_msr_bitmap(v->arch.hvm_vmx.msr_bitmap); if ( to_guest ) @@ -362,7 +362,7 @@ static inline void __core2_vpmu_load(struct vcpu *v) if ( vpmu_is_set(vcpu_vpmu(v), VPMU_CPU_HAS_DS) ) wrmsrl(MSR_IA32_DS_AREA, core2_vpmu_cxt->ds_area); - if ( !has_hvm_container_vcpu(v) ) + if ( !is_hvm_vcpu(v) ) { wrmsrl(MSR_CORE_PERF_GLOBAL_OVF_CTRL, core2_vpmu_cxt->global_ovf_ctrl); core2_vpmu_cxt->global_ovf_ctrl = 0; @@ -413,7 +413,7 @@ static int core2_vpmu_verify(struct vcpu *v) } if ( vpmu_is_set(vpmu, VPMU_CPU_HAS_DS) && - !(has_hvm_container_vcpu(v) + !(is_hvm_vcpu(v) ? is_canonical_address(core2_vpmu_cxt->ds_area) : __addr_ok(core2_vpmu_cxt->ds_area)) ) return -EINVAL; @@ -474,7 +474,7 @@ static int core2_vpmu_alloc_resource(struct vcpu *v) if ( !acquire_pmu_ownership(PMU_OWNER_HVM) ) return 0; - if ( has_hvm_container_vcpu(v) ) + if ( is_hvm_vcpu(v) ) { wrmsrl(MSR_CORE_PERF_GLOBAL_CTRL, 0); if ( vmx_add_host_load_msr(MSR_CORE_PERF_GLOBAL_CTRL) ) @@ -539,7 +539,7 @@ static int core2_vpmu_msr_common_check(u32 msr_index, int *type, int *index) { __core2_vpmu_load(current); vpmu_set(vpmu, VPMU_CONTEXT_LOADED); - if ( has_hvm_container_vcpu(current) && + if ( is_hvm_vcpu(current) && cpu_has_vmx_msr_bitmap ) core2_vpmu_set_msr_bitmap(current->arch.hvm_vmx.msr_bitmap); } @@ -612,9 +612,8 @@ static int core2_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content, return -EINVAL; if ( vpmu_is_set(vpmu, VPMU_CPU_HAS_DS) ) { - if ( !(has_hvm_container_vcpu(v) - ? is_canonical_address(msr_content) - : __addr_ok(msr_content)) ) + if ( !(is_hvm_vcpu(v) ? is_canonical_address(msr_content) + : __addr_ok(msr_content)) ) { gdprintk(XENLOG_WARNING, "Illegal address for IA32_DS_AREA: %#" PRIx64 "x\n", @@ -635,7 +634,7 @@ static int core2_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content, if ( msr_content & fixed_ctrl_mask ) return -EINVAL; - if ( has_hvm_container_vcpu(v) ) + if ( is_hvm_vcpu(v) ) vmx_read_guest_msr(MSR_CORE_PERF_GLOBAL_CTRL, &core2_vpmu_cxt->global_ctrl); else @@ -704,7 +703,7 @@ static int core2_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content, if ( blocked ) return -EINVAL; - if ( has_hvm_container_vcpu(v) ) + if ( is_hvm_vcpu(v) ) vmx_read_guest_msr(MSR_CORE_PERF_GLOBAL_CTRL, &core2_vpmu_cxt->global_ctrl); else @@ -723,7 +722,7 @@ static int core2_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content, wrmsrl(msr, msr_content); else { - if ( has_hvm_container_vcpu(v) ) + if ( is_hvm_vcpu(v) ) vmx_write_guest_msr(MSR_CORE_PERF_GLOBAL_CTRL, msr_content); else wrmsrl(MSR_CORE_PERF_GLOBAL_CTRL, msr_content); @@ -757,7 +756,7 @@ static int core2_vpmu_do_rdmsr(unsigned int msr, uint64_t *msr_content) *msr_content = core2_vpmu_cxt->global_status; break; case MSR_CORE_PERF_GLOBAL_CTRL: - if ( has_hvm_container_vcpu(v) ) + if ( is_hvm_vcpu(v) ) vmx_read_guest_msr(MSR_CORE_PERF_GLOBAL_CTRL, msr_content); else rdmsrl(MSR_CORE_PERF_GLOBAL_CTRL, *msr_content); @@ -858,7 +857,7 @@ static void core2_vpmu_destroy(struct vcpu *v) vpmu->context = NULL; xfree(vpmu->priv_context); vpmu->priv_context = NULL; - if ( has_hvm_container_vcpu(v) && cpu_has_vmx_msr_bitmap ) + if ( is_hvm_vcpu(v) && cpu_has_vmx_msr_bitmap ) core2_vpmu_unset_msr_bitmap(v->arch.hvm_vmx.msr_bitmap); release_pmu_ownership(PMU_OWNER_HVM); vpmu_clear(vpmu); diff --git a/xen/arch/x86/cpuid.c b/xen/arch/x86/cpuid.c index 0e17670..b440afe 100644 --- a/xen/arch/x86/cpuid.c +++ b/xen/arch/x86/cpuid.c @@ -762,7 +762,7 @@ void guest_cpuid(const struct vcpu *v, uint32_t leaf, res->c |= cpufeat_mask(X86_FEATURE_DSCPL); } - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) { /* OSXSAVE clear in policy. Fast-forward CR4 back in. */ if ( v->arch.hvm_vcpu.guest_cr[4] & X86_CR4_OSXSAVE ) @@ -918,11 +918,11 @@ void guest_cpuid(const struct vcpu *v, uint32_t leaf, case 0x80000001: /* SYSCALL is hidden outside of long mode on Intel. */ if ( p->x86_vendor == X86_VENDOR_INTEL && - has_hvm_container_domain(d) && !hvm_long_mode_enabled(v) ) + is_hvm_domain(d) && !hvm_long_mode_enabled(v) ) res->d &= ~cpufeat_mask(X86_FEATURE_SYSCALL); common_leaf1_adjustments: - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) { /* Fast-forward MSR_APIC_BASE.EN. */ if ( vlapic_hw_disabled(vcpu_vlapic(v)) ) diff --git a/xen/arch/x86/debug.c b/xen/arch/x86/debug.c index 499574e..2070077 100644 --- a/xen/arch/x86/debug.c +++ b/xen/arch/x86/debug.c @@ -168,7 +168,7 @@ unsigned int dbg_rw_guest_mem(struct domain *dp, void * __user gaddr, pagecnt = min_t(long, PAGE_SIZE - (addr & ~PAGE_MASK), len); - mfn = (has_hvm_container_domain(dp) + mfn = (is_hvm_domain(dp) ? dbg_hvm_va2mfn(addr, dp, toaddr, &gfn) : dbg_pv_va2mfn(addr, dp, pgd3)); if ( mfn_eq(mfn, INVALID_MFN) ) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 75ded25..9a56408 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -187,7 +187,7 @@ void dump_pageframe_info(struct domain *d) spin_unlock(&d->page_alloc_lock); } - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) p2m_pod_dump_data(d); spin_lock(&d->page_alloc_lock); @@ -390,7 +390,7 @@ int vcpu_initialise(struct vcpu *v) spin_lock_init(&v->arch.vpmu.vpmu_lock); - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) { rc = hvm_vcpu_initialise(v); goto done; @@ -461,7 +461,7 @@ void vcpu_destroy(struct vcpu *v) vcpu_destroy_fpu(v); - if ( has_hvm_container_vcpu(v) ) + if ( is_hvm_vcpu(v) ) hvm_vcpu_destroy(v); else xfree(v->arch.pv_vcpu.trap_ctxt); @@ -548,7 +548,7 @@ int arch_domain_create(struct domain *d, unsigned int domcr_flags, d->arch.emulation_flags = emflags; } - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) { d->arch.hvm_domain.hap_enabled = hvm_funcs.hap_supported && (domcr_flags & DOMCRF_hap); @@ -622,7 +622,7 @@ int arch_domain_create(struct domain *d, unsigned int domcr_flags, if ( (rc = psr_domain_init(d)) != 0 ) goto fail; - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) { if ( (rc = hvm_domain_initialise(d)) != 0 ) goto fail; @@ -681,7 +681,7 @@ int arch_domain_create(struct domain *d, unsigned int domcr_flags, void arch_domain_destroy(struct domain *d) { - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) hvm_domain_destroy(d); xfree(d->arch.e820); @@ -733,8 +733,8 @@ int arch_domain_soft_reset(struct domain *d) p2m_type_t p2mt; unsigned int i; - /* Soft reset is supported for HVM/PVH domains only. */ - if ( !has_hvm_container_domain(d) ) + /* Soft reset is supported for HVM domains only. */ + if ( !is_hvm_domain(d) ) return -EINVAL; hvm_domain_soft_reset(d); @@ -924,7 +924,7 @@ int arch_set_info_guest( v->fpu_initialised = !!(flags & VGCF_I387_VALID); v->arch.flags &= ~TF_kernel_mode; - if ( (flags & VGCF_in_kernel) || has_hvm_container_domain(d)/*???*/ ) + if ( (flags & VGCF_in_kernel) || is_hvm_domain(d)/*???*/ ) v->arch.flags |= TF_kernel_mode; v->arch.vgc_flags = flags; @@ -969,7 +969,7 @@ int arch_set_info_guest( } } - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) { for ( i = 0; i < ARRAY_SIZE(v->arch.debugreg); ++i ) v->arch.debugreg[i] = c(debugreg[i]); @@ -1993,7 +1993,7 @@ static void __context_switch(void) if ( xcr0 != get_xcr0() && !set_xcr0(xcr0) ) BUG(); - if ( cpu_has_xsaves && has_hvm_container_vcpu(n) ) + if ( cpu_has_xsaves && is_hvm_vcpu(n) ) set_msr_xss(n->arch.hvm_vcpu.msr_xss); } vcpu_restore_fpu_eager(n); @@ -2083,7 +2083,7 @@ void context_switch(struct vcpu *prev, struct vcpu *next) if ( is_pv_domain(nextd) && (is_idle_domain(prevd) || - has_hvm_container_domain(prevd) || + is_hvm_domain(prevd) || is_pv_32bit_domain(prevd) != is_pv_32bit_domain(nextd)) ) { uint64_t efer = read_efer(); @@ -2385,7 +2385,7 @@ int domain_relinquish_resources(struct domain *d) pit_deinit(d); - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) hvm_domain_relinquish_resources(d); return 0; @@ -2428,7 +2428,7 @@ void vcpu_mark_events_pending(struct vcpu *v) if ( already_pending ) return; - if ( has_hvm_container_vcpu(v) ) + if ( is_hvm_vcpu(v) ) hvm_assert_evtchn_irq(v); else vcpu_kick(v); diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index 88f65cb..7d4f5e2 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -360,9 +360,8 @@ static unsigned long __init compute_dom0_nr_pages( avail -= max_pdx >> s; } - need_paging = has_hvm_container_domain(d) - ? !iommu_hap_pt_share || !paging_mode_hap(d) - : opt_dom0_shadow; + need_paging = is_hvm_domain(d) ? !iommu_hap_pt_share || !paging_mode_hap(d) + : opt_dom0_shadow; for ( ; ; need_paging = 0 ) { nr_pages = dom0_nrpages; diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index 2c1893d..61d3d1a 100644 --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -1524,7 +1524,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 ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) { struct segment_register sreg; diff --git a/xen/arch/x86/hvm/dm.c b/xen/arch/x86/hvm/dm.c index 2122c45..333c884 100644 --- a/xen/arch/x86/hvm/dm.c +++ b/xen/arch/x86/hvm/dm.c @@ -283,7 +283,7 @@ static int dm_op(domid_t domid, if ( rc ) return rc; - if ( !has_hvm_container_domain(d) ) + if ( !is_hvm_domain(d) ) goto out; rc = xsm_dm_op(XSM_DM_PRIV, d); diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index b95b500..b42154b 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -3052,7 +3052,7 @@ static enum hvm_copy_result __hvm_copy( char *p; int count, todo = size; - ASSERT(has_hvm_container_vcpu(v)); + ASSERT(is_hvm_vcpu(v)); /* * XXX Disable for 4.1.0: PV-on-HVM drivers will do grant-table ops @@ -3993,7 +3993,7 @@ static int hvmop_set_param( return -ESRCH; rc = -EINVAL; - if ( !has_hvm_container_domain(d) ) + if ( !is_hvm_domain(d) ) goto out; rc = hvm_allow_set_param(d, &a); @@ -4248,7 +4248,7 @@ static int hvmop_get_param( return -ESRCH; rc = -EINVAL; - if ( !has_hvm_container_domain(d) ) + if ( !is_hvm_domain(d) ) goto out; rc = hvm_allow_get_param(d, &a); diff --git a/xen/arch/x86/hvm/irq.c b/xen/arch/x86/hvm/irq.c index 760544b..a774ed7 100644 --- a/xen/arch/x86/hvm/irq.c +++ b/xen/arch/x86/hvm/irq.c @@ -480,7 +480,7 @@ int hvm_local_events_need_delivery(struct vcpu *v) void arch_evtchn_inject(struct vcpu *v) { - if ( has_hvm_container_vcpu(v) ) + if ( is_hvm_vcpu(v) ) hvm_assert_evtchn_irq(v); } diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c index c5c27cb..b721c63 100644 --- a/xen/arch/x86/hvm/mtrr.c +++ b/xen/arch/x86/hvm/mtrr.c @@ -540,7 +540,7 @@ int hvm_get_mem_pinned_cacheattr(struct domain *d, gfn_t gfn, uint64_t mask = ~(uint64_t)0 << order; int rc = -ENXIO; - ASSERT(has_hvm_container_domain(d)); + ASSERT(is_hvm_domain(d)); rcu_read_lock(&pinned_cacheattr_rcu_lock); list_for_each_entry_rcu ( range, diff --git a/xen/arch/x86/hvm/vmsi.c b/xen/arch/x86/hvm/vmsi.c index 25f5756..a36692c 100644 --- a/xen/arch/x86/hvm/vmsi.c +++ b/xen/arch/x86/hvm/vmsi.c @@ -560,8 +560,7 @@ void msixtbl_init(struct domain *d) { struct hvm_io_handler *handler; - if ( !has_hvm_container_domain(d) || !has_vlapic(d) || - msixtbl_initialised(d) ) + if ( !is_hvm_domain(d) || !has_vlapic(d) || msixtbl_initialised(d) ) return; INIT_LIST_HEAD(&d->arch.hvm_domain.msixtbl_list); diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c index f98a8b7..a3ae87a 100644 --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -768,7 +768,7 @@ void vmx_vmcs_exit(struct vcpu *v) { /* Don't confuse vmx_do_resume (for @v or @current!) */ vmx_clear_vmcs(v); - if ( has_hvm_container_vcpu(current) ) + if ( is_hvm_vcpu(current) ) vmx_load_vmcs(current); spin_unlock(&v->arch.hvm_vmx.vmcs_lock); @@ -1930,7 +1930,7 @@ static void vmcs_dump(unsigned char ch) for_each_domain ( d ) { - if ( !has_hvm_container_domain(d) ) + if ( !is_hvm_domain(d) ) continue; printk("\n>>> Domain %d <<<\n", d->domain_id); for_each_vcpu ( d, v ) diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 8404b03..b7c10b4 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -240,7 +240,7 @@ static void vmx_pi_do_resume(struct vcpu *v) /* This function is called when pcidevs_lock is held */ void vmx_pi_hooks_assign(struct domain *d) { - if ( !iommu_intpost || !has_hvm_container_domain(d) ) + if ( !iommu_intpost || !is_hvm_domain(d) ) return; ASSERT(!d->arch.hvm_domain.pi_ops.vcpu_block); @@ -254,7 +254,7 @@ void vmx_pi_hooks_assign(struct domain *d) /* This function is called when pcidevs_lock is held */ void vmx_pi_hooks_deassign(struct domain *d) { - if ( !iommu_intpost || !has_hvm_container_domain(d) ) + if ( !iommu_intpost || !is_hvm_domain(d) ) return; ASSERT(d->arch.hvm_domain.pi_ops.vcpu_block); diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 12dabcf..92d0f7f 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -438,7 +438,7 @@ int page_is_ram_type(unsigned long mfn, unsigned long mem_type) unsigned long domain_get_maximum_gpfn(struct domain *d) { - if ( has_hvm_container_domain(d) ) + if ( is_hvm_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; @@ -3184,7 +3184,7 @@ long do_mmuext_op( break; } - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) { switch ( op.cmd ) { diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c index 6327631..75f5fc0 100644 --- a/xen/arch/x86/mm/paging.c +++ b/xen/arch/x86/mm/paging.c @@ -420,7 +420,7 @@ static int paging_log_dirty_op(struct domain *d, * Mark dirty all currently write-mapped pages on e.g. the * final iteration of a save operation. */ - if ( has_hvm_container_domain(d) && + if ( is_hvm_domain(d) && (sc->mode & XEN_DOMCTL_SHADOW_LOGDIRTY_FINAL) ) hvm_mapped_guest_frames_mark_dirty(d); diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index d078d78..d93f2ab 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -319,7 +319,7 @@ const struct x86_emulate_ops *shadow_init_emulation( struct vcpu *v = current; unsigned long addr; - ASSERT(has_hvm_container_vcpu(v)); + ASSERT(is_hvm_vcpu(v)); memset(sh_ctxt, 0, sizeof(*sh_ctxt)); @@ -363,7 +363,7 @@ void shadow_continue_emulation(struct sh_emulate_ctxt *sh_ctxt, struct vcpu *v = current; unsigned long addr, diff; - ASSERT(has_hvm_container_vcpu(v)); + ASSERT(is_hvm_vcpu(v)); /* * We don't refetch the segment bases, because we don't emulate @@ -1700,9 +1700,8 @@ void *sh_emulate_map_dest(struct vcpu *v, unsigned long vaddr, #ifndef NDEBUG /* We don't emulate user-mode writes to page tables. */ - if ( has_hvm_container_domain(d) - ? hvm_get_cpl(v) == 3 - : !guest_kernel_mode(v, guest_cpu_user_regs()) ) + if ( is_hvm_domain(d) ? hvm_get_cpl(v) == 3 + : !guest_kernel_mode(v, guest_cpu_user_regs()) ) { gdprintk(XENLOG_DEBUG, "User-mode write to pagetable reached " "emulate_map_dest(). This should never happen!\n"); diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 4a807b8..24ba103 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -1723,7 +1723,7 @@ void __hwdom_init setup_io_bitmap(struct domain *d) { int rc; - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) { bitmap_fill(d->arch.hvm_domain.io_bitmap, 0x10000); rc = rangeset_report_ranges(d->arch.ioport_caps, 0, 0x10000, diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index b739dc8..6d544af 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -940,7 +940,7 @@ static void __update_vcpu_system_time(struct vcpu *v, int force) } else { - if ( has_hvm_container_domain(d) && hvm_tsc_scaling_supported ) + if ( is_hvm_domain(d) && hvm_tsc_scaling_supported ) { tsc_stamp = hvm_scale_tsc(d, t->stamp.local_tsc); _u.tsc_to_system_mul = d->arch.vtsc_to_ns.mul_frac; @@ -1950,7 +1950,7 @@ void tsc_get_info(struct domain *d, uint32_t *tsc_mode, uint64_t *elapsed_nsec, uint32_t *gtsc_khz, uint32_t *incarnation) { - bool_t enable_tsc_scaling = has_hvm_container_domain(d) && + bool_t enable_tsc_scaling = is_hvm_domain(d) && hvm_tsc_scaling_supported && !d->arch.vtsc; *incarnation = d->arch.incarnation; @@ -2030,7 +2030,7 @@ void tsc_set_info(struct domain *d, * PV: guest has not migrated yet (and thus arch.tsc_khz == cpu_khz) */ if ( tsc_mode == TSC_MODE_DEFAULT && host_tsc_is_safe() && - (has_hvm_container_domain(d) ? + (is_hvm_domain(d) ? (d->arch.tsc_khz == cpu_khz || hvm_get_tsc_scaling_ratio(d->arch.tsc_khz)) : incarnation == 0) ) @@ -2045,8 +2045,7 @@ void tsc_set_info(struct domain *d, case TSC_MODE_PVRDTSCP: d->arch.vtsc = !boot_cpu_has(X86_FEATURE_RDTSCP) || !host_tsc_is_safe(); - enable_tsc_scaling = has_hvm_container_domain(d) && - !d->arch.vtsc && + enable_tsc_scaling = is_hvm_domain(d) && !d->arch.vtsc && hvm_get_tsc_scaling_ratio(gtsc_khz ?: cpu_khz); d->arch.tsc_khz = (enable_tsc_scaling && gtsc_khz) ? gtsc_khz : cpu_khz; set_time_scale(&d->arch.vtsc_to_ns, d->arch.tsc_khz * 1000 ); @@ -2063,7 +2062,7 @@ void tsc_set_info(struct domain *d, break; } d->arch.incarnation = incarnation + 1; - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) { if ( hvm_tsc_scaling_supported && !d->arch.vtsc ) d->arch.hvm_domain.tsc_scaling_ratio = diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 75c89eb..c1ca945 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -799,7 +799,7 @@ void do_trap(struct cpu_user_regs *regs) } if ( ((trapnr == TRAP_copro_error) || (trapnr == TRAP_simd_error)) && - system_state >= SYS_STATE_active && has_hvm_container_vcpu(curr) && + system_state >= SYS_STATE_active && is_hvm_vcpu(curr) && curr->arch.hvm_vcpu.fpu_exception_callback ) { curr->arch.hvm_vcpu.fpu_exception_callback( @@ -976,7 +976,7 @@ void cpuid_hypervisor_leaves(const struct vcpu *v, uint32_t leaf, break; case 4: /* HVM hypervisor leaf. */ - if ( !has_hvm_container_domain(d) || subleaf != 0 ) + if ( !is_hvm_domain(d) || subleaf != 0 ) break; if ( cpu_has_vmx_apic_reg_virt ) diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c index b66c24b..ad4d6c1 100644 --- a/xen/arch/x86/x86_64/traps.c +++ b/xen/arch/x86/x86_64/traps.c @@ -88,7 +88,7 @@ void show_registers(const struct cpu_user_regs *regs) enum context context; struct vcpu *v = system_state >= SYS_STATE_smp_boot ? current : NULL; - if ( guest_mode(regs) && has_hvm_container_vcpu(v) ) + if ( guest_mode(regs) && is_hvm_vcpu(v) ) { struct segment_register sreg; context = CTXT_hvm_guest; @@ -623,7 +623,7 @@ static void hypercall_page_initialise_ring3_kernel(void *hypercall_page) void hypercall_page_initialise(struct domain *d, void *hypercall_page) { memset(hypercall_page, 0xCC, PAGE_SIZE); - if ( has_hvm_container_domain(d) ) + if ( is_hvm_domain(d) ) hvm_hypercall_page_initialise(d, hypercall_page); else if ( !is_pv_32bit_domain(d) ) hypercall_page_initialise_ring3_kernel(hypercall_page); diff --git a/xen/drivers/passthrough/x86/iommu.c b/xen/drivers/passthrough/x86/iommu.c index 69cd6c5..750c663 100644 --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -55,7 +55,7 @@ int arch_iommu_populate_page_table(struct domain *d) while ( !rc && (page = page_list_remove_head(&d->page_list)) ) { - if ( has_hvm_container_domain(d) || + if ( is_hvm_domain(d) || (page->u.inuse.type_info & PGT_type_mask) == PGT_writable_page ) { unsigned long mfn = page_to_mfn(page); diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h index 8f0edaf..362de50 100644 --- a/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h @@ -16,7 +16,7 @@ #define is_pv_32bit_domain(d) ((d)->arch.is_32bit_pv) #define is_pv_32bit_vcpu(v) (is_pv_32bit_domain((v)->domain)) -#define is_hvm_pv_evtchn_domain(d) (has_hvm_container_domain(d) && \ +#define is_hvm_pv_evtchn_domain(d) (is_hvm_domain(d) && \ d->arch.hvm_domain.irq.callback_via_type == HVMIRQ_callback_vector) #define is_hvm_pv_evtchn_vcpu(v) (is_hvm_pv_evtchn_domain(v->domain)) #define is_domain_direct_mapped(d) ((void)(d), 0) diff --git a/xen/include/asm-x86/event.h b/xen/include/asm-x86/event.h index d589d6f..a91599d 100644 --- a/xen/include/asm-x86/event.h +++ b/xen/include/asm-x86/event.h @@ -26,7 +26,7 @@ static inline int local_events_need_delivery(void) ASSERT(!is_idle_vcpu(v)); - return (has_hvm_container_vcpu(v) ? hvm_local_events_need_delivery(v) : + return (is_hvm_vcpu(v) ? hvm_local_events_need_delivery(v) : (vcpu_info(v, evtchn_upcall_pending) && !vcpu_info(v, evtchn_upcall_mask))); } diff --git a/xen/include/asm-x86/guest_access.h b/xen/include/asm-x86/guest_access.h index 88edb3f..ca700c9 100644 --- a/xen/include/asm-x86/guest_access.h +++ b/xen/include/asm-x86/guest_access.h @@ -14,27 +14,27 @@ /* Raw access functions: no type checking. */ #define raw_copy_to_guest(dst, src, len) \ - (has_hvm_container_vcpu(current) ? \ + (is_hvm_vcpu(current) ? \ copy_to_user_hvm((dst), (src), (len)) : \ copy_to_user((dst), (src), (len))) #define raw_copy_from_guest(dst, src, len) \ - (has_hvm_container_vcpu(current) ? \ + (is_hvm_vcpu(current) ? \ copy_from_user_hvm((dst), (src), (len)) : \ copy_from_user((dst), (src), (len))) #define raw_clear_guest(dst, len) \ - (has_hvm_container_vcpu(current) ? \ + (is_hvm_vcpu(current) ? \ clear_user_hvm((dst), (len)) : \ clear_user((dst), (len))) #define __raw_copy_to_guest(dst, src, len) \ - (has_hvm_container_vcpu(current) ? \ + (is_hvm_vcpu(current) ? \ copy_to_user_hvm((dst), (src), (len)) : \ __copy_to_user((dst), (src), (len))) #define __raw_copy_from_guest(dst, src, len) \ - (has_hvm_container_vcpu(current) ? \ + (is_hvm_vcpu(current) ? \ copy_from_user_hvm((dst), (src), (len)) : \ __copy_from_user((dst), (src), (len))) #define __raw_clear_guest(dst, len) \ - (has_hvm_container_vcpu(current) ? \ + (is_hvm_vcpu(current) ? \ clear_user_hvm((dst), (len)) : \ clear_user((dst), (len))) diff --git a/xen/include/asm-x86/hvm/hvm.h b/xen/include/asm-x86/hvm/hvm.h index 8c8c633..478a419 100644 --- a/xen/include/asm-x86/hvm/hvm.h +++ b/xen/include/asm-x86/hvm/hvm.h @@ -621,7 +621,7 @@ unsigned long hvm_cr4_guest_valid_bits(const struct vcpu *v, bool restore); #define arch_vcpu_block(v) ({ \ struct vcpu *v_ = (v); \ struct domain *d_ = v_->domain; \ - if ( has_hvm_container_domain(d_) && \ + if ( is_hvm_domain(d_) && \ (d_->arch.hvm_domain.pi_ops.vcpu_block) ) \ d_->arch.hvm_domain.pi_ops.vcpu_block(v_); \ }) diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index cc11999..832352a 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -874,8 +874,6 @@ void watchdog_domain_destroy(struct domain *d); #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)) #define is_pinned_vcpu(v) ((v)->domain->is_pinned || \ cpumask_weight((v)->cpu_hard_affinity) == 1) #ifdef CONFIG_HAS_PASSTHROUGH diff --git a/xen/include/xen/tmem_xen.h b/xen/include/xen/tmem_xen.h index a6cab00..13cf7bc 100644 --- a/xen/include/xen/tmem_xen.h +++ b/xen/include/xen/tmem_xen.h @@ -185,9 +185,8 @@ typedef XEN_GUEST_HANDLE_PARAM(char) tmem_cli_va_param_t; static inline int tmem_get_tmemop_from_client(tmem_op_t *op, tmem_cli_op_t uops) { #ifdef CONFIG_COMPAT - if ( has_hvm_container_vcpu(current) ? - hvm_guest_x86_mode(current) != 8 : - is_pv_32bit_vcpu(current) ) + if ( is_hvm_vcpu(current) ? hvm_guest_x86_mode(current) != 8 + : is_pv_32bit_vcpu(current) ) { int rc; enum XLAT_tmem_op_u u;