Merge branch 'x86-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 23 Jun 2015 00:59:09 +0000 (17:59 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 23 Jun 2015 00:59:09 +0000 (17:59 -0700)
Pull x86 core updates from Ingo Molnar:
 "There were so many changes in the x86/asm, x86/apic and x86/mm topics
  in this cycle that the topical separation of -tip broke down somewhat -
  so the result is a more traditional architecture pull request,
  collected into the 'x86/core' topic.

  The topics were still maintained separately as far as possible, so
  bisectability and conceptual separation should still be pretty good -
  but there were a handful of merge points to avoid excessive
  dependencies (and conflicts) that would have been poorly tested in the
  end.

  The next cycle will hopefully be much more quiet (or at least will
  have fewer dependencies).

  The main changes in this cycle were:

   * x86/apic changes, with related IRQ core changes: (Jiang Liu, Thomas
     Gleixner)

     - This is the second and most intrusive part of changes to the x86
       interrupt handling - full conversion to hierarchical interrupt
       domains:

          [IOAPIC domain]   -----
                                 |
          [MSI domain]      --------[Remapping domain] ----- [ Vector domain ]
                                 |   (optional)          |
          [HPET MSI domain] -----                        |
                                                         |
          [DMAR domain]     -----------------------------
                                                         |
          [Legacy domain]   -----------------------------

       This now reflects the actual hardware and allowed us to distangle
       the domain specific code from the underlying parent domain, which
       can be optional in the case of interrupt remapping.  It's a clear
       separation of functionality and removes quite some duct tape
       constructs which plugged the remap code between ioapic/msi/hpet
       and the vector management.

     - Intel IOMMU IRQ remapping enhancements, to allow direct interrupt
       injection into guests (Feng Wu)

   * x86/asm changes:

     - Tons of cleanups and small speedups, micro-optimizations.  This
       is in preparation to move a good chunk of the low level entry
       code from assembly to C code (Denys Vlasenko, Andy Lutomirski,
       Brian Gerst)

     - Moved all system entry related code to a new home under
       arch/x86/entry/ (Ingo Molnar)

     - Removal of the fragile and ugly CFI dwarf debuginfo annotations.
       Conversion to C will reintroduce many of them - but meanwhile
       they are only getting in the way, and the upstream kernel does
       not rely on them (Ingo Molnar)

     - NOP handling refinements. (Borislav Petkov)

   * x86/mm changes:

     - Big PAT and MTRR rework: making the code more robust and
       preparing to phase out exposing direct MTRR interfaces to drivers -
       in favor of using PAT driven interfaces (Toshi Kani, Luis R
       Rodriguez, Borislav Petkov)

     - New ioremap_wt()/set_memory_wt() interfaces to support
       Write-Through cached memory mappings.  This is especially
       important for good performance on NVDIMM hardware (Toshi Kani)

   * x86/ras changes:

     - Add support for deferred errors on AMD (Aravind Gopalakrishnan)

       This is an important RAS feature which adds hardware support for
       poisoned data.  That means roughly that the hardware marks data
       which it has detected as corrupted but wasn't able to correct, as
       poisoned data and raises an APIC interrupt to signal that in the
       form of a deferred error.  It is the OS's responsibility then to
       take proper recovery action and thus prolonge system lifetime as
       far as possible.

     - Add support for Intel "Local MCE"s: upcoming CPUs will support
       CPU-local MCE interrupts, as opposed to the traditional system-
       wide broadcasted MCE interrupts (Ashok Raj)

     - Misc cleanups (Borislav Petkov)

   * x86/platform changes:

     - Intel Atom SoC updates

  ... and lots of other cleanups, fixlets and other changes - see the
  shortlog and the Git log for details"

* 'x86-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (222 commits)
  x86/hpet: Use proper hpet device number for MSI allocation
  x86/hpet: Check for irq==0 when allocating hpet MSI interrupts
  x86/mm/pat, drivers/infiniband/ipath: Use arch_phys_wc_add() and require PAT disabled
  x86/mm/pat, drivers/media/ivtv: Use arch_phys_wc_add() and require PAT disabled
  x86/platform/intel/baytrail: Add comments about why we disabled HPET on Baytrail
  genirq: Prevent crash in irq_move_irq()
  genirq: Enhance irq_data_to_desc() to support hierarchy irqdomain
  iommu, x86: Properly handle posted interrupts for IOMMU hotplug
  iommu, x86: Provide irq_remapping_cap() interface
  iommu, x86: Setup Posted-Interrupts capability for Intel iommu
  iommu, x86: Add cap_pi_support() to detect VT-d PI capability
  iommu, x86: Avoid migrating VT-d posted interrupts
  iommu, x86: Save the mode (posted or remapped) of an IRTE
  iommu, x86: Implement irq_set_vcpu_affinity for intel_ir_chip
  iommu: dmar: Provide helper to copy shared irte fields
  iommu: dmar: Extend struct irte for VT-d Posted-Interrupts
  iommu: Add new member capability to struct irq_remap_ops
  x86/asm/entry/64: Disentangle error_entry/exit gsbase/ebx/usermode code
  x86/asm/entry/32: Shorten __audit_syscall_entry() args preparation
  x86/asm/entry/32: Explain reloading of registers after __audit_syscall_entry()
  ...

