From: Christoph Egger <Christoph.Egger@amd.com>
To: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>
Subject: [PATCH] nestedhvm: handle l2 guest MMIO access
Date: Fri, 21 Oct 2011 15:20:19 +0200 [thread overview]
Message-ID: <4EA17193.1020108@amd.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 560 bytes --]
Hyper-V starts a root domain which effectively an l2 guest.
Hyper-V passes its devices through to the root domain and
let it do the MMIO accesses. The emulation is done by
Xen (host) and Hyper-V forwards the interrupts to the l2 guest.
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
--
---to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Einsteinring 24, 85689 Dornach b. Muenchen
Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632
[-- Attachment #2: xen_nh_mmio.diff --]
[-- Type: text/plain, Size: 2723 bytes --]
diff -r 55b3a1acb259 xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c Fri Oct 21 11:15:06 2011 +0200
+++ b/xen/arch/x86/hvm/hvm.c Fri Oct 21 15:16:13 2011 +0200
@@ -1208,6 +1208,10 @@ int hvm_hap_nested_page_fault(unsigned l
return 0;
case NESTEDHVM_PAGEFAULT_INJECT:
return -1;
+ case NESTEDHVM_PAGEFAULT_MMIO:
+ if ( !handle_mmio() )
+ hvm_inject_exception(TRAP_gp_fault, 0, 0);
+ return 1;
}
}
diff -r 55b3a1acb259 xen/arch/x86/hvm/svm/nestedsvm.c
--- a/xen/arch/x86/hvm/svm/nestedsvm.c Fri Oct 21 11:15:06 2011 +0200
+++ b/xen/arch/x86/hvm/svm/nestedsvm.c Fri Oct 21 15:16:13 2011 +0200
@@ -1165,6 +1165,15 @@ enum hvm_intblk nsvm_intr_blocked(struct
if ( svm->ns_hostflags.fields.vintrmask )
if ( !svm->ns_hostflags.fields.rflagsif )
return hvm_intblk_rflags_ie;
+
+ /* when l1 guest passes its devices through to the l2 guest
+ * and l2 guest does an MMIO access then we may want to
+ * inject an VMEXIT(#INTR) exitcode into the l1 guest.
+ * Delay the injection because this would result in delivering
+ * an interrupt *within* the execution of an instruction.
+ */
+ if ( v->arch.hvm_vcpu.io_state != HVMIO_none )
+ return hvm_intblk_shadow;
}
if ( nv->nv_vmexit_pending ) {
diff -r 55b3a1acb259 xen/arch/x86/mm/hap/nested_hap.c
--- a/xen/arch/x86/mm/hap/nested_hap.c Fri Oct 21 11:15:06 2011 +0200
+++ b/xen/arch/x86/mm/hap/nested_hap.c Fri Oct 21 15:16:13 2011 +0200
@@ -151,6 +151,9 @@ nestedhap_walk_L0_p2m(struct p2m_domain
mfn = gfn_to_mfn_type_p2m(p2m, L1_gpa >> PAGE_SHIFT, &p2mt, &p2ma,
p2m_query, page_order);
+ if ( p2m_is_mmio(p2mt) )
+ return NESTEDHVM_PAGEFAULT_MMIO;
+
if ( p2m_is_paging(p2mt) || p2m_is_shared(p2mt) || !p2m_is_ram(p2mt) )
return NESTEDHVM_PAGEFAULT_ERROR;
@@ -228,6 +231,8 @@ nestedhvm_hap_nested_page_fault(struct v
return rv;
case NESTEDHVM_PAGEFAULT_DONE:
break;
+ case NESTEDHVM_PAGEFAULT_MMIO:
+ return rv;
default:
BUG();
break;
diff -r 55b3a1acb259 xen/include/asm-x86/hvm/nestedhvm.h
--- a/xen/include/asm-x86/hvm/nestedhvm.h Fri Oct 21 11:15:06 2011 +0200
+++ b/xen/include/asm-x86/hvm/nestedhvm.h Fri Oct 21 15:16:13 2011 +0200
@@ -50,6 +50,7 @@ bool_t nestedhvm_vcpu_in_guestmode(struc
#define NESTEDHVM_PAGEFAULT_DONE 0
#define NESTEDHVM_PAGEFAULT_INJECT 1
#define NESTEDHVM_PAGEFAULT_ERROR 2
+#define NESTEDHVM_PAGEFAULT_MMIO 3
int nestedhvm_hap_nested_page_fault(struct vcpu *v, paddr_t L2_gpa);
/* IO permission map */
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
next reply other threads:[~2011-10-21 13:20 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-21 13:20 Christoph Egger [this message]
2011-10-24 10:31 ` [PATCH] nestedhvm: handle l2 guest MMIO access Tim Deegan
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=4EA17193.1020108@amd.com \
--to=christoph.egger@amd.com \
--cc=xen-devel@lists.xensource.com \
/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.