Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 4 Apr 2012 17:04:01 +0000 (10:04 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 4 Apr 2012 17:04:01 +0000 (10:04 -0700)
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()

Documentation/feature-removal-schedule.txt
arch/x86/Makefile
arch/x86/include/asm/processor.h
arch/x86/kernel/irq.c
arch/x86/kernel/process.c
arch/x86/power/cpu.c
drivers/block/floppy.c

index c1be8066ea5914c33e9a7aacbfee66f8455741b2..709e08e9a222fd9f89a6eb91edf9f5b3326df536 100644 (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
 When:  2012
 Why:   This optional sub-feature of APM is of dubious reliability,
index 968dbe24a255453bb3bb3768cd76f2f72b424bcc..41a7237606a3b3a26393b0c7844166d728a9ed0a 100644 (file)
@@ -129,6 +129,7 @@ KBUILD_CFLAGS += -Wno-sign-compare
 KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
 # 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-avx,)
 
 KBUILD_CFLAGS += $(mflags-y)
 KBUILD_AFLAGS += $(mflags-y)
index 7284c9a6a0b531c29132a475b0429046787de742..4fa7dcceb6c084816346562bacdac4aa7098a9ee 100644 (file)
@@ -974,16 +974,6 @@ extern bool cpu_has_amd_erratum(const int *);
 #define cpu_has_amd_erratum(x) (false)
 #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);
 
 extern unsigned long arch_align_stack(unsigned long sp);
index 7943e0c21bde4daa742ed209e5121ab697f659e8..3dafc6003b7c4a5c177238f3f21d652cdb20ca30 100644 (file)
@@ -282,8 +282,13 @@ void fixup_irqs(void)
                else if (!(warned++))
                        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) &&
-                   !irqd_irq_disabled(data) && chip->irq_unmask)
+                   !irqd_irq_masked(data) && chip->irq_unmask)
                        chip->irq_unmask(data);
 
                raw_spin_unlock(&desc->lock);
index a33afaa5ddb78e2594f706b826fee37a9dd02129..1d92a5ab6e8b939613d6bfd7221133df2496b482 100644 (file)
@@ -362,34 +362,10 @@ void (*pm_idle)(void);
 EXPORT_SYMBOL(pm_idle);
 #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)
 {
        return 1;
 }
-#endif
 
 #ifndef CONFIG_SMP
 static inline void play_dead(void)
index 47936830968c5240497725557be336f6fed112c9..218cdb16163c3ae7026a40f95f06dd139a862db8 100644 (file)
@@ -225,13 +225,13 @@ static void __restore_processor_state(struct saved_context *ctxt)
        fix_processor_context();
 
        do_fpu_end();
+       x86_platform.restore_sched_clock_state();
        mtrr_bp_restore();
 }
 
 /* Needed by apm.c */
 void restore_processor_state(void)
 {
-       x86_platform.restore_sched_clock_state();
        __restore_processor_state(&saved_context);
 }
 #ifdef CONFIG_X86_32
index 76a08236430a0f1d2e6ca02ad347433115d7145e..b0b00d70c1669d6ef05993deb313dc516a23d552 100644 (file)
@@ -1030,37 +1030,6 @@ static int fd_wait_for_completion(unsigned long delay, timeout_fn function)
        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)
 {
        unsigned long f;
@@ -1105,7 +1074,6 @@ static void setup_DMA(void)
        fd_enable_dma();
        release_dma_lock(f);
 #endif
-       floppy_disable_hlt();
 }
 
 static void show_floppy(void);
@@ -1707,7 +1675,6 @@ irqreturn_t floppy_interrupt(int irq, void *dev_id)
        fd_disable_dma();
        release_dma_lock(f);
 
-       floppy_enable_hlt();
        do_floppy = NULL;
        if (fdc >= N_FDC || FDCS->address == -1) {
                /* we don't even know which FDC is the culprit */
@@ -1856,8 +1823,6 @@ static void floppy_shutdown(unsigned long data)
                show_floppy();
        cancel_activity();
 
-       floppy_enable_hlt();
-
        flags = claim_dma_lock();
        fd_disable_dma();
        release_dma_lock(flags);
@@ -4508,7 +4473,6 @@ static void floppy_release_irq_and_dma(void)
 #if N_FDC > 1
        set_dor(1, ~8, 0);
 #endif
-       floppy_enable_hlt();
 
        if (floppy_track_buffer && max_buffer_sectors) {
                tmpsize = max_buffer_sectors * 1024;