25 files changed:
1  2 
Documentation/kernel-parameters.txt
MAINTAINERS
arch/x86/Kconfig.debug
arch/x86/entry/thunk_32.S
arch/x86/entry/thunk_64.S
arch/x86/include/asm/topology.h
arch/x86/include/asm/uaccess_32.h
arch/x86/kernel/Makefile
arch/x86/kernel/alternative.c
arch/x86/kernel/cpu/amd.c
arch/x86/kernel/cpu/common.c
arch/x86/kernel/cpu/mcheck/mce.c
arch/x86/kernel/head_32.S
arch/x86/kernel/process_32.c
arch/x86/kernel/process_64.c
arch/x86/kernel/setup.c
arch/x86/kernel/smpboot.c
arch/x86/kernel/traps.c
arch/x86/lguest/boot.c
arch/x86/mm/iomap_32.c
arch/x86/mm/ioremap.c
arch/x86/xen/enlighten.c
drivers/iommu/amd_iommu.c
include/linux/intel-iommu.h
tools/testing/selftests/x86/Makefile

Simple merge
diff --cc MAINTAINERS
Simple merge
@@@ -332,16 -332,15 +332,27 @@@ config X86_DEBUG_STATIC_CPU_HA
  
          If unsure, say N.
  
 +config X86_DEBUG_FPU
 +      bool "Debug the x86 FPU code"
 +      depends on DEBUG_KERNEL
 +      default y
 +      ---help---
 +        If this option is enabled then there will be extra sanity
 +        checks and (boot time) debug printouts added to the kernel.
 +        This debugging adds some small amount of runtime overhead
 +        to the kernel.
 +
 +        If unsure, say N.
 +
+ config PUNIT_ATOM_DEBUG
+       tristate "ATOM Punit debug driver"
+       select DEBUG_FS
+       select IOSF_MBI
+       ---help---
+         This is a debug driver, which gets the power states
+         of all Punit North Complex devices. The power states of
+         each device is exposed as part of the debugfs interface.
+         The current power state can be read from
+         /sys/kernel/debug/punit_atom/dev_power_state
  endmenu
index 0000000,e9acf5f..e5a1711
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,42 +1,40 @@@
 -#ifdef CONFIG_CONTEXT_TRACKING
 -      THUNK ___preempt_schedule_context, preempt_schedule_context
 -#endif
+ /*
+  * Trampoline to trace irqs off. (otherwise CALLER_ADDR1 might crash)
+  * Copyright 2008 by Steven Rostedt, Red Hat, Inc
+  *  (inspired by Andi Kleen's thunk_64.S)
+  * Subject to the GNU public license, v.2. No warranty of any kind.
+  */
+       #include <linux/linkage.h>
+       #include <asm/asm.h>
+       /* put return address in eax (arg1) */
+       .macro THUNK name, func, put_ret_addr_in_eax=0
+       .globl \name
+ \name:
+       pushl %eax
+       pushl %ecx
+       pushl %edx
+       .if \put_ret_addr_in_eax
+       /* Place EIP in the arg1 */
+       movl 3*4(%esp), %eax
+       .endif
+       call \func
+       popl %edx
+       popl %ecx
+       popl %eax
+       ret
+       _ASM_NOKPROBE(\name)
+       .endm
+ #ifdef CONFIG_TRACE_IRQFLAGS
+       THUNK trace_hardirqs_on_thunk,trace_hardirqs_on_caller,1
+       THUNK trace_hardirqs_off_thunk,trace_hardirqs_off_caller,1
+ #endif
+ #ifdef CONFIG_PREEMPT
+       THUNK ___preempt_schedule, preempt_schedule
++      THUNK ___preempt_schedule_notrace, preempt_schedule_notrace
+ #endif
index 0000000,3e95681..efb2b93
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,69 +1,67 @@@
 -#ifdef CONFIG_CONTEXT_TRACKING
 -      THUNK ___preempt_schedule_context, preempt_schedule_context
 -#endif
+ /*
+  * Save registers before calling assembly functions. This avoids
+  * disturbance of register allocation in some inline assembly constructs.
+  * Copyright 2001,2002 by Andi Kleen, SuSE Labs.
+  * Added trace_hardirqs callers - Copyright 2007 Steven Rostedt, Red Hat, Inc.
+  * Subject to the GNU public license, v.2. No warranty of any kind.
+  */
+ #include <linux/linkage.h>
+ #include "calling.h"
+ #include <asm/asm.h>
+       /* rdi: arg1 ... normal C conventions. rax is saved/restored. */
+       .macro THUNK name, func, put_ret_addr_in_rdi=0
+       .globl \name
+ \name:
+       /* this one pushes 9 elems, the next one would be %rIP */
+       pushq %rdi
+       pushq %rsi
+       pushq %rdx
+       pushq %rcx
+       pushq %rax
+       pushq %r8
+       pushq %r9
+       pushq %r10
+       pushq %r11
+       .if \put_ret_addr_in_rdi
+       /* 9*8(%rsp) is return addr on stack */
+       movq 9*8(%rsp), %rdi
+       .endif
+       call \func
+       jmp  restore
+       _ASM_NOKPROBE(\name)
+       .endm
+ #ifdef CONFIG_TRACE_IRQFLAGS
+       THUNK trace_hardirqs_on_thunk,trace_hardirqs_on_caller,1
+       THUNK trace_hardirqs_off_thunk,trace_hardirqs_off_caller,1
+ #endif
+ #ifdef CONFIG_DEBUG_LOCK_ALLOC
+       THUNK lockdep_sys_exit_thunk,lockdep_sys_exit
+ #endif
+ #ifdef CONFIG_PREEMPT
+       THUNK ___preempt_schedule, preempt_schedule
++      THUNK ___preempt_schedule_notrace, preempt_schedule_notrace
+ #endif
+ #if defined(CONFIG_TRACE_IRQFLAGS) \
+  || defined(CONFIG_DEBUG_LOCK_ALLOC) \
+  || defined(CONFIG_PREEMPT)
+ restore:
+       popq %r11
+       popq %r10
+       popq %r9
+       popq %r8
+       popq %rax
+       popq %rcx
+       popq %rdx
+       popq %rsi
+       popq %rdi
+       ret
+       _ASM_NOKPROBE(restore)
+ #endif
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -295,10 -288,10 +295,10 @@@ static int nearby_node(int apicid
   *     Assumption: Number of cores in each internal node is the same.
   * (2) AMD processors supporting compute units
   */
- #ifdef CONFIG_X86_HT
+ #ifdef CONFIG_SMP
  static void amd_get_topology(struct cpuinfo_x86 *c)
  {
 -      u32 nodes, cores_per_cu = 1;
 +      u32 cores_per_cu = 1;
        u8 node_id;
        int cpu = smp_processor_id();
  
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -769,20 -812,50 +768,8 @@@ dotraplinkage voi
  do_spurious_interrupt_bug(struct pt_regs *regs, long error_code)
  {
        conditional_sti(regs);
- #if 0
-       /* No need to warn about this any longer. */
-       pr_info("Ignoring P6 Local APIC Spurious Interrupt Bug...\n");
- #endif
- }
- asmlinkage __visible void __attribute__((weak)) smp_thermal_interrupt(void)
- {
- }
- asmlinkage __visible void __attribute__((weak)) smp_threshold_interrupt(void)
- {
  }
  
 -/*
 - * 'math_state_restore()' saves the current math information in the
 - * old math state array, and gets the new ones from the current task
 - *
 - * Careful.. There are problems with IBM-designed IRQ13 behaviour.
 - * Don't touch unless you *really* know how it works.
 - *
 - * Must be called with kernel preemption disabled (eg with local
 - * local interrupts as in the case of do_device_not_available).
 - */
 -void math_state_restore(void)
 -{
 -      struct task_struct *tsk = current;
 -
 -      if (!tsk_used_math(tsk)) {
 -              local_irq_enable();
 -              /*
 -               * does a slab alloc which can sleep
 -               */
 -              if (init_fpu(tsk)) {
 -                      /*
 -                       * ran out of memory!
 -                       */
 -                      do_group_exit(SIGKILL);
 -                      return;
 -              }
 -              local_irq_disable();
 -      }
 -
 -      /* Avoid __kernel_fpu_begin() right after __thread_fpu_begin() */
 -      kernel_fpu_disable();
 -      __thread_fpu_begin(tsk);
 -      if (unlikely(restore_fpu_checking(tsk))) {
 -              fpu_reset_state(tsk);
 -              force_sig_info(SIGSEGV, SEND_SIG_PRIV, tsk);
 -      } else {
 -              tsk->thread.fpu_counter++;
 -      }
 -      kernel_fpu_enable();
 -}
 -EXPORT_SYMBOL_GPL(math_state_restore);
 -
  dotraplinkage void
  do_device_not_available(struct pt_regs *regs, long error_code)
  {
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -4,11 -4,9 +4,11 @@@ include ../lib.m
  
  .PHONY: all all_32 all_64 warn_32bit_failure clean
  
- TARGETS_C_BOTHBITS := sigreturn single_step_syscall
+ TARGETS_C_BOTHBITS := sigreturn single_step_syscall sysret_ss_attrs
 +TARGETS_C_32BIT_ONLY := entry_from_vm86
  
 -BINARIES_32 := $(TARGETS_C_BOTHBITS:%=%_32)
 +TARGETS_C_32BIT_ALL := $(TARGETS_C_BOTHBITS) $(TARGETS_C_32BIT_ONLY)
 +BINARIES_32 := $(TARGETS_C_32BIT_ALL:%=%_32)
  BINARIES_64 := $(TARGETS_C_BOTHBITS:%=%_64)
  
  CFLAGS := -O2 -g -std=gnu99 -pthread -Wall