Merge commit '7ed6fb9b5a5510e4ef78ab27419184741169978a' into x86/espfix
Merge in Linus' tree with:
fa81511bb0
x86-64, modify_ldt: Make support for 16-bit segments a runtime option
... reverted, to avoid a conflict. This commit is no longer necessary
with the proper fix in place.
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:
@@ -31,7 +31,7 @@ static char temp_stack[4096];
|
||||
*
|
||||
* Wrapper around acpi_enter_sleep_state() to be called by assmebly.
|
||||
*/
|
||||
acpi_status asmlinkage x86_acpi_enter_sleep_state(u8 state)
|
||||
acpi_status asmlinkage __visible x86_acpi_enter_sleep_state(u8 state)
|
||||
{
|
||||
return acpi_enter_sleep_state(state);
|
||||
}
|
||||
|
@@ -2189,7 +2189,7 @@ void send_cleanup_vector(struct irq_cfg *cfg)
|
||||
cfg->move_in_progress = 0;
|
||||
}
|
||||
|
||||
asmlinkage void smp_irq_move_cleanup_interrupt(void)
|
||||
asmlinkage __visible void smp_irq_move_cleanup_interrupt(void)
|
||||
{
|
||||
unsigned vector, me;
|
||||
|
||||
@@ -3425,6 +3425,11 @@ int get_nr_irqs_gsi(void)
|
||||
return nr_irqs_gsi;
|
||||
}
|
||||
|
||||
unsigned int arch_dynirq_lower_bound(unsigned int from)
|
||||
{
|
||||
return from < nr_irqs_gsi ? nr_irqs_gsi : from;
|
||||
}
|
||||
|
||||
int __init arch_probe_nr_irqs(void)
|
||||
{
|
||||
int nr;
|
||||
|
@@ -429,14 +429,14 @@ static inline void __smp_thermal_interrupt(void)
|
||||
smp_thermal_vector();
|
||||
}
|
||||
|
||||
asmlinkage void smp_thermal_interrupt(struct pt_regs *regs)
|
||||
asmlinkage __visible void smp_thermal_interrupt(struct pt_regs *regs)
|
||||
{
|
||||
entering_irq();
|
||||
__smp_thermal_interrupt();
|
||||
exiting_ack_irq();
|
||||
}
|
||||
|
||||
asmlinkage void smp_trace_thermal_interrupt(struct pt_regs *regs)
|
||||
asmlinkage __visible void smp_trace_thermal_interrupt(struct pt_regs *regs)
|
||||
{
|
||||
entering_irq();
|
||||
trace_thermal_apic_entry(THERMAL_APIC_VECTOR);
|
||||
|
@@ -24,14 +24,14 @@ static inline void __smp_threshold_interrupt(void)
|
||||
mce_threshold_vector();
|
||||
}
|
||||
|
||||
asmlinkage void smp_threshold_interrupt(void)
|
||||
asmlinkage __visible void smp_threshold_interrupt(void)
|
||||
{
|
||||
entering_irq();
|
||||
__smp_threshold_interrupt();
|
||||
exiting_ack_irq();
|
||||
}
|
||||
|
||||
asmlinkage void smp_trace_threshold_interrupt(void)
|
||||
asmlinkage __visible void smp_trace_threshold_interrupt(void)
|
||||
{
|
||||
entering_irq();
|
||||
trace_threshold_apic_entry(THRESHOLD_APIC_VECTOR);
|
||||
|
@@ -543,7 +543,8 @@ static int rapl_cpu_prepare(int cpu)
|
||||
if (phys_id < 0)
|
||||
return -1;
|
||||
|
||||
if (!rdmsrl_safe(MSR_RAPL_POWER_UNIT, &msr_rapl_power_unit_bits))
|
||||
/* protect rdmsrl() to handle virtualization */
|
||||
if (rdmsrl_safe(MSR_RAPL_POWER_UNIT, &msr_rapl_power_unit_bits))
|
||||
return -1;
|
||||
|
||||
pmu = kzalloc_node(sizeof(*pmu), GFP_KERNEL, cpu_to_node(cpu));
|
||||
|
@@ -27,6 +27,7 @@
|
||||
static int __init x86_rdrand_setup(char *s)
|
||||
{
|
||||
setup_clear_cpu_cap(X86_FEATURE_RDRAND);
|
||||
setup_clear_cpu_cap(X86_FEATURE_RDSEED);
|
||||
return 1;
|
||||
}
|
||||
__setup("nordrand", x86_rdrand_setup);
|
||||
|
@@ -17,6 +17,7 @@
|
||||
#include <asm/dma.h>
|
||||
#include <asm/io_apic.h>
|
||||
#include <asm/apic.h>
|
||||
#include <asm/hpet.h>
|
||||
#include <asm/iommu.h>
|
||||
#include <asm/gart.h>
|
||||
#include <asm/irq_remapping.h>
|
||||
@@ -530,6 +531,15 @@ static void __init intel_graphics_stolen(int num, int slot, int func)
|
||||
}
|
||||
}
|
||||
|
||||
static void __init force_disable_hpet(int num, int slot, int func)
|
||||
{
|
||||
#ifdef CONFIG_HPET_TIMER
|
||||
boot_hpet_disable = 1;
|
||||
pr_info("x86/hpet: Will disable the HPET for this platform because it's not reliable\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#define QFLAG_APPLY_ONCE 0x1
|
||||
#define QFLAG_APPLIED 0x2
|
||||
#define QFLAG_DONE (QFLAG_APPLY_ONCE|QFLAG_APPLIED)
|
||||
@@ -567,6 +577,12 @@ static struct chipset early_qrk[] __initdata = {
|
||||
PCI_BASE_CLASS_BRIDGE, 0, intel_remapping_check },
|
||||
{ PCI_VENDOR_ID_INTEL, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA, PCI_ANY_ID,
|
||||
QFLAG_APPLY_ONCE, intel_graphics_stolen },
|
||||
/*
|
||||
* HPET on current version of Baytrail platform has accuracy
|
||||
* problems, disable it for now:
|
||||
*/
|
||||
{ PCI_VENDOR_ID_INTEL, 0x0f00,
|
||||
PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, force_disable_hpet},
|
||||
{}
|
||||
};
|
||||
|
||||
|
@@ -29,7 +29,7 @@ static void __init i386_default_early_setup(void)
|
||||
reserve_ebda_region();
|
||||
}
|
||||
|
||||
asmlinkage void __init i386_start_kernel(void)
|
||||
asmlinkage __visible void __init i386_start_kernel(void)
|
||||
{
|
||||
sanitize_boot_params(&boot_params);
|
||||
|
||||
|
@@ -137,7 +137,7 @@ static void __init copy_bootdata(char *real_mode_data)
|
||||
}
|
||||
}
|
||||
|
||||
asmlinkage void __init x86_64_start_kernel(char * real_mode_data)
|
||||
asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@@ -88,7 +88,7 @@ static inline void hpet_clear_mapping(void)
|
||||
/*
|
||||
* HPET command line enable / disable
|
||||
*/
|
||||
static int boot_hpet_disable;
|
||||
int boot_hpet_disable;
|
||||
int hpet_force_user;
|
||||
static int hpet_verbose;
|
||||
|
||||
|
@@ -52,7 +52,7 @@
|
||||
|
||||
asmlinkage extern void ret_from_fork(void);
|
||||
|
||||
asmlinkage DEFINE_PER_CPU(unsigned long, old_rsp);
|
||||
__visible DEFINE_PER_CPU(unsigned long, old_rsp);
|
||||
|
||||
/* Prints also some state that isn't saved in the pt_regs */
|
||||
void __show_regs(struct pt_regs *regs, int all)
|
||||
|
@@ -191,6 +191,16 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
||||
},
|
||||
},
|
||||
|
||||
/* Certec */
|
||||
{ /* Handle problems with rebooting on Certec BPC600 */
|
||||
.callback = set_pci_reboot,
|
||||
.ident = "Certec BPC600",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Certec"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "BPC600"),
|
||||
},
|
||||
},
|
||||
|
||||
/* Dell */
|
||||
{ /* Handle problems with rebooting on Dell DXP061 */
|
||||
.callback = set_bios_reboot,
|
||||
|
@@ -168,7 +168,7 @@ static int smp_stop_nmi_callback(unsigned int val, struct pt_regs *regs)
|
||||
* this function calls the 'stop' function on all other CPUs in the system.
|
||||
*/
|
||||
|
||||
asmlinkage void smp_reboot_interrupt(void)
|
||||
asmlinkage __visible void smp_reboot_interrupt(void)
|
||||
{
|
||||
ack_APIC_irq();
|
||||
irq_enter();
|
||||
|
@@ -357,7 +357,7 @@ exit:
|
||||
* for scheduling or signal handling. The actual stack switch is done in
|
||||
* entry.S
|
||||
*/
|
||||
asmlinkage __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs)
|
||||
asmlinkage __visible __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs)
|
||||
{
|
||||
struct pt_regs *regs = eregs;
|
||||
/* Did already sync */
|
||||
@@ -601,11 +601,11 @@ do_spurious_interrupt_bug(struct pt_regs *regs, long error_code)
|
||||
#endif
|
||||
}
|
||||
|
||||
asmlinkage void __attribute__((weak)) smp_thermal_interrupt(void)
|
||||
asmlinkage __visible void __attribute__((weak)) smp_thermal_interrupt(void)
|
||||
{
|
||||
}
|
||||
|
||||
asmlinkage void __attribute__((weak)) smp_threshold_interrupt(void)
|
||||
asmlinkage __visible void __attribute__((weak)) smp_threshold_interrupt(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -26,6 +26,9 @@
|
||||
|
||||
#define TOPOLOGY_REGISTER_OFFSET 0x10
|
||||
|
||||
/* Flag below is initialized once during vSMP PCI initialization. */
|
||||
static int irq_routing_comply = 1;
|
||||
|
||||
#if defined CONFIG_PCI && defined CONFIG_PARAVIRT
|
||||
/*
|
||||
* Interrupt control on vSMPowered systems:
|
||||
@@ -33,7 +36,7 @@
|
||||
* and vice versa.
|
||||
*/
|
||||
|
||||
asmlinkage unsigned long vsmp_save_fl(void)
|
||||
asmlinkage __visible unsigned long vsmp_save_fl(void)
|
||||
{
|
||||
unsigned long flags = native_save_fl();
|
||||
|
||||
@@ -53,7 +56,7 @@ __visible void vsmp_restore_fl(unsigned long flags)
|
||||
}
|
||||
PV_CALLEE_SAVE_REGS_THUNK(vsmp_restore_fl);
|
||||
|
||||
asmlinkage void vsmp_irq_disable(void)
|
||||
asmlinkage __visible void vsmp_irq_disable(void)
|
||||
{
|
||||
unsigned long flags = native_save_fl();
|
||||
|
||||
@@ -61,7 +64,7 @@ asmlinkage void vsmp_irq_disable(void)
|
||||
}
|
||||
PV_CALLEE_SAVE_REGS_THUNK(vsmp_irq_disable);
|
||||
|
||||
asmlinkage void vsmp_irq_enable(void)
|
||||
asmlinkage __visible void vsmp_irq_enable(void)
|
||||
{
|
||||
unsigned long flags = native_save_fl();
|
||||
|
||||
@@ -101,6 +104,10 @@ static void __init set_vsmp_pv_ops(void)
|
||||
#ifdef CONFIG_SMP
|
||||
if (cap & ctl & BIT(8)) {
|
||||
ctl &= ~BIT(8);
|
||||
|
||||
/* Interrupt routing set to ignore */
|
||||
irq_routing_comply = 0;
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
/* Don't let users change irq affinity via procfs */
|
||||
no_irq_affinity = 1;
|
||||
@@ -218,7 +225,9 @@ static void vsmp_apic_post_init(void)
|
||||
{
|
||||
/* need to update phys_pkg_id */
|
||||
apic->phys_pkg_id = apicid_phys_pkg_id;
|
||||
apic->vector_allocation_domain = fill_vector_allocation_domain;
|
||||
|
||||
if (!irq_routing_comply)
|
||||
apic->vector_allocation_domain = fill_vector_allocation_domain;
|
||||
}
|
||||
|
||||
void __init vsmp_init(void)
|
||||
|
@@ -43,7 +43,7 @@ void update_vsyscall(struct timekeeper *tk)
|
||||
vdata->monotonic_time_sec = tk->xtime_sec
|
||||
+ tk->wall_to_monotonic.tv_sec;
|
||||
vdata->monotonic_time_snsec = tk->xtime_nsec
|
||||
+ (tk->wall_to_monotonic.tv_nsec
|
||||
+ ((u64)tk->wall_to_monotonic.tv_nsec
|
||||
<< tk->shift);
|
||||
while (vdata->monotonic_time_snsec >=
|
||||
(((u64)NSEC_PER_SEC) << tk->shift)) {
|
||||
|
Reference in New Issue
Block a user