Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 fixes from Ingo Molnar. * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86, kvm: Call restore_sched_clock_state() only after %gs is initialized x86: Use -mno-avx when available x86: Remove the ancient and deprecated disable_hlt() and enable_hlt() facility x86: Preserve lazy irq disable semantics in fixup_irqs()
This commit is contained in:
commit
6742259866
|
@ -6,14 +6,6 @@ be removed from this file.
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: x86 floppy disable_hlt
|
|
||||||
When: 2012
|
|
||||||
Why: ancient workaround of dubious utility clutters the
|
|
||||||
code used by everybody else.
|
|
||||||
Who: Len Brown <len.brown@intel.com>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle
|
What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle
|
||||||
When: 2012
|
When: 2012
|
||||||
Why: This optional sub-feature of APM is of dubious reliability,
|
Why: This optional sub-feature of APM is of dubious reliability,
|
||||||
|
|
|
@ -129,6 +129,7 @@ KBUILD_CFLAGS += -Wno-sign-compare
|
||||||
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
|
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
|
||||||
# prevent gcc from generating any FP code by mistake
|
# prevent gcc from generating any FP code by mistake
|
||||||
KBUILD_CFLAGS += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
|
KBUILD_CFLAGS += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
|
||||||
|
KBUILD_CFLAGS += $(call cc-option,-mno-avx,)
|
||||||
|
|
||||||
KBUILD_CFLAGS += $(mflags-y)
|
KBUILD_CFLAGS += $(mflags-y)
|
||||||
KBUILD_AFLAGS += $(mflags-y)
|
KBUILD_AFLAGS += $(mflags-y)
|
||||||
|
|
|
@ -974,16 +974,6 @@ extern bool cpu_has_amd_erratum(const int *);
|
||||||
#define cpu_has_amd_erratum(x) (false)
|
#define cpu_has_amd_erratum(x) (false)
|
||||||
#endif /* CONFIG_CPU_SUP_AMD */
|
#endif /* CONFIG_CPU_SUP_AMD */
|
||||||
|
|
||||||
#ifdef CONFIG_X86_32
|
|
||||||
/*
|
|
||||||
* disable hlt during certain critical i/o operations
|
|
||||||
*/
|
|
||||||
#define HAVE_DISABLE_HLT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void disable_hlt(void);
|
|
||||||
void enable_hlt(void);
|
|
||||||
|
|
||||||
void cpu_idle_wait(void);
|
void cpu_idle_wait(void);
|
||||||
|
|
||||||
extern unsigned long arch_align_stack(unsigned long sp);
|
extern unsigned long arch_align_stack(unsigned long sp);
|
||||||
|
|
|
@ -282,8 +282,13 @@ void fixup_irqs(void)
|
||||||
else if (!(warned++))
|
else if (!(warned++))
|
||||||
set_affinity = 0;
|
set_affinity = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We unmask if the irq was not marked masked by the
|
||||||
|
* core code. That respects the lazy irq disable
|
||||||
|
* behaviour.
|
||||||
|
*/
|
||||||
if (!irqd_can_move_in_process_context(data) &&
|
if (!irqd_can_move_in_process_context(data) &&
|
||||||
!irqd_irq_disabled(data) && chip->irq_unmask)
|
!irqd_irq_masked(data) && chip->irq_unmask)
|
||||||
chip->irq_unmask(data);
|
chip->irq_unmask(data);
|
||||||
|
|
||||||
raw_spin_unlock(&desc->lock);
|
raw_spin_unlock(&desc->lock);
|
||||||
|
|
|
@ -362,34 +362,10 @@ void (*pm_idle)(void);
|
||||||
EXPORT_SYMBOL(pm_idle);
|
EXPORT_SYMBOL(pm_idle);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_X86_32
|
|
||||||
/*
|
|
||||||
* This halt magic was a workaround for ancient floppy DMA
|
|
||||||
* wreckage. It should be safe to remove.
|
|
||||||
*/
|
|
||||||
static int hlt_counter;
|
|
||||||
void disable_hlt(void)
|
|
||||||
{
|
|
||||||
hlt_counter++;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(disable_hlt);
|
|
||||||
|
|
||||||
void enable_hlt(void)
|
|
||||||
{
|
|
||||||
hlt_counter--;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(enable_hlt);
|
|
||||||
|
|
||||||
static inline int hlt_use_halt(void)
|
|
||||||
{
|
|
||||||
return (!hlt_counter && boot_cpu_data.hlt_works_ok);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static inline int hlt_use_halt(void)
|
static inline int hlt_use_halt(void)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CONFIG_SMP
|
#ifndef CONFIG_SMP
|
||||||
static inline void play_dead(void)
|
static inline void play_dead(void)
|
||||||
|
|
|
@ -225,13 +225,13 @@ static void __restore_processor_state(struct saved_context *ctxt)
|
||||||
fix_processor_context();
|
fix_processor_context();
|
||||||
|
|
||||||
do_fpu_end();
|
do_fpu_end();
|
||||||
|
x86_platform.restore_sched_clock_state();
|
||||||
mtrr_bp_restore();
|
mtrr_bp_restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Needed by apm.c */
|
/* Needed by apm.c */
|
||||||
void restore_processor_state(void)
|
void restore_processor_state(void)
|
||||||
{
|
{
|
||||||
x86_platform.restore_sched_clock_state();
|
|
||||||
__restore_processor_state(&saved_context);
|
__restore_processor_state(&saved_context);
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
|
|
|
@ -1030,37 +1030,6 @@ static int fd_wait_for_completion(unsigned long delay, timeout_fn function)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DEFINE_SPINLOCK(floppy_hlt_lock);
|
|
||||||
static int hlt_disabled;
|
|
||||||
static void floppy_disable_hlt(void)
|
|
||||||
{
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
WARN_ONCE(1, "floppy_disable_hlt() scheduled for removal in 2012");
|
|
||||||
spin_lock_irqsave(&floppy_hlt_lock, flags);
|
|
||||||
if (!hlt_disabled) {
|
|
||||||
hlt_disabled = 1;
|
|
||||||
#ifdef HAVE_DISABLE_HLT
|
|
||||||
disable_hlt();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
spin_unlock_irqrestore(&floppy_hlt_lock, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void floppy_enable_hlt(void)
|
|
||||||
{
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&floppy_hlt_lock, flags);
|
|
||||||
if (hlt_disabled) {
|
|
||||||
hlt_disabled = 0;
|
|
||||||
#ifdef HAVE_DISABLE_HLT
|
|
||||||
enable_hlt();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
spin_unlock_irqrestore(&floppy_hlt_lock, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void setup_DMA(void)
|
static void setup_DMA(void)
|
||||||
{
|
{
|
||||||
unsigned long f;
|
unsigned long f;
|
||||||
|
@ -1105,7 +1074,6 @@ static void setup_DMA(void)
|
||||||
fd_enable_dma();
|
fd_enable_dma();
|
||||||
release_dma_lock(f);
|
release_dma_lock(f);
|
||||||
#endif
|
#endif
|
||||||
floppy_disable_hlt();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_floppy(void);
|
static void show_floppy(void);
|
||||||
|
@ -1707,7 +1675,6 @@ irqreturn_t floppy_interrupt(int irq, void *dev_id)
|
||||||
fd_disable_dma();
|
fd_disable_dma();
|
||||||
release_dma_lock(f);
|
release_dma_lock(f);
|
||||||
|
|
||||||
floppy_enable_hlt();
|
|
||||||
do_floppy = NULL;
|
do_floppy = NULL;
|
||||||
if (fdc >= N_FDC || FDCS->address == -1) {
|
if (fdc >= N_FDC || FDCS->address == -1) {
|
||||||
/* we don't even know which FDC is the culprit */
|
/* we don't even know which FDC is the culprit */
|
||||||
|
@ -1856,8 +1823,6 @@ static void floppy_shutdown(unsigned long data)
|
||||||
show_floppy();
|
show_floppy();
|
||||||
cancel_activity();
|
cancel_activity();
|
||||||
|
|
||||||
floppy_enable_hlt();
|
|
||||||
|
|
||||||
flags = claim_dma_lock();
|
flags = claim_dma_lock();
|
||||||
fd_disable_dma();
|
fd_disable_dma();
|
||||||
release_dma_lock(flags);
|
release_dma_lock(flags);
|
||||||
|
@ -4508,7 +4473,6 @@ static void floppy_release_irq_and_dma(void)
|
||||||
#if N_FDC > 1
|
#if N_FDC > 1
|
||||||
set_dor(1, ~8, 0);
|
set_dor(1, ~8, 0);
|
||||||
#endif
|
#endif
|
||||||
floppy_enable_hlt();
|
|
||||||
|
|
||||||
if (floppy_track_buffer && max_buffer_sectors) {
|
if (floppy_track_buffer && max_buffer_sectors) {
|
||||||
tmpsize = max_buffer_sectors * 1024;
|
tmpsize = max_buffer_sectors * 1024;
|
||||||
|
|
Loading…
Reference in a new issue