* target/i386: fix non-optimized compilation on clang
* fix detection of Solaris/IllumOS -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmUBj8cUHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroOP7QgApdNqHKH4zNbBRPk/cxYDZEd0maPl nolD0eBts5ZWDYnQk/fFzHflzh/b5F119xv9H3fB86i/D2JNUMdqFR8QmQr9ZwEW izjXe8CdWto4dsW2RQbxGihThjMGu5BTZucqKSvLiZcyTQhPhwZ917Jo9YM5k072 /1ECrCZYmCr2RECyNG6/zRrph8hustz5O0QEL65YhqK8ztttr+7E33m3CJ1fGEDy nbXu/WKrUxG20ohQJJ7Slpt9XTBGQXlfUO5gSg3nxkS9xqOjc15sCh+yit4gvS8f IDi8xD2JTWP05xQppSv33plEvmi+KrCY8d965isRsVbzPh5qB2osBoAa/A== =bOr3 -----END PGP SIGNATURE----- Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging * target/i386: fix non-optimized compilation on clang * fix detection of Solaris/IllumOS # -----BEGIN PGP SIGNATURE----- # # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmUBj8cUHHBib256aW5p # QHJlZGhhdC5jb20ACgkQv/vSX3jHroOP7QgApdNqHKH4zNbBRPk/cxYDZEd0maPl # nolD0eBts5ZWDYnQk/fFzHflzh/b5F119xv9H3fB86i/D2JNUMdqFR8QmQr9ZwEW # izjXe8CdWto4dsW2RQbxGihThjMGu5BTZucqKSvLiZcyTQhPhwZ917Jo9YM5k072 # /1ECrCZYmCr2RECyNG6/zRrph8hustz5O0QEL65YhqK8ztttr+7E33m3CJ1fGEDy # nbXu/WKrUxG20ohQJJ7Slpt9XTBGQXlfUO5gSg3nxkS9xqOjc15sCh+yit4gvS8f # IDi8xD2JTWP05xQppSv33plEvmi+KrCY8d965isRsVbzPh5qB2osBoAa/A== # =bOr3 # -----END PGP SIGNATURE----- # gpg: Signature made Wed 13 Sep 2023 06:32:39 EDT # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * tag 'for-upstream' of https://gitlab.com/bonzini/qemu: target/i386: Call accel-agnostic x86_cpu_get_supported_cpuid() target/i386: Drop accel_uses_host_cpuid before x86_cpu_get_supported_cpuid target/i386: Check kvm_hyperv_expand_features() return value meson: Fix targetos match for illumos and Solaris. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
6a2557c238
@ -226,7 +226,7 @@ if targetos == 'darwin'
|
||||
if compiler.get_id() == 'gcc'
|
||||
qemu_common_flags += '-DOS_OBJECT_USE_OBJC=0'
|
||||
endif
|
||||
elif targetos == 'solaris'
|
||||
elif targetos == 'sunos'
|
||||
# needed for CMSG_ macros in sys/socket.h
|
||||
qemu_common_flags += '-D_XOPEN_SOURCE=600'
|
||||
# needed for TIOCWIN* defines in termios.h
|
||||
@ -2048,7 +2048,7 @@ have_slirp_smbd = get_option('slirp_smbd') \
|
||||
if have_slirp_smbd
|
||||
smbd_path = get_option('smbd')
|
||||
if smbd_path == ''
|
||||
smbd_path = (targetos == 'solaris' ? '/usr/sfw/sbin/smbd' : '/usr/sbin/smbd')
|
||||
smbd_path = (targetos == 'sunos' ? '/usr/sfw/sbin/smbd' : '/usr/sbin/smbd')
|
||||
endif
|
||||
config_host_data.set_quoted('CONFIG_SMBD_COMMAND', smbd_path)
|
||||
endif
|
||||
|
@ -47,7 +47,7 @@ elif targetos == 'linux'
|
||||
system_ss.add(files('tap.c', 'tap-linux.c'))
|
||||
elif targetos in bsd_oses
|
||||
system_ss.add(files('tap.c', 'tap-bsd.c'))
|
||||
elif targetos == 'solaris'
|
||||
elif targetos == 'sunos'
|
||||
system_ss.add(files('tap.c', 'tap-solaris.c'))
|
||||
else
|
||||
system_ss.add(files('tap.c', 'tap-stub.c'))
|
||||
|
@ -6154,6 +6154,8 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
|
||||
case 7:
|
||||
/* Structured Extended Feature Flags Enumeration Leaf */
|
||||
if (count == 0) {
|
||||
uint32_t eax_0_unused, ebx_0, ecx_0, edx_0_unused;
|
||||
|
||||
/* Maximum ECX value for sub-leaves */
|
||||
*eax = env->cpuid_level_func7;
|
||||
*ebx = env->features[FEAT_7_0_EBX]; /* Feature flags */
|
||||
@ -6168,17 +6170,15 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
|
||||
* support enabling SGX and/or SGX flexible launch control,
|
||||
* then we need to update the VM's CPUID values accordingly.
|
||||
*/
|
||||
if ((*ebx & CPUID_7_0_EBX_SGX) &&
|
||||
(!kvm_enabled() ||
|
||||
!(kvm_arch_get_supported_cpuid(cs->kvm_state, 0x7, 0, R_EBX) &
|
||||
CPUID_7_0_EBX_SGX))) {
|
||||
x86_cpu_get_supported_cpuid(0x7, 0,
|
||||
&eax_0_unused, &ebx_0,
|
||||
&ecx_0, &edx_0_unused);
|
||||
if ((*ebx & CPUID_7_0_EBX_SGX) && !(ebx_0 & CPUID_7_0_EBX_SGX)) {
|
||||
*ebx &= ~CPUID_7_0_EBX_SGX;
|
||||
}
|
||||
|
||||
if ((*ecx & CPUID_7_0_ECX_SGX_LC) &&
|
||||
(!(*ebx & CPUID_7_0_EBX_SGX) || !kvm_enabled() ||
|
||||
!(kvm_arch_get_supported_cpuid(cs->kvm_state, 0x7, 0, R_ECX) &
|
||||
CPUID_7_0_ECX_SGX_LC))) {
|
||||
if ((*ecx & CPUID_7_0_ECX_SGX_LC)
|
||||
&& (!(*ebx & CPUID_7_0_EBX_SGX) || !(ecx_0 & CPUID_7_0_ECX_SGX_LC))) {
|
||||
*ecx &= ~CPUID_7_0_ECX_SGX_LC;
|
||||
}
|
||||
} else if (count == 1) {
|
||||
@ -6207,7 +6207,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
|
||||
break;
|
||||
case 0xA:
|
||||
/* Architectural Performance Monitoring Leaf */
|
||||
if (accel_uses_host_cpuid() && cpu->enable_pmu) {
|
||||
if (cpu->enable_pmu) {
|
||||
x86_cpu_get_supported_cpuid(0xA, count, eax, ebx, ecx, edx);
|
||||
} else {
|
||||
*eax = 0;
|
||||
@ -6247,8 +6247,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
|
||||
*ebx &= 0xffff; /* The count doesn't need to be reliable. */
|
||||
break;
|
||||
case 0x1C:
|
||||
if (accel_uses_host_cpuid() && cpu->enable_pmu &&
|
||||
(env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_LBR)) {
|
||||
if (cpu->enable_pmu && (env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_LBR)) {
|
||||
x86_cpu_get_supported_cpuid(0x1C, 0, eax, ebx, ecx, edx);
|
||||
*edx = 0;
|
||||
}
|
||||
@ -6322,9 +6321,8 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
|
||||
} else {
|
||||
*ecx &= ~XSTATE_ARCH_LBR_MASK;
|
||||
}
|
||||
} else if (count == 0xf &&
|
||||
accel_uses_host_cpuid() && cpu->enable_pmu &&
|
||||
(env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_LBR)) {
|
||||
} else if (count == 0xf && cpu->enable_pmu
|
||||
&& (env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_LBR)) {
|
||||
x86_cpu_get_supported_cpuid(0xD, count, eax, ebx, ecx, edx);
|
||||
} else if (count < ARRAY_SIZE(x86_ext_save_areas)) {
|
||||
const ExtSaveArea *esa = &x86_ext_save_areas[count];
|
||||
@ -7121,8 +7119,8 @@ void x86_cpu_expand_features(X86CPU *cpu, Error **errp)
|
||||
env->cpuid_xlevel2 = env->cpuid_min_xlevel2;
|
||||
}
|
||||
|
||||
if (kvm_enabled()) {
|
||||
kvm_hyperv_expand_features(cpu, errp);
|
||||
if (kvm_enabled() && !kvm_hyperv_expand_features(cpu, errp)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -7152,14 +7150,14 @@ static void x86_cpu_filter_features(X86CPU *cpu, bool verbose)
|
||||
mark_unavailable_features(cpu, w, unavailable_features, prefix);
|
||||
}
|
||||
|
||||
if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) &&
|
||||
kvm_enabled()) {
|
||||
KVMState *s = CPU(cpu)->kvm_state;
|
||||
uint32_t eax_0 = kvm_arch_get_supported_cpuid(s, 0x14, 0, R_EAX);
|
||||
uint32_t ebx_0 = kvm_arch_get_supported_cpuid(s, 0x14, 0, R_EBX);
|
||||
uint32_t ecx_0 = kvm_arch_get_supported_cpuid(s, 0x14, 0, R_ECX);
|
||||
uint32_t eax_1 = kvm_arch_get_supported_cpuid(s, 0x14, 1, R_EAX);
|
||||
uint32_t ebx_1 = kvm_arch_get_supported_cpuid(s, 0x14, 1, R_EBX);
|
||||
if (env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_INTEL_PT) {
|
||||
uint32_t eax_0, ebx_0, ecx_0, edx_0_unused;
|
||||
uint32_t eax_1, ebx_1, ecx_1_unused, edx_1_unused;
|
||||
|
||||
x86_cpu_get_supported_cpuid(0x14, 0,
|
||||
&eax_0, &ebx_0, &ecx_0, &edx_0_unused);
|
||||
x86_cpu_get_supported_cpuid(0x14, 1,
|
||||
&eax_1, &ebx_1, &ecx_1_unused, &edx_1_unused);
|
||||
|
||||
if (!eax_0 ||
|
||||
((ebx_0 & INTEL_PT_MINIMAL_EBX) != INTEL_PT_MINIMAL_EBX) ||
|
||||
|
Loading…
Reference in New Issue
Block a user