![Heiko Carstens](/assets/img/avatar_default.png)
Remove hardware sampler support from oprofile module. The oprofile user space utilty has been switched to use the kernel perf interface, for which we also provide hardware sampling support. In addition the hardware sampling support is also slightly broken: it supports only 16 bits for the pid and therefore would generate wrong results on machines which have a pid >64k. Also the pt_regs structure which was passed to oprofile common code cannot necessarily be used to generate sane backtraces, since the task(s) in question may run while the samples are fed to oprofile. So the result would be more or less random. However given that the only user space tools switched to the perf interface already four years ago the hardware sampler code seems to be unused code, and therefore it should be reasonable to remove it. The timer based oprofile support continues to work. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Acked-by: Andreas Arnez <arnez@linux.vnet.ibm.com> Acked-by: Andreas Krebbel <krebbel@linux.vnet.ibm.com> Acked-by: Robert Richter <rric@kernel.org> Reviewed-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
43 lines
920 B
C
43 lines
920 B
C
/*
|
|
* S390 Version
|
|
* Copyright IBM Corp. 2002, 2011
|
|
* Author(s): Thomas Spatzier (tspat@de.ibm.com)
|
|
* Author(s): Mahesh Salgaonkar (mahesh@linux.vnet.ibm.com)
|
|
* Author(s): Heinz Graalfs (graalfs@linux.vnet.ibm.com)
|
|
* Author(s): Andreas Krebbel (krebbel@linux.vnet.ibm.com)
|
|
*
|
|
* @remark Copyright 2002-2011 OProfile authors
|
|
*/
|
|
|
|
#include <linux/oprofile.h>
|
|
#include <linux/init.h>
|
|
#include <asm/processor.h>
|
|
|
|
static int __s390_backtrace(void *data, unsigned long address)
|
|
{
|
|
unsigned int *depth = data;
|
|
|
|
if (*depth == 0)
|
|
return 1;
|
|
(*depth)--;
|
|
oprofile_add_trace(address);
|
|
return 0;
|
|
}
|
|
|
|
static void s390_backtrace(struct pt_regs *regs, unsigned int depth)
|
|
{
|
|
if (user_mode(regs))
|
|
return;
|
|
dump_trace(__s390_backtrace, &depth, NULL, regs->gprs[15]);
|
|
}
|
|
|
|
int __init oprofile_arch_init(struct oprofile_operations *ops)
|
|
{
|
|
ops->backtrace = s390_backtrace;
|
|
return 0;
|
|
}
|
|
|
|
void oprofile_arch_exit(void)
|
|
{
|
|
}
|