On 30.04.2021 17:52, Roger Pau Monne wrote: > @@ -1086,3 +1075,42 @@ int xc_cpu_policy_calc_compatible(xc_interface *xch, > > return rc; > } > + > +int xc_cpu_policy_make_compatible(xc_interface *xch, xc_cpu_policy_t policy, > + bool hvm)
I'm concerned of the naming, and in particular the two very different meanings of "compatible" for xc_cpu_policy_calc_compatible() and this new one. I'm afraid I don't have a good suggestion though, short of making the name even longer and inserting "backwards". Jan > +{ > + xc_cpu_policy_t host; > + int rc; > + > + host = xc_cpu_policy_init(); > + if ( !host ) > + { > + errno = ENOMEM; > + return -1; > + } > + > + rc = xc_cpu_policy_get_system(xch, XEN_SYSCTL_cpu_policy_host, host); > + if ( rc ) > + { > + ERROR("Failed to get host policy"); > + goto out; > + } > + > + /* > + * Account for features which have been disabled by default since Xen > 4.13, > + * so migrated-in VM's don't risk seeing features disappearing. > + */ > + policy->cpuid.basic.rdrand = host->cpuid.basic.rdrand; > + > + if ( hvm ) > + policy->cpuid.feat.mpx = host->cpuid.feat.mpx; > + > + /* Clamp maximum leaves to the ones supported on 4.12. */ > + policy->cpuid.basic.max_leaf = min(policy->cpuid.basic.max_leaf, 0xdu); > + policy->cpuid.feat.max_subleaf = 0; > + policy->cpuid.extd.max_leaf = min(policy->cpuid.extd.max_leaf, 0x1cu); > + > + out: > + xc_cpu_policy_destroy(host); > + return rc; > +} >