mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-17 05:41:10 +07:00
* Fixes for CONFIG_KVM_COMPAT=n
* Two updates to the IFU erratum * selftests build fix * Brown paper bag fix -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQEcBAABAgAGBQJdzm9YAAoJEL/70l94x66DUWAIAKODbb0j7IB9RHD3lOJI9evz m/+ajirYug2/vv78IkCo02sVssuHqUvqes60AlUGz7ZzGzVdwbSJ9dsu+e9ylq7M ZJIySe1R31R9qKbjoszKmL8/Dc8oe4pCHvwPsVDLNHFMmgb7nbaBrQ7SnPK8iwas N2ljMiq8gTRYmEmF7VOw2SZqm8BebjhxjfN8RVTOvDDkMozD15djw7mQ1BH0aISs rFt8NH8qXhgbdHXMyQUnQrNySMeH5igrrPLFESOshjIcVq67gUKW6pMdDc+uIVM7 9SLqa8mY4PfuHaYAaljZ7PKs3EkcUt5Si0arP7gF+Y0WIObALlUMr2tNDeClBmY= =VE3v -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm Pull more KVM fixes from Paolo Bonzini: - fixes for CONFIG_KVM_COMPAT=n - two updates to the IFU erratum - selftests build fix - brown paper bag fix * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: KVM: Add a comment describing the /dev/kvm no_compat handling KVM: x86/mmu: Take slots_lock when using kvm_mmu_zap_all_fast() KVM: Forbid /dev/kvm being opened by a compat task when CONFIG_KVM_COMPAT=n KVM: X86: Reset the three MSR list number variables to 0 in kvm_init_msr_list() selftests: kvm: fix build with glibc >= 2.30 kvm: x86: disable shattered huge page recovery for PREEMPT_RT.
This commit is contained in:
commit
74bc8acd6c
@ -51,7 +51,12 @@
|
|||||||
extern bool itlb_multihit_kvm_mitigation;
|
extern bool itlb_multihit_kvm_mitigation;
|
||||||
|
|
||||||
static int __read_mostly nx_huge_pages = -1;
|
static int __read_mostly nx_huge_pages = -1;
|
||||||
|
#ifdef CONFIG_PREEMPT_RT
|
||||||
|
/* Recovery can cause latency spikes, disable it for PREEMPT_RT. */
|
||||||
|
static uint __read_mostly nx_huge_pages_recovery_ratio = 0;
|
||||||
|
#else
|
||||||
static uint __read_mostly nx_huge_pages_recovery_ratio = 60;
|
static uint __read_mostly nx_huge_pages_recovery_ratio = 60;
|
||||||
|
#endif
|
||||||
|
|
||||||
static int set_nx_huge_pages(const char *val, const struct kernel_param *kp);
|
static int set_nx_huge_pages(const char *val, const struct kernel_param *kp);
|
||||||
static int set_nx_huge_pages_recovery_ratio(const char *val, const struct kernel_param *kp);
|
static int set_nx_huge_pages_recovery_ratio(const char *val, const struct kernel_param *kp);
|
||||||
@ -6280,14 +6285,13 @@ static int set_nx_huge_pages(const char *val, const struct kernel_param *kp)
|
|||||||
|
|
||||||
if (new_val != old_val) {
|
if (new_val != old_val) {
|
||||||
struct kvm *kvm;
|
struct kvm *kvm;
|
||||||
int idx;
|
|
||||||
|
|
||||||
mutex_lock(&kvm_lock);
|
mutex_lock(&kvm_lock);
|
||||||
|
|
||||||
list_for_each_entry(kvm, &vm_list, vm_list) {
|
list_for_each_entry(kvm, &vm_list, vm_list) {
|
||||||
idx = srcu_read_lock(&kvm->srcu);
|
mutex_lock(&kvm->slots_lock);
|
||||||
kvm_mmu_zap_all_fast(kvm);
|
kvm_mmu_zap_all_fast(kvm);
|
||||||
srcu_read_unlock(&kvm->srcu, idx);
|
mutex_unlock(&kvm->slots_lock);
|
||||||
|
|
||||||
wake_up_process(kvm->arch.nx_lpage_recovery_thread);
|
wake_up_process(kvm->arch.nx_lpage_recovery_thread);
|
||||||
}
|
}
|
||||||
|
@ -5130,6 +5130,10 @@ static void kvm_init_msr_list(void)
|
|||||||
|
|
||||||
perf_get_x86_pmu_capability(&x86_pmu);
|
perf_get_x86_pmu_capability(&x86_pmu);
|
||||||
|
|
||||||
|
num_msrs_to_save = 0;
|
||||||
|
num_emulated_msrs = 0;
|
||||||
|
num_msr_based_features = 0;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(msrs_to_save_all); i++) {
|
for (i = 0; i < ARRAY_SIZE(msrs_to_save_all); i++) {
|
||||||
if (rdmsr_safe(msrs_to_save_all[i], &dummy[0], &dummy[1]) < 0)
|
if (rdmsr_safe(msrs_to_save_all[i], &dummy[0], &dummy[1]) < 0)
|
||||||
continue;
|
continue;
|
||||||
|
@ -55,7 +55,7 @@ static void test_dump_stack(void)
|
|||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
}
|
}
|
||||||
|
|
||||||
static pid_t gettid(void)
|
static pid_t _gettid(void)
|
||||||
{
|
{
|
||||||
return syscall(SYS_gettid);
|
return syscall(SYS_gettid);
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ test_assert(bool exp, const char *exp_str,
|
|||||||
fprintf(stderr, "==== Test Assertion Failure ====\n"
|
fprintf(stderr, "==== Test Assertion Failure ====\n"
|
||||||
" %s:%u: %s\n"
|
" %s:%u: %s\n"
|
||||||
" pid=%d tid=%d - %s\n",
|
" pid=%d tid=%d - %s\n",
|
||||||
file, line, exp_str, getpid(), gettid(),
|
file, line, exp_str, getpid(), _gettid(),
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
test_dump_stack();
|
test_dump_stack();
|
||||||
if (fmt) {
|
if (fmt) {
|
||||||
|
@ -122,9 +122,22 @@ static long kvm_vcpu_compat_ioctl(struct file *file, unsigned int ioctl,
|
|||||||
unsigned long arg);
|
unsigned long arg);
|
||||||
#define KVM_COMPAT(c) .compat_ioctl = (c)
|
#define KVM_COMPAT(c) .compat_ioctl = (c)
|
||||||
#else
|
#else
|
||||||
|
/*
|
||||||
|
* For architectures that don't implement a compat infrastructure,
|
||||||
|
* adopt a double line of defense:
|
||||||
|
* - Prevent a compat task from opening /dev/kvm
|
||||||
|
* - If the open has been done by a 64bit task, and the KVM fd
|
||||||
|
* passed to a compat task, let the ioctls fail.
|
||||||
|
*/
|
||||||
static long kvm_no_compat_ioctl(struct file *file, unsigned int ioctl,
|
static long kvm_no_compat_ioctl(struct file *file, unsigned int ioctl,
|
||||||
unsigned long arg) { return -EINVAL; }
|
unsigned long arg) { return -EINVAL; }
|
||||||
#define KVM_COMPAT(c) .compat_ioctl = kvm_no_compat_ioctl
|
|
||||||
|
static int kvm_no_compat_open(struct inode *inode, struct file *file)
|
||||||
|
{
|
||||||
|
return is_compat_task() ? -ENODEV : 0;
|
||||||
|
}
|
||||||
|
#define KVM_COMPAT(c) .compat_ioctl = kvm_no_compat_ioctl, \
|
||||||
|
.open = kvm_no_compat_open
|
||||||
#endif
|
#endif
|
||||||
static int hardware_enable_all(void);
|
static int hardware_enable_all(void);
|
||||||
static void hardware_disable_all(void);
|
static void hardware_disable_all(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user