mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-22 12:14:01 +08:00
dcfce4a095
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: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Robert Richter <robert.richter@amd.com>
53 lines
1.2 KiB
C
53 lines
1.2 KiB
C
/**
|
|
* @file oprof.h
|
|
*
|
|
* @remark Copyright 2002 OProfile authors
|
|
* @remark Read the file COPYING
|
|
*
|
|
* @author John Levon <levon@movementarian.org>
|
|
*/
|
|
|
|
#ifndef OPROF_H
|
|
#define OPROF_H
|
|
|
|
int oprofile_setup(void);
|
|
void oprofile_shutdown(void);
|
|
|
|
int oprofilefs_register(void);
|
|
void oprofilefs_unregister(void);
|
|
|
|
int oprofile_start(void);
|
|
void oprofile_stop(void);
|
|
|
|
struct oprofile_operations;
|
|
|
|
extern unsigned long oprofile_buffer_size;
|
|
extern unsigned long oprofile_cpu_buffer_size;
|
|
extern unsigned long oprofile_buffer_watershed;
|
|
extern unsigned long oprofile_time_slice;
|
|
|
|
extern struct oprofile_operations oprofile_ops;
|
|
extern unsigned long oprofile_started;
|
|
extern unsigned long oprofile_backtrace_depth;
|
|
|
|
struct super_block;
|
|
struct dentry;
|
|
|
|
void oprofile_create_files(struct super_block *sb, struct dentry *root);
|
|
int oprofile_timer_init(struct oprofile_operations *ops);
|
|
void oprofile_timer_exit(void);
|
|
#ifdef CONFIG_OPROFILE_NMI_TIMER
|
|
int op_nmi_timer_init(struct oprofile_operations *ops);
|
|
#else
|
|
static inline int op_nmi_timer_init(struct oprofile_operations *ops)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
#endif
|
|
|
|
|
|
int oprofile_set_ulong(unsigned long *addr, unsigned long val);
|
|
int oprofile_set_timeout(unsigned long time);
|
|
|
|
#endif /* OPROF_H */
|