Commit b03f6489f9f27dc519a4c60ebf39cc7b8a58eae7

Authored by Adrian Bunk
Committed by Linus Torvalds
1 parent 696adfe84c

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>

Showing 3 changed files with 41 additions and 22 deletions Side-by-side Diff

include/linux/profile.h
... ... @@ -8,8 +8,6 @@
8 8  
9 9 #include <asm/errno.h>
10 10  
11   -extern int prof_on __read_mostly;
12   -
13 11 #define CPU_PROFILING 1
14 12 #define SCHED_PROFILING 2
15 13 #define SLEEP_PROFILING 3
16 14  
17 15  
... ... @@ -19,14 +17,29 @@
19 17 struct pt_regs;
20 18 struct notifier_block;
21 19  
  20 +#if defined(CONFIG_PROFILING) && defined(CONFIG_PROC_FS)
  21 +void create_prof_cpu_mask(struct proc_dir_entry *);
  22 +#else
  23 +#define create_prof_cpu_mask(x) do { (void)(x); } while (0)
  24 +#endif
  25 +
  26 +enum profile_type {
  27 + PROFILE_TASK_EXIT,
  28 + PROFILE_MUNMAP
  29 +};
  30 +
  31 +#ifdef CONFIG_PROFILING
  32 +
  33 +extern int prof_on __read_mostly;
  34 +
22 35 /* init basic kernel profiler */
23 36 void __init profile_init(void);
24   -void profile_tick(int);
  37 +void profile_tick(int type);
25 38  
26 39 /*
27 40 * Add multiple profiler hits to a given address:
28 41 */
29   -void profile_hits(int, void *ip, unsigned int nr_hits);
  42 +void profile_hits(int type, void *ip, unsigned int nr_hits);
30 43  
31 44 /*
32 45 * Single profiler hit:
... ... @@ -40,19 +53,6 @@
40 53 profile_hits(type, ip, 1);
41 54 }
42 55  
43   -#ifdef CONFIG_PROC_FS
44   -void create_prof_cpu_mask(struct proc_dir_entry *);
45   -#else
46   -#define create_prof_cpu_mask(x) do { (void)(x); } while (0)
47   -#endif
48   -
49   -enum profile_type {
50   - PROFILE_TASK_EXIT,
51   - PROFILE_MUNMAP
52   -};
53   -
54   -#ifdef CONFIG_PROFILING
55   -
56 56 struct task_struct;
57 57 struct mm_struct;
58 58  
... ... @@ -79,6 +79,28 @@
79 79 struct pt_regs;
80 80  
81 81 #else
  82 +
  83 +#define prof_on 0
  84 +
  85 +static inline void profile_init(void)
  86 +{
  87 + return;
  88 +}
  89 +
  90 +static inline void profile_tick(int type)
  91 +{
  92 + return;
  93 +}
  94 +
  95 +static inline void profile_hits(int type, void *ip, unsigned int nr_hits)
  96 +{
  97 + return;
  98 +}
  99 +
  100 +static inline void profile_hit(int type, void *ip)
  101 +{
  102 + return;
  103 +}
82 104  
83 105 static inline int task_handoff_register(struct notifier_block * n)
84 106 {
... ... @@ -2,7 +2,7 @@
2 2 # Makefile for the linux kernel.
3 3 #
4 4  
5   -obj-y = sched.o fork.o exec_domain.o panic.o printk.o profile.o \
  5 +obj-y = sched.o fork.o exec_domain.o panic.o printk.o \
6 6 cpu.o exit.o itimer.o time.o softirq.o resource.o \
7 7 sysctl.o capability.o ptrace.o timer.o user.o \
8 8 signal.o sys.o kmod.o workqueue.o pid.o \
... ... @@ -24,6 +24,7 @@
24 24 CFLAGS_REMOVE_sched.o = -mno-spe -pg
25 25 endif
26 26  
  27 +obj-$(CONFIG_PROFILING) += profile.o
27 28 obj-$(CONFIG_SYSCTL_SYSCALL_CHECK) += sysctl_check.o
28 29 obj-$(CONFIG_STACKTRACE) += stacktrace.o
29 30 obj-y += time/
... ... @@ -112,8 +112,6 @@
112 112  
113 113 /* Profile event notifications */
114 114  
115   -#ifdef CONFIG_PROFILING
116   -
117 115 static BLOCKING_NOTIFIER_HEAD(task_exit_notifier);
118 116 static ATOMIC_NOTIFIER_HEAD(task_free_notifier);
119 117 static BLOCKING_NOTIFIER_HEAD(munmap_notifier);
... ... @@ -202,8 +200,6 @@
202 200 synchronize_sched(); /* Allow ongoing interrupts to complete. */
203 201 }
204 202 EXPORT_SYMBOL_GPL(unregister_timer_hook);
205   -
206   -#endif /* CONFIG_PROFILING */
207 203  
208 204  
209 205 #ifdef CONFIG_SMP