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:
@@ -605,15 +605,14 @@ struct kvm_vcpu *vm_recreate_with_one_vcpu(struct kvm_vm *vm)
|
||||
return vm_vcpu_recreate(vm, 0);
|
||||
}
|
||||
|
||||
void kvm_pin_this_task_to_pcpu(uint32_t pcpu)
|
||||
int __pin_task_to_cpu(pthread_t task, int cpu)
|
||||
{
|
||||
cpu_set_t mask;
|
||||
int r;
|
||||
cpu_set_t cpuset;
|
||||
|
||||
CPU_ZERO(&mask);
|
||||
CPU_SET(pcpu, &mask);
|
||||
r = sched_setaffinity(0, sizeof(mask), &mask);
|
||||
TEST_ASSERT(!r, "sched_setaffinity() failed for pCPU '%u'.", pcpu);
|
||||
CPU_ZERO(&cpuset);
|
||||
CPU_SET(cpu, &cpuset);
|
||||
|
||||
return pthread_setaffinity_np(task, sizeof(cpuset), &cpuset);
|
||||
}
|
||||
|
||||
static uint32_t parse_pcpu(const char *cpu_str, const cpu_set_t *allowed_mask)
|
||||
@@ -667,7 +666,7 @@ void kvm_parse_vcpu_pinning(const char *pcpus_string, uint32_t vcpu_to_pcpu[],
|
||||
|
||||
/* 2. Check if the main worker needs to be pinned. */
|
||||
if (cpu) {
|
||||
kvm_pin_this_task_to_pcpu(parse_pcpu(cpu, &allowed_mask));
|
||||
pin_self_to_cpu(parse_pcpu(cpu, &allowed_mask));
|
||||
cpu = strtok(NULL, delim);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user