Merge branch 'x86/urgent' into x86/mm to pick up dependencies
This commit is contained in:
@@ -56,6 +56,9 @@
|
||||
|
||||
static DEFINE_MUTEX(mce_log_mutex);
|
||||
|
||||
/* sysfs synchronization */
|
||||
static DEFINE_MUTEX(mce_sysfs_mutex);
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/mce.h>
|
||||
|
||||
@@ -130,6 +133,8 @@ void mce_setup(struct mce *m)
|
||||
|
||||
if (this_cpu_has(X86_FEATURE_INTEL_PPIN))
|
||||
rdmsrl(MSR_PPIN, m->ppin);
|
||||
|
||||
m->microcode = boot_cpu_data.microcode;
|
||||
}
|
||||
|
||||
DEFINE_PER_CPU(struct mce, injectm);
|
||||
@@ -262,7 +267,7 @@ static void __print_mce(struct mce *m)
|
||||
*/
|
||||
pr_emerg(HW_ERR "PROCESSOR %u:%x TIME %llu SOCKET %u APIC %x microcode %x\n",
|
||||
m->cpuvendor, m->cpuid, m->time, m->socketid, m->apicid,
|
||||
cpu_data(m->extcpu).microcode);
|
||||
m->microcode);
|
||||
}
|
||||
|
||||
static void print_mce(struct mce *m)
|
||||
@@ -2074,6 +2079,7 @@ static ssize_t set_ignore_ce(struct device *s,
|
||||
if (kstrtou64(buf, 0, &new) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&mce_sysfs_mutex);
|
||||
if (mca_cfg.ignore_ce ^ !!new) {
|
||||
if (new) {
|
||||
/* disable ce features */
|
||||
@@ -2086,6 +2092,8 @@ static ssize_t set_ignore_ce(struct device *s,
|
||||
on_each_cpu(mce_enable_ce, (void *)1, 1);
|
||||
}
|
||||
}
|
||||
mutex_unlock(&mce_sysfs_mutex);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
@@ -2098,6 +2106,7 @@ static ssize_t set_cmci_disabled(struct device *s,
|
||||
if (kstrtou64(buf, 0, &new) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&mce_sysfs_mutex);
|
||||
if (mca_cfg.cmci_disabled ^ !!new) {
|
||||
if (new) {
|
||||
/* disable cmci */
|
||||
@@ -2109,6 +2118,8 @@ static ssize_t set_cmci_disabled(struct device *s,
|
||||
on_each_cpu(mce_enable_ce, NULL, 1);
|
||||
}
|
||||
}
|
||||
mutex_unlock(&mce_sysfs_mutex);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
@@ -2116,8 +2127,19 @@ static ssize_t store_int_with_restart(struct device *s,
|
||||
struct device_attribute *attr,
|
||||
const char *buf, size_t size)
|
||||
{
|
||||
ssize_t ret = device_store_int(s, attr, buf, size);
|
||||
unsigned long old_check_interval = check_interval;
|
||||
ssize_t ret = device_store_ulong(s, attr, buf, size);
|
||||
|
||||
if (check_interval == old_check_interval)
|
||||
return ret;
|
||||
|
||||
if (check_interval < 1)
|
||||
check_interval = 1;
|
||||
|
||||
mutex_lock(&mce_sysfs_mutex);
|
||||
mce_restart();
|
||||
mutex_unlock(&mce_sysfs_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@@ -49,7 +49,7 @@
|
||||
|
||||
static int kvmapf = 1;
|
||||
|
||||
static int parse_no_kvmapf(char *arg)
|
||||
static int __init parse_no_kvmapf(char *arg)
|
||||
{
|
||||
kvmapf = 0;
|
||||
return 0;
|
||||
@@ -58,7 +58,7 @@ static int parse_no_kvmapf(char *arg)
|
||||
early_param("no-kvmapf", parse_no_kvmapf);
|
||||
|
||||
static int steal_acc = 1;
|
||||
static int parse_no_stealacc(char *arg)
|
||||
static int __init parse_no_stealacc(char *arg)
|
||||
{
|
||||
steal_acc = 0;
|
||||
return 0;
|
||||
@@ -67,7 +67,7 @@ static int parse_no_stealacc(char *arg)
|
||||
early_param("no-steal-acc", parse_no_stealacc);
|
||||
|
||||
static int kvmclock_vsyscall = 1;
|
||||
static int parse_no_kvmclock_vsyscall(char *arg)
|
||||
static int __init parse_no_kvmclock_vsyscall(char *arg)
|
||||
{
|
||||
kvmclock_vsyscall = 0;
|
||||
return 0;
|
||||
@@ -341,10 +341,10 @@ static void kvm_guest_cpu_init(void)
|
||||
#endif
|
||||
pa |= KVM_ASYNC_PF_ENABLED;
|
||||
|
||||
/* Async page fault support for L1 hypervisor is optional */
|
||||
if (wrmsr_safe(MSR_KVM_ASYNC_PF_EN,
|
||||
(pa | KVM_ASYNC_PF_DELIVERY_AS_PF_VMEXIT) & 0xffffffff, pa >> 32) < 0)
|
||||
wrmsrl(MSR_KVM_ASYNC_PF_EN, pa);
|
||||
if (kvm_para_has_feature(KVM_FEATURE_ASYNC_PF_VMEXIT))
|
||||
pa |= KVM_ASYNC_PF_DELIVERY_AS_PF_VMEXIT;
|
||||
|
||||
wrmsrl(MSR_KVM_ASYNC_PF_EN, pa);
|
||||
__this_cpu_write(apf_reason.enabled, 1);
|
||||
printk(KERN_INFO"KVM setup async PF for cpu %d\n",
|
||||
smp_processor_id());
|
||||
@@ -545,7 +545,8 @@ static void __init kvm_guest_init(void)
|
||||
pv_time_ops.steal_clock = kvm_steal_clock;
|
||||
}
|
||||
|
||||
if (kvm_para_has_feature(KVM_FEATURE_PV_TLB_FLUSH))
|
||||
if (kvm_para_has_feature(KVM_FEATURE_PV_TLB_FLUSH) &&
|
||||
!kvm_para_has_feature(KVM_FEATURE_STEAL_TIME))
|
||||
pv_mmu_ops.flush_tlb_others = kvm_flush_tlb_others;
|
||||
|
||||
if (kvm_para_has_feature(KVM_FEATURE_PV_EOI))
|
||||
@@ -633,7 +634,8 @@ static __init int kvm_setup_pv_tlb_flush(void)
|
||||
{
|
||||
int cpu;
|
||||
|
||||
if (kvm_para_has_feature(KVM_FEATURE_PV_TLB_FLUSH)) {
|
||||
if (kvm_para_has_feature(KVM_FEATURE_PV_TLB_FLUSH) &&
|
||||
!kvm_para_has_feature(KVM_FEATURE_STEAL_TIME)) {
|
||||
for_each_possible_cpu(cpu) {
|
||||
zalloc_cpumask_var_node(per_cpu_ptr(&__pv_tlb_mask, cpu),
|
||||
GFP_KERNEL, cpu_to_node(cpu));
|
||||
|
@@ -43,6 +43,13 @@ static inline void signal_compat_build_tests(void)
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, _sifields) != 3 * sizeof(int));
|
||||
#define CHECK_CSI_OFFSET(name) BUILD_BUG_ON(_sifields_offset != offsetof(compat_siginfo_t, _sifields.name))
|
||||
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_signo) != 0);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_errno) != 4);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_code) != 8);
|
||||
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_signo) != 0);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_errno) != 4);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_code) != 8);
|
||||
/*
|
||||
* Ensure that the size of each si_field never changes.
|
||||
* If it does, it is a sign that the
|
||||
@@ -63,36 +70,94 @@ static inline void signal_compat_build_tests(void)
|
||||
CHECK_CSI_SIZE (_kill, 2*sizeof(int));
|
||||
CHECK_SI_SIZE (_kill, 2*sizeof(int));
|
||||
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_pid) != 0x10);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_uid) != 0x14);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_pid) != 0xC);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_uid) != 0x10);
|
||||
|
||||
CHECK_CSI_OFFSET(_timer);
|
||||
CHECK_CSI_SIZE (_timer, 3*sizeof(int));
|
||||
CHECK_SI_SIZE (_timer, 6*sizeof(int));
|
||||
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_tid) != 0x10);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_overrun) != 0x14);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_value) != 0x18);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_tid) != 0x0C);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_overrun) != 0x10);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_value) != 0x14);
|
||||
|
||||
CHECK_CSI_OFFSET(_rt);
|
||||
CHECK_CSI_SIZE (_rt, 3*sizeof(int));
|
||||
CHECK_SI_SIZE (_rt, 4*sizeof(int));
|
||||
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_pid) != 0x10);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_uid) != 0x14);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_value) != 0x18);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_pid) != 0x0C);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_uid) != 0x10);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_value) != 0x14);
|
||||
|
||||
CHECK_CSI_OFFSET(_sigchld);
|
||||
CHECK_CSI_SIZE (_sigchld, 5*sizeof(int));
|
||||
CHECK_SI_SIZE (_sigchld, 8*sizeof(int));
|
||||
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_pid) != 0x10);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_uid) != 0x14);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_status) != 0x18);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_utime) != 0x20);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_stime) != 0x28);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_pid) != 0x0C);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_uid) != 0x10);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_status) != 0x14);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_utime) != 0x18);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_stime) != 0x1C);
|
||||
|
||||
#ifdef CONFIG_X86_X32_ABI
|
||||
CHECK_CSI_OFFSET(_sigchld_x32);
|
||||
CHECK_CSI_SIZE (_sigchld_x32, 7*sizeof(int));
|
||||
/* no _sigchld_x32 in the generic siginfo_t */
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, _sifields._sigchld_x32._utime) != 0x18);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, _sifields._sigchld_x32._stime) != 0x20);
|
||||
#endif
|
||||
|
||||
CHECK_CSI_OFFSET(_sigfault);
|
||||
CHECK_CSI_SIZE (_sigfault, 4*sizeof(int));
|
||||
CHECK_SI_SIZE (_sigfault, 8*sizeof(int));
|
||||
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_addr) != 0x10);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_addr) != 0x0C);
|
||||
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_addr_lsb) != 0x18);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_addr_lsb) != 0x10);
|
||||
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_lower) != 0x20);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_upper) != 0x28);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_lower) != 0x14);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_upper) != 0x18);
|
||||
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_pkey) != 0x20);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_pkey) != 0x14);
|
||||
|
||||
CHECK_CSI_OFFSET(_sigpoll);
|
||||
CHECK_CSI_SIZE (_sigpoll, 2*sizeof(int));
|
||||
CHECK_SI_SIZE (_sigpoll, 4*sizeof(int));
|
||||
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_band) != 0x10);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_fd) != 0x18);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_band) != 0x0C);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_fd) != 0x10);
|
||||
|
||||
CHECK_CSI_OFFSET(_sigsys);
|
||||
CHECK_CSI_SIZE (_sigsys, 3*sizeof(int));
|
||||
CHECK_SI_SIZE (_sigsys, 4*sizeof(int));
|
||||
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_call_addr) != 0x10);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_syscall) != 0x18);
|
||||
BUILD_BUG_ON(offsetof(siginfo_t, si_arch) != 0x1C);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_call_addr) != 0x0C);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_syscall) != 0x10);
|
||||
BUILD_BUG_ON(offsetof(compat_siginfo_t, si_arch) != 0x14);
|
||||
|
||||
/* any new si_fields should be added here */
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user