xenpaging: disallow paging in a PoD guest
authorOlaf Hering <olaf@aepfle.de>
Thu, 20 Oct 2011 10:25:58 +0000 (11:25 +0100)
committerOlaf Hering <olaf@aepfle.de>
Thu, 20 Oct 2011 10:25:58 +0000 (11:25 +0100)
Disallow xenpaging in a PoD guest until coexistance between the two features
is properly implemented.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
tools/xenpaging/xenpaging.c
xen/arch/x86/mm/mem_event.c

index 7fbb177c7077fe54d60a892a76ceaecdd6aeae59..8de1f368b395c8261070f760f705cf8e9f6d48b1 100644 (file)
@@ -246,6 +246,9 @@ static xenpaging_t *xenpaging_init(domid_t domain_id, int num_pages)
             case ENODEV:
                 ERROR("EPT not supported for this guest");
                 break;
+            case EXDEV:
+                ERROR("xenpaging not supported in a PoD guest");
+                break;
             default:
                 ERROR("Error initialising shared page: %s", strerror(errno));
                 break;
index c6c864dbd5535ad12ba5ede2a64eb0dd383acfbd..2a3b5f596b27acbcf5cc46a63a525997818ca5ad 100644 (file)
@@ -253,6 +253,7 @@ int mem_event_domctl(struct domain *d, xen_domctl_mem_event_op_t *mec,
     case XEN_DOMCTL_MEM_EVENT_OP_PAGING:
     {
         struct mem_event_domain *med = &d->mem_paging;
+        struct p2m_domain *p2m = p2m_get_hostp2m(d);
         rc = -ENODEV;
         /* Only HAP is supported */
         if ( !hap_enabled(d) )
@@ -262,6 +263,11 @@ int mem_event_domctl(struct domain *d, xen_domctl_mem_event_op_t *mec,
         if ( boot_cpu_data.x86_vendor != X86_VENDOR_INTEL )
             break;
 
+        rc = -EXDEV;
+        /* Disallow paging in a PoD guest */
+        if ( p2m->pod.entry_count )
+            break;
+
         switch( mec->op )
         {
         case XEN_DOMCTL_MEM_EVENT_OP_PAGING_ENABLE: