[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] pvh bug fixes
Nested hvm is presently not supported for pvh. Calling hvm_hap_nested_page_fault in certain paths will crash. The rearrange in linux code causes it to go thru paths that will corrupt hvm_domain structs and xen to panic for dom0 pvh. Signed-off-by: Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> --- xen/arch/x86/hvm/hvm.c | 3 +++ xen/arch/x86/irq.c | 4 ++-- xen/arch/x86/physdev.c | 4 ++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 69f7e74..a4a3dcf 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -1416,6 +1416,9 @@ int hvm_hap_nested_page_fault(paddr_t gpa, int sharing_enomem = 0; mem_event_request_t *req_ptr = NULL; + if ( is_pvh_vcpu(v) ) + return 0; + /* On Nested Virtualization, walk the guest page table. * If this succeeds, all is fine. * If this fails, inject a nested page fault into the guest. diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c index db70077..88444be 100644 --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -1068,13 +1068,13 @@ bool_t cpu_has_pending_apic_eoi(void) static inline void set_pirq_eoi(struct domain *d, unsigned int irq) { - if ( !is_hvm_domain(d) && d->arch.pv_domain.pirq_eoi_map ) + if ( is_pv_domain(d) && d->arch.pv_domain.pirq_eoi_map ) set_bit(irq, d->arch.pv_domain.pirq_eoi_map); } static inline void clear_pirq_eoi(struct domain *d, unsigned int irq) { - if ( !is_hvm_domain(d) && d->arch.pv_domain.pirq_eoi_map ) + if ( is_pv_domain(d) && d->arch.pv_domain.pirq_eoi_map ) clear_bit(irq, d->arch.pv_domain.pirq_eoi_map); } diff --git a/xen/arch/x86/physdev.c b/xen/arch/x86/physdev.c index bc0634c..9f85857 100644 --- a/xen/arch/x86/physdev.c +++ b/xen/arch/x86/physdev.c @@ -339,6 +339,10 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) unsigned long mfn; struct page_info *page; + ret = -ENOSYS; + if ( is_pvh_vcpu(current) ) + break; + ret = -EFAULT; if ( copy_from_guest(&info, arg, 1) != 0 ) break; -- 1.8.3.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |