mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
Merge tag 'kvm-x86-misc-6.17' of https://github.com/kvm-x86/linux into HEAD
KVM x86 misc changes for 6.17 - Prevert the host's DEBUGCTL.FREEZE_IN_SMM (Intel only) when running the guest. Failure to honor FREEZE_IN_SMM can bleed host state into the guest. - Explicitly check vmcs12.GUEST_DEBUGCTL on nested VM-Enter (Intel only) to prevent L1 from running L2 with features that KVM doesn't support, e.g. BTF. - Intercept SPEC_CTRL on AMD if the MSR shouldn't exist according to the vCPU's CPUID model. - Rework the MSR interception code so that the SVM and VMX APIs are more or less identical. - Recalculate all MSR intercepts from the "source" on MSR filter changes, and drop the dedicated "shadow" bitmaps (and their awful "max" size defines). - WARN and reject loading kvm-amd.ko instead of panicking the kernel if the nested SVM MSRPM offsets tracker can't handle an MSR. - Advertise support for LKGS (Load Kernel GS base), a new instruction that's loosely related to FRED, but is supported and enumerated independently. - Fix a user-triggerable WARN that syzkaller found by stuffing INIT_RECEIVED, a.k.a. WFS, and then putting the vCPU into VMX Root Mode (post-VMXON). Use the same approach KVM uses for dealing with "impossible" emulation when running a !URG guest, and simply wait until KVM_RUN to detect that the vCPU has architecturally impossible state. - Add KVM_X86_DISABLE_EXITS_APERFMPERF to allow disabling interception of APERF/MPERF reads, so that a "properly" configured VM can "virtualize" APERF/MPERF (with many caveats). - Reject KVM_SET_TSC_KHZ if vCPUs have been created, as changing the "default" frequency is unsupported for VMs with a "secure" TSC, and there's no known use case for changing the default frequency for other VM types.
This commit is contained in:
@@ -21,6 +21,8 @@
|
||||
#include <sys/eventfd.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#include "kvm_util_arch.h"
|
||||
#include "kvm_util_types.h"
|
||||
#include "sparsebit.h"
|
||||
@@ -1053,7 +1055,34 @@ struct kvm_vcpu *vm_recreate_with_one_vcpu(struct kvm_vm *vm);
|
||||
|
||||
void kvm_set_files_rlimit(uint32_t nr_vcpus);
|
||||
|
||||
void kvm_pin_this_task_to_pcpu(uint32_t pcpu);
|
||||
int __pin_task_to_cpu(pthread_t task, int cpu);
|
||||
|
||||
static inline void pin_task_to_cpu(pthread_t task, int cpu)
|
||||
{
|
||||
int r;
|
||||
|
||||
r = __pin_task_to_cpu(task, cpu);
|
||||
TEST_ASSERT(!r, "Failed to set thread affinity to pCPU '%u'", cpu);
|
||||
}
|
||||
|
||||
static inline int pin_task_to_any_cpu(pthread_t task)
|
||||
{
|
||||
int cpu = sched_getcpu();
|
||||
|
||||
pin_task_to_cpu(task, cpu);
|
||||
return cpu;
|
||||
}
|
||||
|
||||
static inline void pin_self_to_cpu(int cpu)
|
||||
{
|
||||
pin_task_to_cpu(pthread_self(), cpu);
|
||||
}
|
||||
|
||||
static inline int pin_self_to_any_cpu(void)
|
||||
{
|
||||
return pin_task_to_any_cpu(pthread_self());
|
||||
}
|
||||
|
||||
void kvm_print_vcpu_pinning_help(void);
|
||||
void kvm_parse_vcpu_pinning(const char *pcpus_string, uint32_t vcpu_to_pcpu[],
|
||||
int nr_vcpus);
|
||||
|
||||
Reference in New Issue
Block a user