Even 'dummy' domains (e.g., dom_xen a.k.a. DOMID_XEN) must have valid I/O caps.
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 13 May 2010 09:09:02 +0000 (10:09 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 13 May 2010 09:09:02 +0000 (10:09 +0100)
Ensure the rangesets are always initialised. Certain (privileged)
invocations of hypercalls such as mmu_update can end up interrogating
these special domains for possible I/O capabilities.

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen/common/domain.c

index 2759972b76a48409b0e4bd660e9f1a8492d79f7a..a85f51eb7bdce4e46bd3cd689b9a497bb147a1da 100644 (file)
@@ -248,12 +248,17 @@ struct domain *domain_create(
         d->disable_migrate = 1;
     }
 
-    if ( domcr_flags & DOMCRF_dummy )
-        return d;
-
     rangeset_domain_initialise(d);
     init_status |= INIT_rangeset;
 
+    d->iomem_caps = rangeset_new(d, "I/O Memory", RANGESETF_prettyprint_hex);
+    d->irq_caps   = rangeset_new(d, "Interrupts", 0);
+    if ( (d->iomem_caps == NULL) || (d->irq_caps == NULL) )
+        goto fail;
+
+    if ( domcr_flags & DOMCRF_dummy )
+        return d;
+
     if ( !is_idle_domain(d) )
     {
         if ( xsm_domain_create(d, ssidref) != 0 )
@@ -290,11 +295,6 @@ struct domain *domain_create(
         goto fail;
     init_status |= INIT_arch;
 
-    d->iomem_caps = rangeset_new(d, "I/O Memory", RANGESETF_prettyprint_hex);
-    d->irq_caps   = rangeset_new(d, "Interrupts", 0);
-    if ( (d->iomem_caps == NULL) || (d->irq_caps == NULL) )
-        goto fail;
-
     if ( cpupool_add_domain(d, poolid) != 0 )
         goto fail;