int init_domain_cpuid_policy(struct domain *d)
{
+ unsigned int i;
+
d->arch.cpuid = xmalloc(struct cpuid_policy);
if ( !d->arch.cpuid )
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;
}
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) ||
int arch_domain_create(struct domain *d, unsigned int domcr_flags,
struct xen_arch_domainconfig *config)
{
- int i, paging_initialised = 0;
+ bool paging_initialised = false;
int rc = -ENOMEM;
if ( config == NULL && !is_idle_domain(d) )
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;
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);
hvm_domain_destroy(d);
xfree(d->arch.e820);
- xfree(d->arch.cpuids);
xfree(d->arch.cpuid);
free_domain_pirqs(d);
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 )
{
/* 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. */
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 */
*/
uint8_t x87_fip_width;
- cpuid_input_t *cpuids;
-
/* CPUID Policy. */
struct cpuid_policy *cpuid;