mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
build kernel/profile.o only when requested
Build kernel/profile.o only if CONFIG_PROFILING is enabled. This makes CONFIG_PROFILING=n kernels smaller. As a bonus, some profile_tick() calls and one branch from schedule() are now eliminated with CONFIG_PROFILING=n (but I doubt these are measurable effects). This patch changes the effects of CONFIG_PROFILING=n, but I don't think having more than two choices would be the better choice. This patch also adds the name of the first parameter to the prototypes of profile_{hits,tick}() since I anyway had to add them for the dummy functions. Signed-off-by: Adrian Bunk <bunk@kernel.org> Cc: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
696adfe84c
commit
b03f6489f9
3 changed files with 41 additions and 22 deletions
|
@ -8,8 +8,6 @@
|
||||||
|
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
|
|
||||||
extern int prof_on __read_mostly;
|
|
||||||
|
|
||||||
#define CPU_PROFILING 1
|
#define CPU_PROFILING 1
|
||||||
#define SCHED_PROFILING 2
|
#define SCHED_PROFILING 2
|
||||||
#define SLEEP_PROFILING 3
|
#define SLEEP_PROFILING 3
|
||||||
|
@ -19,14 +17,29 @@ struct proc_dir_entry;
|
||||||
struct pt_regs;
|
struct pt_regs;
|
||||||
struct notifier_block;
|
struct notifier_block;
|
||||||
|
|
||||||
|
#if defined(CONFIG_PROFILING) && defined(CONFIG_PROC_FS)
|
||||||
|
void create_prof_cpu_mask(struct proc_dir_entry *);
|
||||||
|
#else
|
||||||
|
#define create_prof_cpu_mask(x) do { (void)(x); } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
enum profile_type {
|
||||||
|
PROFILE_TASK_EXIT,
|
||||||
|
PROFILE_MUNMAP
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_PROFILING
|
||||||
|
|
||||||
|
extern int prof_on __read_mostly;
|
||||||
|
|
||||||
/* init basic kernel profiler */
|
/* init basic kernel profiler */
|
||||||
void __init profile_init(void);
|
void __init profile_init(void);
|
||||||
void profile_tick(int);
|
void profile_tick(int type);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add multiple profiler hits to a given address:
|
* Add multiple profiler hits to a given address:
|
||||||
*/
|
*/
|
||||||
void profile_hits(int, void *ip, unsigned int nr_hits);
|
void profile_hits(int type, void *ip, unsigned int nr_hits);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Single profiler hit:
|
* Single profiler hit:
|
||||||
|
@ -40,19 +53,6 @@ static inline void profile_hit(int type, void *ip)
|
||||||
profile_hits(type, ip, 1);
|
profile_hits(type, ip, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_FS
|
|
||||||
void create_prof_cpu_mask(struct proc_dir_entry *);
|
|
||||||
#else
|
|
||||||
#define create_prof_cpu_mask(x) do { (void)(x); } while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum profile_type {
|
|
||||||
PROFILE_TASK_EXIT,
|
|
||||||
PROFILE_MUNMAP
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef CONFIG_PROFILING
|
|
||||||
|
|
||||||
struct task_struct;
|
struct task_struct;
|
||||||
struct mm_struct;
|
struct mm_struct;
|
||||||
|
|
||||||
|
@ -80,6 +80,28 @@ struct pt_regs;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
#define prof_on 0
|
||||||
|
|
||||||
|
static inline void profile_init(void)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void profile_tick(int type)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void profile_hits(int type, void *ip, unsigned int nr_hits)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void profile_hit(int type, void *ip)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int task_handoff_register(struct notifier_block * n)
|
static inline int task_handoff_register(struct notifier_block * n)
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# Makefile for the linux kernel.
|
# Makefile for the linux kernel.
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-y = sched.o fork.o exec_domain.o panic.o printk.o profile.o \
|
obj-y = sched.o fork.o exec_domain.o panic.o printk.o \
|
||||||
cpu.o exit.o itimer.o time.o softirq.o resource.o \
|
cpu.o exit.o itimer.o time.o softirq.o resource.o \
|
||||||
sysctl.o capability.o ptrace.o timer.o user.o \
|
sysctl.o capability.o ptrace.o timer.o user.o \
|
||||||
signal.o sys.o kmod.o workqueue.o pid.o \
|
signal.o sys.o kmod.o workqueue.o pid.o \
|
||||||
|
@ -24,6 +24,7 @@ CFLAGS_REMOVE_sched_clock.o = -pg
|
||||||
CFLAGS_REMOVE_sched.o = -mno-spe -pg
|
CFLAGS_REMOVE_sched.o = -mno-spe -pg
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
obj-$(CONFIG_PROFILING) += profile.o
|
||||||
obj-$(CONFIG_SYSCTL_SYSCALL_CHECK) += sysctl_check.o
|
obj-$(CONFIG_SYSCTL_SYSCALL_CHECK) += sysctl_check.o
|
||||||
obj-$(CONFIG_STACKTRACE) += stacktrace.o
|
obj-$(CONFIG_STACKTRACE) += stacktrace.o
|
||||||
obj-y += time/
|
obj-y += time/
|
||||||
|
|
|
@ -112,8 +112,6 @@ void __init profile_init(void)
|
||||||
|
|
||||||
/* Profile event notifications */
|
/* Profile event notifications */
|
||||||
|
|
||||||
#ifdef CONFIG_PROFILING
|
|
||||||
|
|
||||||
static BLOCKING_NOTIFIER_HEAD(task_exit_notifier);
|
static BLOCKING_NOTIFIER_HEAD(task_exit_notifier);
|
||||||
static ATOMIC_NOTIFIER_HEAD(task_free_notifier);
|
static ATOMIC_NOTIFIER_HEAD(task_free_notifier);
|
||||||
static BLOCKING_NOTIFIER_HEAD(munmap_notifier);
|
static BLOCKING_NOTIFIER_HEAD(munmap_notifier);
|
||||||
|
@ -203,8 +201,6 @@ void unregister_timer_hook(int (*hook)(struct pt_regs *))
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(unregister_timer_hook);
|
EXPORT_SYMBOL_GPL(unregister_timer_hook);
|
||||||
|
|
||||||
#endif /* CONFIG_PROFILING */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue