1. 23 9月, 2016 2 次提交
  2. 20 9月, 2016 8 次提交
  3. 19 9月, 2016 4 次提交
    • M
      powerpc: Ensure .mem(init|exit).text are within _stext/_etext · 7de3b27b
      Michael Ellerman 提交于
      In our linker script we open code the list of text sections, because we
      need to include the __ftr_alt sections, which are arch-specific.
      
      This means we can't use TEXT_TEXT as defined in vmlinux.lds.h, and so we
      don't have the MEM_KEEP() logic for memory hotplug sections.
      
      If we build the kernel with the gold linker, and with CONFIG_MEMORY_HOTPLUG=y,
      we see that functions marked __meminit can end up outside of the
      _stext/_etext range, and also outside of _sinittext/_einittext, eg:
      
          c000000000000000 T _stext
          c0000000009e0000 A _etext
          c0000000009e3f18 T hash__vmemmap_create_mapping
          c000000000ca0000 T _sinittext
          c000000000d00844 T _einittext
      
      This causes them to not be recognised as text by is_kernel_text(), and
      prevents them being patched by jump_label (and presumably ftrace/kprobes
      etc.).
      
      Fix it by adding MEM_KEEP() directives, mirroring what TEXT_TEXT does.
      
      This isn't a problem when CONFIG_MEMORY_HOTPLUG=n, because we use the
      standard INIT_TEXT_SECTION() and EXIT_TEXT macros from vmlinux.lds.h.
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Tested-by: NAnton Blanchard <anton@samba.org>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      7de3b27b
    • M
      powerpc: Don't change the section in _GLOBAL() · bea2dccc
      Michael Ellerman 提交于
      Currently the _GLOBAL() macro unilaterally sets the assembler section to
      ".text" at the start of the macro. This is rude as the caller may be
      using a different section.
      
      So let the caller decide which section to emit the code into. On big
      endian we do need to switch to the ".opd" section to emit the OPD, but
      do that with pushsection/popsection, thereby leaving the original
      section intact.
      
      I verified that the order of all entries in System.map is unchanged
      after this patch. The actual addresses shift around slightly so you
      can't just diff the System.map.
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Reviewed-by: NNicholas Piggin <npiggin@gmail.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      bea2dccc
    • N
      powerpc/kernel: Use kprobe blacklist for asm functions · 6f698df1
      Nicholas Piggin 提交于
      Rather than forcing the whole function into the ".kprobes.text" section,
      just add the symbol's address to the kprobe blacklist.
      
      This also lets us drop the three versions of the_KPROBE macro, in
      exchange for just one version of _ASM_NOKPROBE_SYMBOL - which is a good
      cleanup.
      Signed-off-by: NNicholas Piggin <npiggin@gmail.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      6f698df1
    • N
      powerpc: Use kprobe blacklist for exception handlers · 03465f89
      Nicholas Piggin 提交于
      Currently we mark the C implementations of some exception handlers as
      __kprobes. This has the effect of putting them in the ".kprobes.text"
      section, which separates them from the rest of the text.
      
      Instead we can use the blacklist macros to add the symbols to a
      blacklist which kprobes will check. This allows the linker to move
      exception handler functions close to callers and avoids trampolines in
      larger kernels.
      Signed-off-by: NNicholas Piggin <npiggin@gmail.com>
      [mpe: Reword change log a bit]
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      03465f89
  4. 13 9月, 2016 23 次提交
  5. 10 9月, 2016 1 次提交
  6. 03 9月, 2016 2 次提交
    • E
      x86/AMD: Apply erratum 665 on machines without a BIOS fix · d1992996
      Emanuel Czirai 提交于
      AMD F12h machines have an erratum which can cause DIV/IDIV to behave
      unpredictably. The workaround is to set MSRC001_1029[31] but sometimes
      there is no BIOS update containing that workaround so let's do it
      ourselves unconditionally. It is simple enough.
      
      [ Borislav: Wrote commit message. ]
      Signed-off-by: NEmanuel Czirai <icanrealizeum@gmail.com>
      Signed-off-by: NBorislav Petkov <bp@suse.de>
      Cc: Yaowu Xu <yaowu@google.com>
      Cc: stable@vger.kernel.org
      Link: http://lkml.kernel.org/r/20160902053550.18097-1-bp@alien8.deSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      d1992996
    • S
      x86/paravirt: Do not trace _paravirt_ident_*() functions · 15301a57
      Steven Rostedt 提交于
      Łukasz Daniluk reported that on a RHEL kernel that his machine would lock up
      after enabling function tracer. I asked him to bisect the functions within
      available_filter_functions, which he did and it came down to three:
      
        _paravirt_nop(), _paravirt_ident_32() and _paravirt_ident_64()
      
      It was found that this is only an issue when noreplace-paravirt is added
      to the kernel command line.
      
      This means that those functions are most likely called within critical
      sections of the funtion tracer, and must not be traced.
      
      In newer kenels _paravirt_nop() is defined within gcc asm(), and is no
      longer an issue.  But both _paravirt_ident_{32,64}() causes the
      following splat when they are traced:
      
       mm/pgtable-generic.c:33: bad pmd ffff8800d2435150(0000000001d00054)
       mm/pgtable-generic.c:33: bad pmd ffff8800d3624190(0000000001d00070)
       mm/pgtable-generic.c:33: bad pmd ffff8800d36a5110(0000000001d00054)
       mm/pgtable-generic.c:33: bad pmd ffff880118eb1450(0000000001d00054)
       NMI watchdog: BUG: soft lockup - CPU#2 stuck for 22s! [systemd-journal:469]
       Modules linked in: e1000e
       CPU: 2 PID: 469 Comm: systemd-journal Not tainted 4.6.0-rc4-test+ #513
       Hardware name: Hewlett-Packard HP Compaq Pro 6300 SFF/339A, BIOS K01 v02.05 05/07/2012
       task: ffff880118f740c0 ti: ffff8800d4aec000 task.ti: ffff8800d4aec000
       RIP: 0010:[<ffffffff81134148>]  [<ffffffff81134148>] queued_spin_lock_slowpath+0x118/0x1a0
       RSP: 0018:ffff8800d4aefb90  EFLAGS: 00000246
       RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffff88011eb16d40
       RDX: ffffffff82485760 RSI: 000000001f288820 RDI: ffffea0000008030
       RBP: ffff8800d4aefb90 R08: 00000000000c0000 R09: 0000000000000000
       R10: ffffffff821c8e0e R11: 0000000000000000 R12: ffff880000200fb8
       R13: 00007f7a4e3f7000 R14: ffffea000303f600 R15: ffff8800d4b562e0
       FS:  00007f7a4e3d7840(0000) GS:ffff88011eb00000(0000) knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: 00007f7a4e3f7000 CR3: 00000000d3e71000 CR4: 00000000001406e0
       Call Trace:
         _raw_spin_lock+0x27/0x30
         handle_pte_fault+0x13db/0x16b0
         handle_mm_fault+0x312/0x670
         __do_page_fault+0x1b1/0x4e0
         do_page_fault+0x22/0x30
         page_fault+0x28/0x30
         __vfs_read+0x28/0xe0
         vfs_read+0x86/0x130
         SyS_read+0x46/0xa0
         entry_SYSCALL_64_fastpath+0x1e/0xa8
       Code: 12 48 c1 ea 0c 83 e8 01 83 e2 30 48 98 48 81 c2 40 6d 01 00 48 03 14 c5 80 6a 5d 82 48 89 0a 8b 41 08 85 c0 75 09 f3 90 8b 41 08 <85> c0 74 f7 4c 8b 09 4d 85 c9 74 08 41 0f 18 09 eb 02 f3 90 8b
      Reported-by: NŁukasz Daniluk <lukasz.daniluk@intel.com>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      Cc: stable@vger.kernel.org
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      15301a57