1. 04 Nov, 2011 5 commits
    • Robert Richter's avatar
      oprofile, x86: Reimplement nmi timer mode using perf event · dcfce4a0
      Robert Richter authored
      The legacy x86 nmi watchdog code was removed with the implementation
      of the perf based nmi watchdog. This broke Oprofile's nmi timer
      mode. To run nmi timer mode we relied on a continuous ticking nmi
      source which the nmi watchdog provided. The nmi tick was no longer
      available and current watchdog can not be used anymore since it runs
      with very long periods in the range of seconds. This patch
      reimplements the nmi timer mode using a perf counter nmi source.
      
      V2:
      * removing pr_info()
      * fix undefined reference to `__udivdi3' for 32 bit build
      * fix section mismatch of .cpuinit.data:nmi_timer_cpu_nb
      * removed nmi timer setup in arch/x86
      * implemented function stubs for op_nmi_init/exit()
      * made code more readable in oprofile_init()
      
      V3:
      * fix architectural initialization in oprofile_init()
      * fix CONFIG_OPROFILE_NMI_TIMER dependencies
      Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      dcfce4a0
    • Robert Richter's avatar
      oprofile: Remove exit function for timer mode · 75c43a20
      Robert Richter authored
      Remove exit functions by moving init/exit code to oprofile's setup/
      shutdown functions. Doing so the oprofile module exit code will be
      easier and less error-prone.
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      75c43a20
    • Robert Richter's avatar
      oprofile, x86: Add kernel parameter oprofile.cpu_type=timer · 159a80b2
      Robert Richter authored
      We need this to better test x86 NMI timer mode. Otherwise it is very
      hard to setup systems with NMI timer enabled, but we have this e.g. in
      virtual machine environments.
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      159a80b2
    • Robert Richter's avatar
      oprofile, x86: Fix crash when unloading module (nmi timer mode) · 97f7f818
      Robert Richter authored
      If oprofile uses the nmi timer interrupt there is a crash while
      unloading the module. The bug can be triggered with oprofile build as
      module and kernel parameter nolapic set. This patch fixes this.
      
      oprofile: using NMI timer interrupt.
      BUG: unable to handle kernel NULL pointer dereference at 0000000000000008
      IP: [<ffffffff8123c226>] unregister_syscore_ops+0x41/0x58
      PGD 42dbca067 PUD 41da6a067 PMD 0
      Oops: 0002 [#1] PREEMPT SMP
      CPU 5
      Modules linked in: oprofile(-) [last unloaded: oprofile]
      
      Pid: 2518, comm: modprobe Not tainted 3.1.0-rc7-00019-gb2fb49d #19 Advanced Micro Device Anaheim/Anaheim
      RIP: 0010:[<ffffffff8123c226>]  [<ffffffff8123c226>] unregister_syscore_ops+0x41/0x58
      RSP: 0018:ffff88041ef71e98  EFLAGS: 00010296
      RAX: 0000000000000000 RBX: ffffffffa0017100 RCX: dead000000200200
      RDX: 0000000000000000 RSI: dead000000100100 RDI: ffffffff8178c620
      RBP: ffff88041ef71ea8 R08: 0000000000000001 R09: 0000000000000082
      R10: 0000000000000000 R11: ffff88041ef71de8 R12: 0000000000000080
      R13: fffffffffffffff5 R14: 0000000000000001 R15: 0000000000610210
      FS:  00007fc902f20700(0000) GS:ffff88042fd40000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      CR2: 0000000000000008 CR3: 000000041cdb6000 CR4: 00000000000006e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      Process modprobe (pid: 2518, threadinfo ffff88041ef70000, task ffff88041d348040)
      Stack:
       ffff88041ef71eb8 ffffffffa0017790 ffff88041ef71eb8 ffffffffa0013532
       ffff88041ef71ec8 ffffffffa00132d6 ffff88041ef71ed8 ffffffffa00159b2
       ffff88041ef71f78 ffffffff81073115 656c69666f72706f 0000000000610200
      Call Trace:
       [<ffffffffa0013532>] op_nmi_exit+0x15/0x17 [oprofile]
       [<ffffffffa00132d6>] oprofile_arch_exit+0xe/0x10 [oprofile]
       [<ffffffffa00159b2>] oprofile_exit+0x1e/0x20 [oprofile]
       [<ffffffff81073115>] sys_delete_module+0x1c3/0x22f
       [<ffffffff811bf09e>] ? trace_hardirqs_on_thunk+0x3a/0x3f
       [<ffffffff8148070b>] system_call_fastpath+0x16/0x1b
      Code: 20 c6 78 81 e8 c5 cc 23 00 48 8b 13 48 8b 43 08 48 be 00 01 10 00 00 00 ad de 48 b9 00 02 20 00 00 00 ad de 48 c7 c7 20 c6 78 81
       89 42 08 48 89 10 48 89 33 48 89 4b 08 e8 a6 c0 23 00 5a 5b
      RIP  [<ffffffff8123c226>] unregister_syscore_ops+0x41/0x58
       RSP <ffff88041ef71e98>
      CR2: 0000000000000008
      ---[ end trace 43a541a52956b7b0 ]---
      
      CC: stable@kernel.org # 2.6.37+
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      97f7f818
    • Robert Richter's avatar
      oprofile: Fix crash when unloading module (hr timer mode) · 87121ca5
      Robert Richter authored
      Oprofile may crash in a KVM guest while unlaoding modules. This
      happens if oprofile_arch_init() fails and oprofile switches to the hr
      timer mode as a fallback. In this case oprofile_arch_exit() is called,
      but it never was initialized properly which causes the crash. This
      patch fixes this.
      
      oprofile: using timer interrupt.
      BUG: unable to handle kernel NULL pointer dereference at 0000000000000008
      IP: [<ffffffff8123c226>] unregister_syscore_ops+0x41/0x58
      PGD 41da3f067 PUD 41d80e067 PMD 0
      Oops: 0002 [#1] PREEMPT SMP
      CPU 5
      Modules linked in: oprofile(-)
      
      Pid: 2382, comm: modprobe Not tainted 3.1.0-rc7-00018-g709a39d #18 Advanced Micro Device Anaheim/Anaheim
      RIP: 0010:[<ffffffff8123c226>]  [<ffffffff8123c226>] unregister_syscore_ops+0x41/0x58
      RSP: 0018:ffff88041de1de98  EFLAGS: 00010296
      RAX: 0000000000000000 RBX: ffffffffa00060e0 RCX: dead000000200200
      RDX: 0000000000000000 RSI: dead000000100100 RDI: ffffffff8178c620
      RBP: ffff88041de1dea8 R08: 0000000000000001 R09: 0000000000000082
      R10: 0000000000000000 R11: ffff88041de1dde8 R12: 0000000000000080
      R13: fffffffffffffff5 R14: 0000000000000001 R15: 0000000000610210
      FS:  00007f9ae5bef700(0000) GS:ffff88042fd40000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      CR2: 0000000000000008 CR3: 000000041ca44000 CR4: 00000000000006e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      Process modprobe (pid: 2382, threadinfo ffff88041de1c000, task ffff88042db6d040)
      Stack:
       ffff88041de1deb8 ffffffffa0006770 ffff88041de1deb8 ffffffffa000251e
       ffff88041de1dec8 ffffffffa00022c2 ffff88041de1ded8 ffffffffa0004993
       ffff88041de1df78 ffffffff81073115 656c69666f72706f 0000000000610200
      Call Trace:
       [<ffffffffa000251e>] op_nmi_exit+0x15/0x17 [oprofile]
       [<ffffffffa00022c2>] oprofile_arch_exit+0xe/0x10 [oprofile]
       [<ffffffffa0004993>] oprofile_exit+0x13/0x15 [oprofile]
       [<ffffffff81073115>] sys_delete_module+0x1c3/0x22f
       [<ffffffff811bf09e>] ? trace_hardirqs_on_thunk+0x3a/0x3f
       [<ffffffff8148070b>] system_call_fastpath+0x16/0x1b
      Code: 20 c6 78 81 e8 c5 cc 23 00 48 8b 13 48 8b 43 08 48 be 00 01 10 00 00 00 ad de 48 b9 00 02 20 00 00 00 ad de 48 c7 c7 20 c6 78 81
       89 42 08 48 89 10 48 89 33 48 89 4b 08 e8 a6 c0 23 00 5a 5b
      RIP  [<ffffffff8123c226>] unregister_syscore_ops+0x41/0x58
       RSP <ffff88041de1de98>
      CR2: 0000000000000008
      ---[ end trace 06d4e95b6aa3b437 ]---
      
      CC: stable@kernel.org # 2.6.37+
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      87121ca5
  2. 29 Sep, 2011 1 commit
  3. 27 Sep, 2011 1 commit
  4. 26 Sep, 2011 2 commits
  5. 21 Sep, 2011 14 commits
  6. 20 Sep, 2011 17 commits