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:
Adrian Bunk 2008-07-25 01:45:35 -07:00 committed by Linus Torvalds
parent 696adfe84c
commit b03f6489f9
3 changed files with 41 additions and 22 deletions

View file

@ -8,8 +8,6 @@
#include <asm/errno.h>
extern int prof_on __read_mostly;
#define CPU_PROFILING 1
#define SCHED_PROFILING 2
#define SLEEP_PROFILING 3
@ -19,14 +17,29 @@ struct proc_dir_entry;
struct pt_regs;
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 */
void __init profile_init(void);
void profile_tick(int);
void profile_tick(int type);
/*
* 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:
@ -40,19 +53,6 @@ static inline void profile_hit(int type, void *ip)
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 mm_struct;
@ -80,6 +80,28 @@ struct pt_regs;
#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)
{
return -ENOSYS;