[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 4/4] x86/cpuid: Move the legacy cpuids array into struct cpuid_policy



This hides the legacy details inside the cpuid subsystem, where they will
eventually be dropped entirely.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <JBeulich@xxxxxxxx>
---
 xen/arch/x86/cpuid.c         | 10 +++++++++-
 xen/arch/x86/domain.c        | 14 +-------------
 xen/arch/x86/domctl.c        |  4 ++--
 xen/include/asm-x86/cpuid.h  |  4 ++++
 xen/include/asm-x86/domain.h |  5 -----
 5 files changed, 16 insertions(+), 21 deletions(-)

diff --git a/xen/arch/x86/cpuid.c b/xen/arch/x86/cpuid.c
index e173ff7..20cb25b 100644
--- a/xen/arch/x86/cpuid.c
+++ b/xen/arch/x86/cpuid.c
@@ -338,6 +338,8 @@ void recalculate_cpuid_policy(struct domain *d)
 
 int init_domain_cpuid_policy(struct domain *d)
 {
+    unsigned int i;
+
     d->arch.cpuid = xmalloc(struct cpuid_policy);
 
     if ( !d->arch.cpuid )
@@ -347,6 +349,12 @@ int init_domain_cpuid_policy(struct domain *d)
 
     recalculate_cpuid_policy(d);
 
+    for ( i = 0; i < MAX_CPUID_INPUT; i++ )
+    {
+        d->arch.cpuid->legacy[i].input[0] = XEN_CPUID_INPUT_UNUSED;
+        d->arch.cpuid->legacy[i].input[1] = XEN_CPUID_INPUT_UNUSED;
+    }
+
     return 0;
 }
 
@@ -357,7 +365,7 @@ static void domain_cpuid(const struct domain *d, uint32_t 
leaf,
 
     for ( i = 0; i < MAX_CPUID_INPUT; i++ )
     {
-        cpuid_input_t *cpuid = &d->arch.cpuids[i];
+        xen_domctl_cpuid_t *cpuid = &d->arch.cpuid->legacy[i];
 
         if ( (cpuid->input[0] == leaf) &&
              ((cpuid->input[1] == XEN_CPUID_INPUT_UNUSED) ||
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index 6fc1242..44ee92a 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -503,7 +503,7 @@ static bool emulation_flags_ok(const struct domain *d, 
uint32_t emflags)
 int arch_domain_create(struct domain *d, unsigned int domcr_flags,
                        struct xen_arch_domainconfig *config)
 {
-    int i, paging_initialised = 0;
+    int paging_initialised = 0;
     int rc = -ENOMEM;
 
     if ( config == NULL && !is_idle_domain(d) )
@@ -606,16 +606,6 @@ int arch_domain_create(struct domain *d, unsigned int 
domcr_flags,
         if ( (rc = init_domain_cpuid_policy(d)) )
             goto fail;
 
-        d->arch.cpuids = xmalloc_array(cpuid_input_t, MAX_CPUID_INPUT);
-        rc = -ENOMEM;
-        if ( d->arch.cpuids == NULL )
-            goto fail;
-        for ( i = 0; i < MAX_CPUID_INPUT; i++ )
-        {
-            d->arch.cpuids[i].input[0] = XEN_CPUID_INPUT_UNUSED;
-            d->arch.cpuids[i].input[1] = XEN_CPUID_INPUT_UNUSED;
-        }
-
         d->arch.x86_vendor = boot_cpu_data.x86_vendor;
         d->arch.x86        = boot_cpu_data.x86;
         d->arch.x86_model  = boot_cpu_data.x86_model;
@@ -678,7 +668,6 @@ int arch_domain_create(struct domain *d, unsigned int 
domcr_flags,
     iommu_domain_destroy(d);
     cleanup_domain_irq_mapping(d);
     free_xenheap_page(d->shared_info);
-    xfree(d->arch.cpuids);
     xfree(d->arch.cpuid);
     if ( paging_initialised )
         paging_final_teardown(d);
@@ -697,7 +686,6 @@ void arch_domain_destroy(struct domain *d)
         hvm_domain_destroy(d);
 
     xfree(d->arch.e820);
-    xfree(d->arch.cpuids);
     xfree(d->arch.cpuid);
 
     free_domain_pirqs(d);
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index 038521a..772c5d2 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -51,13 +51,13 @@ static int gdbsx_guest_mem_io(domid_t domid, struct 
xen_domctl_gdbsx_memio *iop)
 static int update_legacy_cpuid_array(struct domain *d,
                                      const xen_domctl_cpuid_t *ctl)
 {
-    cpuid_input_t *cpuid, *unused = NULL;
+    xen_domctl_cpuid_t *cpuid, *unused = NULL;
     unsigned int i;
 
     /* Try to insert ctl into d->arch.cpuids[] */
     for ( i = 0; i < MAX_CPUID_INPUT; i++ )
     {
-        cpuid = &d->arch.cpuids[i];
+        cpuid = &d->arch.cpuid->legacy[i];
 
         if ( cpuid->input[0] == XEN_CPUID_INPUT_UNUSED )
         {
diff --git a/xen/include/asm-x86/cpuid.h b/xen/include/asm-x86/cpuid.h
index 38e3975..b359b38 100644
--- a/xen/include/asm-x86/cpuid.h
+++ b/xen/include/asm-x86/cpuid.h
@@ -203,6 +203,10 @@ struct cpuid_policy
 
     /* Toolstack selected Hypervisor max_leaf (if non-zero). */
     uint8_t hv_limit, hv2_limit;
+
+    /* Temporary: Legacy data array. */
+#define MAX_CPUID_INPUT 40
+    xen_domctl_cpuid_t legacy[MAX_CPUID_INPUT];
 };
 
 /* Fill in a featureset bitmap from a CPUID policy. */
diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h
index 9e3a07b..eb6227d 100644
--- a/xen/include/asm-x86/domain.h
+++ b/xen/include/asm-x86/domain.h
@@ -234,9 +234,6 @@ struct paging_vcpu {
     struct shadow_vcpu shadow;
 };
 
-#define MAX_CPUID_INPUT 40
-typedef xen_domctl_cpuid_t cpuid_input_t;
-
 #define MAX_NESTEDP2M 10
 
 #define MAX_ALTP2M      10 /* arbitrary */
@@ -360,8 +357,6 @@ struct arch_domain
      */
     uint8_t x87_fip_width;
 
-    cpuid_input_t *cpuids;
-
     /* CPUID Policy. */
     struct cpuid_policy *cpuid;
 
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.