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:
Linus Torvalds 2012-04-04 10:04:01 -07:00
commit 6742259866
7 changed files with 8 additions and 80 deletions

View file

@ -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,

View file

@ -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)

View file

@ -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);

View file

@ -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);

View file

@ -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)

View file

@ -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

View file

@ -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;