virCPUDefPtr baseline = NULL;
unsigned int ncpus = 0;
char *result = NULL;
+ const char *suffix;
size_t i;
if (!(cpus = cpuTestLoadMultiXML(data->arch, data->name, &ncpus)))
if (!baseline)
goto cleanup;
- if (virAsprintf(&result, "%s-result", data->name) < 0)
+ if (data->flags & VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES)
+ suffix = "expanded";
+ else
+ suffix = "result";
+ if (virAsprintf(&result, "%s-%s", data->name, suffix) < 0)
goto cleanup;
if (cpuTestCompareXML(data->arch, baseline, result, 0) < 0)
} while (0)
#define DO_TEST_BASELINE(arch, name, flags, result) \
- DO_TEST(arch, API_BASELINE, name, NULL, "baseline-" name, \
- NULL, 0, NULL, flags, result)
+ do { \
+ const char *suffix = ""; \
+ char *label; \
+ if ((flags) & VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES) \
+ suffix = " (expanded)"; \
+ if (virAsprintf(&label, "%s%s", name, suffix) < 0) { \
+ ret = -1; \
+ } else { \
+ DO_TEST(arch, API_BASELINE, label, NULL, "baseline-" name, \
+ NULL, 0, NULL, flags, result); \
+ } \
+ VIR_FREE(label); \
+ } while (0)
#define DO_TEST_HASFEATURE(arch, host, feature, result) \
DO_TEST(arch, API_HAS_FEATURE, \
--- /dev/null
+<cpu mode='custom' match='exact'>
+ <model fallback='allow'>Westmere</model>
+ <feature policy='require' name='lahf_lm'/>
+ <feature policy='require' name='lm'/>
+ <feature policy='require' name='nx'/>
+ <feature policy='require' name='syscall'/>
+ <feature policy='require' name='aes'/>
+ <feature policy='require' name='popcnt'/>
+ <feature policy='require' name='sse4.2'/>
+ <feature policy='require' name='sse4.1'/>
+ <feature policy='require' name='cx16'/>
+ <feature policy='require' name='ssse3'/>
+ <feature policy='require' name='pni'/>
+ <feature policy='require' name='sse2'/>
+ <feature policy='require' name='sse'/>
+ <feature policy='require' name='fxsr'/>
+ <feature policy='require' name='mmx'/>
+ <feature policy='require' name='clflush'/>
+ <feature policy='require' name='pse36'/>
+ <feature policy='require' name='pat'/>
+ <feature policy='require' name='cmov'/>
+ <feature policy='require' name='mca'/>
+ <feature policy='require' name='pge'/>
+ <feature policy='require' name='mtrr'/>
+ <feature policy='require' name='sep'/>
+ <feature policy='require' name='apic'/>
+ <feature policy='require' name='cx8'/>
+ <feature policy='require' name='mce'/>
+ <feature policy='require' name='pae'/>
+ <feature policy='require' name='msr'/>
+ <feature policy='require' name='tsc'/>
+ <feature policy='require' name='pse'/>
+ <feature policy='require' name='de'/>
+ <feature policy='require' name='fpu'/>
+</cpu>
+++ /dev/null
-<cpu mode='custom' match='exact'>
- <model fallback='allow'>Westmere</model>
- <feature policy='require' name='lahf_lm'/>
- <feature policy='require' name='lm'/>
- <feature policy='require' name='nx'/>
- <feature policy='require' name='syscall'/>
- <feature policy='require' name='aes'/>
- <feature policy='require' name='popcnt'/>
- <feature policy='require' name='sse4.2'/>
- <feature policy='require' name='sse4.1'/>
- <feature policy='require' name='cx16'/>
- <feature policy='require' name='ssse3'/>
- <feature policy='require' name='pni'/>
- <feature policy='require' name='sse2'/>
- <feature policy='require' name='sse'/>
- <feature policy='require' name='fxsr'/>
- <feature policy='require' name='mmx'/>
- <feature policy='require' name='clflush'/>
- <feature policy='require' name='pse36'/>
- <feature policy='require' name='pat'/>
- <feature policy='require' name='cmov'/>
- <feature policy='require' name='mca'/>
- <feature policy='require' name='pge'/>
- <feature policy='require' name='mtrr'/>
- <feature policy='require' name='sep'/>
- <feature policy='require' name='apic'/>
- <feature policy='require' name='cx8'/>
- <feature policy='require' name='mce'/>
- <feature policy='require' name='pae'/>
- <feature policy='require' name='msr'/>
- <feature policy='require' name='tsc'/>
- <feature policy='require' name='pse'/>
- <feature policy='require' name='de'/>
- <feature policy='require' name='fpu'/>
-</cpu>