summaryrefslogtreecommitdiff
path: root/arch/x86/oprofile
AgeCommit message (Collapse)AuthorFilesLines
2009-01-08Merge branch 'oprofile/ring_buffer' into oprofile/oprofile-for-tipRobert Richter1-133/+91
2009-01-07oprofile: make new cpu buffer functions part of the apiRobert Richter1-33/+24
This patch creates the new functions oprofile_write_reserve() oprofile_add_data() oprofile_write_commit() and makes them part of the oprofile api. Signed-off-by: Robert Richter <robert.richter@amd.com>
2009-01-07oprofile: use new data sample format for ibsRobert Richter1-78/+41
The new ring buffer implementation allows the storage of samples with different size. This patch implements the usage of the new sample format to store ibs samples in the cpu buffer. Until now, writing to the cpu buffer could lead to incomplete sampling sequences since IBS samples were transfered in multiple samples. Due to a full buffer, data could be lost at any time. This can't happen any more since the complete data is reserved in advance and then stored in a single sample. Signed-off-by: Robert Richter <robert.richter@amd.com>
2009-01-07oprofile: rework implementation of cpu buffer eventsRobert Richter1-4/+4
Special events such as task or context switches are marked with an escape code in the cpu buffer followed by an event code or a task identifier. There is one escape code per event. To make escape sequences also available for data samples the internal cpu buffer format must be changed. The current implementation does not allow the extension of event codes since this would lead to collisions with the task identifiers. To avoid this, this patch introduces an event mask that allows the storage of multiple events with one escape code. Now, task identifiers are stored in the data section of the sample. The implementation also allows the usage of custom data in a sample. As a side effect the new code is much more readable and easier to understand. Signed-off-by: Robert Richter <robert.richter@amd.com>
2009-01-07oprofile: rename variable ibs_allowed to has_ibs in op_model_amd.cRobert Richter1-12/+12
This patch renames ibs_allowed to has_ibs. Varible name fits better now. Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-12-29x86/oprofile: fix pci_dev use count for AMD northbridge devicesRobert Richter1-0/+1
This patch fixes the PCI device use count for AMD northbridge devices. In case of an IBS LVT initialization failure, the PCI device is released now by calling pci_dev_put(). If there are no initialization errors, the devices are released in pci_get_device() while iterating. Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-12-10x86/oprofile: cleanup IBS init/exit functions in op_model_amd.cRobert Richter1-15/+17
Implementation of pairwise init/exit funcions for IBS and IBS NMI setup. There are also some function renames and the removal of forward function declarations. Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-12-10x86/oprofile: reordering IBS code in op_model_amd.cRobert Richter1-13/+13
This is part of the cpu buffer rework. Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-12-10oprofile: whitspace changes onlyRobert Richter1-2/+2
Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-12-10oprofile: comment cleanupRobert Richter1-15/+16
This fixes the coding style of some comments. Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-12-03x86/oprofile: fix Intel cpu family 6 detectionWilliam Cohen1-3/+2
Alan Jenkins wrote: > This is on an EeePC 701, /proc/cpuinfo as attached. > > Is this expected? Will the next release work? > > Thanks, Alan > > # opcontrol --setup --no-vmlinux > cpu_type 'unset' is not valid > you should upgrade oprofile or force the use of timer mode > > # opcontrol -v > opcontrol: oprofile 0.9.4 compiled on Nov 29 2008 22:44:10 > > # cat /dev/oprofile/cpu_type > i386/p6 > # uname -r > 2.6.28-rc6eeepc Hi Alan, Looking at the kernel driver code for oprofile it can return the "i386/p6" for the cpu_type. However, looking at the user-space oprofile code there isn't the matching entry in libop/op_cpu_type.c or the events/unit_mask files in events/i386 directory. The Intel AP-485 says this is a "Intel Pentium M processor model D". Seems like the oprofile kernel driver should be identifying the processor as "i386/p6_mobile" The driver identification code doesn't look quite right in nmi_init.c http://git.kernel.org/?p=linux/kernel/git/sfr/linux-next.git;a=blob;f=arch/x86/oprofile/nmi_int.c;h=022cd41ea9b4106e5884277096e80e9088a7c7a9;hb=HEAD has: 409 case 10 ... 13: 410 *cpu_type = "i386/p6"; 411 break; Referring to the Intel AP-485: case 10 and 11 should produce "i386/piii" case 13 should produce "i386/p6_mobile" I didn't see anything for case 12. Something like the attached patch. I don't have a celeron machine to verify that changes in this area of the kernel fix thing. -Will Signed-off-by: William Cohen <wcohen@redhat.com> Tested-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk> Acked-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-12-03oprofile: fix CPU unplug panic in ppro_stop()Eric Dumazet1-0/+4
If oprofile statically compiled in kernel, a cpu unplug triggers a panic in ppro_stop(), because a NULL pointer is dereferenced. Signed-off-by: Eric Dumazet <dada1@cosmosbay.com> Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-11-17oprofile: fix an overflow in ppro codeEric Dumazet1-1/+1
reset_value was changed from long to u64 in commit b99170288421c79f0c2efa8b33e26e65f4bb7fb8 (oprofile: Implement Intel architectural perfmon support) But dynamic allocation of this array use a wrong type (long instead of u64) Cc: Andi Kleen <ak@linux.intel.com> Signed-off-by: Eric Dumazet <dada1@cosmosbay.com> Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-11-07oprofile: Fix p6 counter overflow checkAndi Kleen1-5/+4
Fix the counter overflow check for CPUs with counter width > 32 I had a similar change in a different patch that I didn't submit and I didn't notice the problem earlier because it was always tested together. Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-10-16oprofile: fixing whitespaces in arch/x86/oprofile/*Robert Richter2-11/+10
Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-10-15Merge branch 'oprofile/x86-oprofile-for-tip' into oprofile/oprofile-for-tipRobert Richter3-35/+108
Conflicts: arch/x86/oprofile/op_model_ppro.c
2008-10-15x86/oprofile: add the logic for enabling additional IBS bitsSuravee Suthikulpanit1-2/+5
This patch adds the logic for enabling additional IBS control bits : * IBS-Fetch IbsRandEn bit (bit 57) * IBS-Op IbsOpCntCtl bit (bit 19) Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-10-15x86/oprofile: reordering functions in nmi_int.cRobert Richter1-76/+71
No functional changes. The intension is to remove static function declarations. Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-10-15oprofile: more whitespace fixesRobert Richter3-6/+6
Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-10-15oprofile: whitespace fixesRobert Richter3-34/+34
Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-10-15OProfile: Rename IBS sysfs dir into "ibs_op"Robert Richter1-1/+1
The new name is now more close to those used in the spec. Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-10-15OProfile: Rework string handling in setup_ibs_files()Robert Richter1-12/+11
Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-10-15OProfile: Rework oprofile_add_ibs_sample() functionRobert Richter1-2/+3
Code looks much more cleaner now. Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-10-13oprofile: discover counters for op ppro tooAndi Kleen2-4/+6
Discover number of counters for all family 6 models even when not in arch perfmon mode. Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-10-13oprofile: Implement Intel architectural perfmon supportAndi Kleen3-28/+102
Newer Intel CPUs (Core1+) have support for architectural events described in CPUID 0xA. See the IA32 SDM Vol3b.18 for details. The advantage of this is that it can be done without knowing about the specific CPU, because the CPU describes by itself what performance events are supported. This is only a fallback because only a limited set of 6 events are supported. This allows to do profiling on Nehalem and on Atom systems (later not tested) This patch implements support for that in oprofile's Intel Family 6 profiling module. It also has the advantage of supporting an arbitary number of events now as reported by the CPU. Also allow arbitary counter widths >32bit while we're at it. Requires a patched oprofile userland to support the new architecture. v2: update for latest oprofile tree remove force_arch_perfmon Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-10-13oprofile: Don't report Nehalem as core_2Andi Kleen1-3/+0
This essentially reverts Linus' earlier 4b9f12a3779c548b68bc9af7d94030868ad3aa1b commit. Nehalem is not core_2, so it shouldn't be reported as such. However with the earlier arch perfmon patch it will fall back to arch perfmon mode now, so there is no need to fake it as core_2. The only drawback is that Linus will need to patch the arch perfmon support into his oprofile binary now, but I think he can do that. Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-10-13oprofile: drop const in num counters fieldAndi Kleen1-2/+2
allow to modify it at runtime Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Robert Richter <robert.richter@amd.com>
2008-09-30Merge branch 'oprofile-for-tip' of ↵Ingo Molnar6-148/+40
git://git.kernel.org/pub/scm/linux/kernel/git/rric/oprofile into oprofile Conflicts: arch/x86/oprofile/nmi_int.c Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-09-30Merge commit 'v2.6.27-rc8' into oprofileIngo Molnar1-6/+39
Conflicts: arch/x86/oprofile/nmi_int.c Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-09-24Merge commit 'v2.6.27-rc5' into tip/oprofileRobert Richter1-3/+36
Conflicts: arch/x86/oprofile/nmi_int.c
2008-09-24Revert "Oprofile Multiplexing Patch"Robert Richter6-149/+39
Reverting commit 1a960b402a51d80abf54e3f8e4972374ffe5f22d for the main branch. Multiplexing will be tracked on a separate feature branch. Conflicts: arch/x86/oprofile/nmi_int.c
2008-09-22x86, oprofile: BUG: using smp_processor_id() in preemptible codeAndrea Righi1-1/+1
Add __raw access before setting per cpu variable switch_index, to avoid the following BUG: [ 449.166827] BUG: using smp_processor_id() in preemptible [00000000] code: modprobe/6998 [ 449.166848] caller is op_nmi_init+0xf0/0x2b0 [oprofile] [ 449.166855] Pid: 6998, comm: modprobe Not tainted 2.6.27-rc5-mm1 #29 [ 449.166860] Call Trace: [ 449.166872] [<ffffffff80362d67>] debug_smp_processor_id+0xd7/0xe0 [ 449.166887] [<ffffffffa00181c0>] op_nmi_init+0xf0/0x2b0 [oprofile] [ 449.166902] [<ffffffffa0018000>] oprofile_init+0x0/0x60 [oprofile] [ 449.166915] [<ffffffffa00180a9>] oprofile_arch_init+0x9/0x30 [oprofile] [ 449.166928] [<ffffffffa001801e>] oprofile_init+0x1e/0x60 [oprofile] [ 449.166937] [<ffffffff8020903b>] _stext+0x3b/0x160 [ 449.166946] [<ffffffff80477985>] __mutex_unlock_slowpath+0xe5/0x190 [ 449.166955] [<ffffffff80262c1a>] trace_hardirqs_on_caller+0xca/0x140 [ 449.166965] [<ffffffff8026f7fc>] sys_init_module+0xdc/0x210 [ 449.166972] [<ffffffff8020b7cb>] system_call_fastpath+0x16/0x1b Signed-off-by: Andrea Righi <righi.andrea@gmail.com> Acked-by: Robert Richter <robert.richter@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-09-22x86, oprofile: BUG scheduling while atomicAndrea Righi1-1/+3
nmi_shutdown() calls unregister_die_notifier() from an atomic context after setting preempt_disable() via get_cpu_var(): [ 1049.404154] BUG: scheduling while atomic: oprofiled/7796/0x00000002 [ 1049.404171] INFO: lockdep is turned off. [ 1049.404176] Modules linked in: oprofile af_packet rfcomm l2cap kvm_intel kvm i915 drm acpi_cpufreq cpufreq_userspace cpufreq_conservative cpufreq_ondemand cpufreq_powersave freq_table container sbs sbshc dm_mod arc4 ecb cryptomgr aead snd_hda_intel crypto_blkcipher snd_pcm_oss crypto_algapi snd_pcm iwlagn iwlcore snd_timer iTCO_wdt led_class btusb iTCO_vendor_support snd psmouse bluetooth mac80211 soundcore cfg80211 snd_page_alloc intel_agp video output button battery ac dcdbas evdev ext3 jbd mbcache sg sd_mod piix ata_piix libata scsi_mod dock tg3 libphy ehci_hcd uhci_hcd usbcore thermal processor fan fuse [ 1049.404362] Pid: 7796, comm: oprofiled Not tainted 2.6.27-rc5-mm1 #30 [ 1049.404368] Call Trace: [ 1049.404384] [<ffffffff804769fd>] thread_return+0x4a0/0x7d3 [ 1049.404396] [<ffffffff8026ad92>] generic_exec_single+0x52/0xe0 [ 1049.404405] [<ffffffff8026ae1a>] generic_exec_single+0xda/0xe0 [ 1049.404414] [<ffffffff8026aee3>] smp_call_function_single+0x73/0x150 [ 1049.404423] [<ffffffff804770c5>] schedule_timeout+0x95/0xd0 [ 1049.404430] [<ffffffff80476083>] wait_for_common+0x43/0x180 [ 1049.404438] [<ffffffff80476154>] wait_for_common+0x114/0x180 [ 1049.404448] [<ffffffff80236980>] default_wake_function+0x0/0x10 [ 1049.404457] [<ffffffff8024f810>] synchronize_rcu+0x30/0x40 [ 1049.404463] [<ffffffff8024f890>] wakeme_after_rcu+0x0/0x10 [ 1049.404472] [<ffffffff80479ca0>] _spin_unlock_irqrestore+0x40/0x80 [ 1049.404482] [<ffffffff80256def>] atomic_notifier_chain_unregister+0x3f/0x60 [ 1049.404501] [<ffffffffa03d8801>] nmi_shutdown+0x51/0x90 [oprofile] [ 1049.404517] [<ffffffffa03d6134>] oprofile_shutdown+0x34/0x70 [oprofile] [ 1049.404532] [<ffffffffa03d721e>] event_buffer_release+0xe/0x40 [oprofile] [ 1049.404543] [<ffffffff802bdcdd>] __fput+0xcd/0x240 [ 1049.404551] [<ffffffff802baa74>] filp_close+0x54/0x90 [ 1049.404560] [<ffffffff8023e1d1>] put_files_struct+0xb1/0xd0 [ 1049.404568] [<ffffffff8023f82f>] do_exit+0x18f/0x930 [ 1049.404576] [<ffffffff8020be03>] restore_args+0x0/0x30 [ 1049.404584] [<ffffffff80240006>] do_group_exit+0x36/0xa0 [ 1049.404592] [<ffffffff8020b7cb>] system_call_fastpath+0x16/0x1b This can be easily triggered with 'opcontrol --shutdown'. Simply move get_cpu_var() above unregister_die_notifier(). Signed-off-by: Andrea Righi <righi.andrea@gmail.com> Acked-by: Robert Richter <robert.richter@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-08-20x86: fix oprofile + hibernation badnessAndi Kleen1-3/+36
Vegard Nossum reported oprofile + hibernation problems: > Now some warnings: > > ------------[ cut here ]------------ > WARNING: at /uio/arkimedes/s29/vegardno/git-working/linux-2.6/kernel/smp.c:328 s > mp_call_function_mask+0x194/0x1a0() The usual problem: the suspend function when interrupts are already disabled calls smp_call_function which is not allowed with interrupt off. But at this point all the other CPUs should be already down anyways, so it should be enough to just drop that. This patch should fix that problem at least by fixing cpu hotplug& suspend support. [ mingo@elte.hu: fixed 5 coding style errors. ] Signed-off-by: Andi Kleen <ak@linux.intel.com> Tested-by: Vegard Nossum <vegard.nossum@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-08-19Merge branch 'x86/oprofile' into oprofileIngo Molnar1-88/+87
2008-08-19x86: Coding style fixes to arch/x86/oprofile/op_model_p4.cPaolo Ciarrocchi1-88/+87
A coding style patch to arch/x86/oprofile/op_model_p4.c that removes 87 errors and 4 warnings. Before: total: 89 errors, 13 warnings, 722 lines checked After: total: 2 errors, 9 warnings, 721 lines checked Compile tested, binary verified as follow: paolo@paolo-desktop:~/linux.trees.git$ size /tmp/op_model_p4.o.* text data bss dec hex filename 2691 968 32 3691 e6b /tmp/op_model_p4.o.after 2691 968 32 3691 e6b /tmp/op_model_p4.o.before paolo@paolo-desktop:~/linux.trees.git$ md5sum /tmp/op_model_p4.o.* 8c1c9823bab33333e1f7f76574e62561 /tmp/op_model_p4.o.after 8c1c9823bab33333e1f7f76574e62561 /tmp/op_model_p4.o.before Signed-off-by: Paolo Ciarrocchi <paolo.ciarrocchi@gmail.com> Cc: robert.richter@amd.com Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26x86/oprofile: fix on_each_cpu build errorRobert Richter1-1/+1
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Jason Yeh <jason.yeh@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26Oprofile Multiplexing PatchJason Yeh6-39/+149
This patch introduces multiplexing support for the Oprofile kernel module. It basically adds a new function pointer in oprofile_operator allowing each architecture to supply its callback to switch between different sets of event when the timer expires. Userspace tools can modify the time slice through /dev/oprofile/time_slice. It also modifies the number of counters exposed to the userspace through /dev/oprofile. For example, the number of counters for AMD CPUs are changed to 32 and multiplexed in the sets of 4. Signed-off-by: Jason Yeh <jason.yeh@amd.com> Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26x86/oprofile: reanaming op_model_athlon.c to op_model_amd.cRobert Richter2-2/+2
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26x86/oprofile: add CONFIG_OPROFILE_IBS optionRobert Richter1-10/+23
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Robert Richter <robert.richter@amd.com> Cc: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26x86/oprofile: op_model_athlon.c: fix counter reset when reenabling IBS OPRobert Richter1-0/+1
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26x86/oprofile: macro definition cleanup in op_model_athlon.cRobert Richter1-29/+17
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26OProfile: fix IBS build error for UPRobert Richter1-0/+22
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26OProfile: enable IBS for AMD CPUsRobert Richter2-7/+25
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26OProfile: fix setup_ibs_files() function interfaceRobert Richter1-2/+4
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26OProfile: on_each_cpu(): kill unused retry parameterRobert Richter1-2/+2
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26OProfile: Fix build error in op_model_athlon.cRobert Richter1-0/+5
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26OProfile: change IBS interrupt initializationRobert Richter1-30/+54
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26x86/oprofile: separating the IBS handlerRobert Richter1-17/+28
Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Cc: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-26x86/oprofile: add IBS support for AMD CPUs, model specific codeBarry Kasindorf1-0/+257
This patchset supports the new profiling hardware available in the latest AMD CPUs in the oProfile driver. Signed-off-by: Barry Kasindorf <barry.kasindorf@amd.com> Signed-off-by: Robert Richter <robert.richter@amd.com> Cc: oprofile-list <oprofile-list@lists.sourceforge.net> Signed-off-by: Ingo Molnar <mingo@elte.hu>