Add const to some scheduling functions
PATCH 1/1 Add const to some scheduling functions
Several scheduler macros only read from the task struct, mark them const. It can generate better code.
include/linux/sched.h +5 -5
@@ -681,9 +681,9 @@ extern void sched_balance_exec(void);extern void sched_idle_next (void );extern void set_user_nice (task_t *p,long nice); -extern int task_prio (task_t *p); -extern int task_nice (task_t *p); -extern int task_curr (task_t *p); +extern int task_prio (const task_t *p); +extern int task_nice (const task_t *p); +extern int task_curr (const task_t *p);extern int idle_cpu (int cpu);void yield (void );
@@ -905,7 +905,7 @@ extern void wait_task_inactive(task_t *#define while_each_thread (g, t) \ while ((t = next_thread(t)) != g) -extern task_t *FASTCALL (next_thread (task_t *p)); +extern task_t *FASTCALL (next_thread (const task_t *p));#define thread_group_leader (p) (p->pid == p->tgid)
@@ -1044,7 +1044,7 @@ extern void signal_wake_up(struct task_s*/ #ifdef CONFIG_SMP -static inline unsigned int task_cpu (struct task_struct *p) +static inline unsigned int task_cpu (const struct task_struct *p) {return p->thread_info->cpu; }
kernel/exit.c +3 -3
@@ -826,10 +826,10 @@ asmlinkage long sys_exit(int error_code)do_exit ((error_code&0xff )<<8 ); } -task_t fastcall *next_thread(task_t *p) +task_t fastcall *next_thread(const task_t *p) { -struct pid_link *link = p->pids +PIDTYPE_TGID ; -struct list_head *tmp, *head = &link->pidptr->task_list; +const struct pid_link *link = p->pids +PIDTYPE_TGID ; +const struct list_head *tmp, *head = &link->pidptr->task_list;#ifdef CONFIG_SMP if (!p->sighand)
kernel/sched.c +3 -3
@@ -546,7 +546,7 @@ static inline void resched_task(task_t ** task_curr - is this task currently executing on a CPU? * @p: the task in question. */ -inline int task_curr (task_t *p) +inline int task_curr (const task_t *p) {return cpu_curr (task_cpu (p)) == p; }
@@ -2640,7 +2640,7 @@ asmlinkage long sys_nice(int increment)* RT tasks are offset by -200. Normal tasks are centered * around 0, value goes from -16 to +15. */ -int task_prio (task_t *p) +int task_prio (const task_t *p) {return p->prio -MAX_RT_PRIO ; }
@@ -2649,7 +2649,7 @@ int task_prio(task_t *p)* task_nice - return the nice value of a given task. * @p: the task in question. */ -int task_nice (task_t *p) +int task_nice (const task_t *p) {return TASK_NICE (p); }
Quoted 3 lines · Keith Owens
Several scheduler macros only read from the task struct, mark them
const. It can generate better code.
It makes no change to the gcc-3.4.0-compiled x86 kernel's size. Under what circumstances did you see improvements?
Quoted 7 lines · Andrew Morton
Quoted 3 lines · Keith Owens
Several scheduler macros only read from the task struct, mark them
const. It can generate better code.It makes no change to the gcc-3.4.0-compiled x86 kernel's size. Under what circumstances did you see improvements?
None, it is just good programming practice to mark parameters as const where possible.
Keith wrote (of some added 'const' qualifiers):
Quoted 1 line
It can generate better code.
Later, he wrote (when asked under what circumstances he saw this):
Quoted 1 line
None, it is just good programming practice ...
So you're not saying it _does_ generate better code, but that it's possible that it could do so, right?
In any case, the value of 'const' to me is more in documenting the interface, and imposing compiler checked restrictions on the implementation.
Signature · 3 lines
I won't rest till it's the best ...
Programmer, Linux Scalability
Paul Jackson <[email protected]> 1.650.933.1373