Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
8e197efa
Commit
8e197efa
authored
Jan 18, 2004
by
Andrew Morton
Committed by
Linus Torvalds
Jan 18, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] sched.c style cleanups
From: Ingo Molnar <mingo@elte.hu> - sched.c style cleanups (no code change)
parent
2df40901
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
97 additions
and
79 deletions
+97
-79
kernel/sched.c
kernel/sched.c
+97
-79
No files found.
kernel/sched.c
View file @
8e197efa
...
...
@@ -143,7 +143,7 @@
#define TASK_INTERACTIVE(p) \
((p)->prio <= (p)->static_prio - DELTA(p))
#define
JUST_
INTERACTIVE_SLEEP(p) \
#define INTERACTIVE_SLEEP(p) \
(JIFFIES_TO_NS(MAX_SLEEP_AVG * \
(MAX_BONUS / 2 + DELTA((p)) + 1) / MAX_BONUS - 1))
...
...
@@ -168,7 +168,8 @@
*/
#define BASE_TIMESLICE(p) (MIN_TIMESLICE + \
((MAX_TIMESLICE - MIN_TIMESLICE) * (MAX_PRIO-1-(p)->static_prio)/(MAX_USER_PRIO - 1)))
((MAX_TIMESLICE - MIN_TIMESLICE) * \
(MAX_PRIO-1 - (p)->static_prio) / (MAX_USER_PRIO-1)))
static
inline
unsigned
int
task_timeslice
(
task_t
*
p
)
{
...
...
@@ -225,7 +226,7 @@ static DEFINE_PER_CPU(struct runqueue, runqueues);
* Default context-switch locking:
*/
#ifndef prepare_arch_switch
# define prepare_arch_switch(rq, next) do { } while(0)
# define prepare_arch_switch(rq, next) do { } while
(0)
# define finish_arch_switch(rq, next) spin_unlock_irq(&(rq)->lock)
# define task_running(rq, p) ((rq)->curr == (p))
#endif
...
...
@@ -396,7 +397,7 @@ static void recalc_task_prio(task_t *p, unsigned long long now)
* other processes.
*/
if
(
p
->
mm
&&
p
->
activated
!=
-
1
&&
sleep_time
>
JUST_INTERACTIVE_SLEEP
(
p
))
{
sleep_time
>
INTERACTIVE_SLEEP
(
p
))
{
p
->
sleep_avg
=
JIFFIES_TO_NS
(
MAX_SLEEP_AVG
-
AVG_TIMESLICE
);
if
(
!
HIGH_CREDIT
(
p
))
...
...
@@ -414,21 +415,19 @@ static void recalc_task_prio(task_t *p, unsigned long long now)
*/
if
(
LOW_CREDIT
(
p
)
&&
sleep_time
>
JIFFIES_TO_NS
(
task_timeslice
(
p
)))
sleep_time
=
JIFFIES_TO_NS
(
task_timeslice
(
p
));
sleep_time
=
JIFFIES_TO_NS
(
task_timeslice
(
p
));
/*
* Non high_credit tasks waking from uninterruptible
* sleep are limited in their sleep_avg rise as they
* are likely to be cpu hogs waiting on I/O
*/
if
(
p
->
activated
==
-
1
&&
!
HIGH_CREDIT
(
p
)
&&
p
->
mm
){
if
(
p
->
sleep_avg
>=
JUST_
INTERACTIVE_SLEEP
(
p
))
if
(
p
->
activated
==
-
1
&&
!
HIGH_CREDIT
(
p
)
&&
p
->
mm
)
{
if
(
p
->
sleep_avg
>=
INTERACTIVE_SLEEP
(
p
))
sleep_time
=
0
;
else
if
(
p
->
sleep_avg
+
sleep_time
>=
JUST_INTERACTIVE_SLEEP
(
p
)){
p
->
sleep_avg
=
JUST_INTERACTIVE_SLEEP
(
p
);
INTERACTIVE_SLEEP
(
p
))
{
p
->
sleep_avg
=
INTERACTIVE_SLEEP
(
p
);
sleep_time
=
0
;
}
}
...
...
@@ -437,13 +436,13 @@ static void recalc_task_prio(task_t *p, unsigned long long now)
* This code gives a bonus to interactive tasks.
*
* The boost works by updating the 'average sleep time'
* value here, based on ->timestamp. The more time a
task
*
spends sleeping, the higher the average gets - and the
* higher the priority boost gets as well.
* value here, based on ->timestamp. The more time a
*
task spends sleeping, the higher the average gets -
*
and the
higher the priority boost gets as well.
*/
p
->
sleep_avg
+=
sleep_time
;
if
(
p
->
sleep_avg
>
NS_MAX_SLEEP_AVG
){
if
(
p
->
sleep_avg
>
NS_MAX_SLEEP_AVG
)
{
p
->
sleep_avg
=
NS_MAX_SLEEP_AVG
;
if
(
!
HIGH_CREDIT
(
p
))
p
->
interactive_credit
++
;
...
...
@@ -470,7 +469,7 @@ static inline void activate_task(task_t *p, runqueue_t *rq)
* This checks to make sure it's not an uninterruptible task
* that is now waking up.
*/
if
(
!
p
->
activated
){
if
(
!
p
->
activated
)
{
/*
* Tasks which were woken up by interrupts (ie. hw events)
* are most likely of interactive nature. So we give them
...
...
@@ -480,13 +479,14 @@ static inline void activate_task(task_t *p, runqueue_t *rq)
*/
if
(
in_interrupt
())
p
->
activated
=
2
;
else
else
{
/*
* Normal first-time wakeups get a credit too for on-runqueue
*
time, but it will be weighted down:
* Normal first-time wakeups get a credit too for
* on-runqueue
time, but it will be weighted down:
*/
p
->
activated
=
1
;
}
}
p
->
timestamp
=
now
;
__activate_task
(
p
,
rq
);
...
...
@@ -632,13 +632,14 @@ static int try_to_wake_up(task_t * p, unsigned int state, int sync)
*/
if
(
unlikely
(
sync
&&
!
task_running
(
rq
,
p
)
&&
(
task_cpu
(
p
)
!=
smp_processor_id
())
&&
cpu_isset
(
smp_processor_id
(),
p
->
cpus_allowed
)))
{
cpu_isset
(
smp_processor_id
(),
p
->
cpus_allowed
)))
{
set_task_cpu
(
p
,
smp_processor_id
());
task_rq_unlock
(
rq
,
&
flags
);
goto
repeat_lock_task
;
}
if
(
old_state
==
TASK_UNINTERRUPTIBLE
){
if
(
old_state
==
TASK_UNINTERRUPTIBLE
)
{
rq
->
nr_uninterruptible
--
;
/*
* Tasks on involuntary sleep don't earn
...
...
@@ -663,7 +664,8 @@ static int try_to_wake_up(task_t * p, unsigned int state, int sync)
}
int
wake_up_process
(
task_t
*
p
)
{
return
try_to_wake_up
(
p
,
TASK_STOPPED
|
TASK_INTERRUPTIBLE
|
TASK_UNINTERRUPTIBLE
,
0
);
return
try_to_wake_up
(
p
,
TASK_STOPPED
|
TASK_INTERRUPTIBLE
|
TASK_UNINTERRUPTIBLE
,
0
);
}
EXPORT_SYMBOL
(
wake_up_process
);
...
...
@@ -854,7 +856,8 @@ asmlinkage void schedule_tail(task_t *prev)
* context_switch - switch to the new MM and the new
* thread's register state.
*/
static
inline
task_t
*
context_switch
(
runqueue_t
*
rq
,
task_t
*
prev
,
task_t
*
next
)
static
inline
task_t
*
context_switch
(
runqueue_t
*
rq
,
task_t
*
prev
,
task_t
*
next
)
{
struct
mm_struct
*
mm
=
next
->
mm
;
struct
mm_struct
*
oldmm
=
prev
->
active_mm
;
...
...
@@ -1082,8 +1085,10 @@ static int find_busiest_node(int this_node)
* this_rq is locked already. Recalculate nr_running if we have to
* drop the runqueue lock.
*/
static
inline
unsigned
int
double_lock_balance
(
runqueue_t
*
this_rq
,
runqueue_t
*
busiest
,
int
this_cpu
,
int
idle
,
unsigned
int
nr_running
)
static
inline
unsigned
int
double_lock_balance
(
runqueue_t
*
this_rq
,
runqueue_t
*
busiest
,
int
this_cpu
,
int
idle
,
unsigned
int
nr_running
)
{
if
(
unlikely
(
!
spin_trylock
(
&
busiest
->
lock
)))
{
if
(
busiest
<
this_rq
)
{
...
...
@@ -1091,7 +1096,8 @@ static inline unsigned int double_lock_balance(runqueue_t *this_rq,
spin_lock
(
&
busiest
->
lock
);
spin_lock
(
&
this_rq
->
lock
);
/* Need to recalculate nr_running */
if
(
idle
||
(
this_rq
->
nr_running
>
this_rq
->
prev_cpu_load
[
this_cpu
]))
if
(
idle
||
(
this_rq
->
nr_running
>
this_rq
->
prev_cpu_load
[
this_cpu
]))
nr_running
=
this_rq
->
nr_running
;
else
nr_running
=
this_rq
->
prev_cpu_load
[
this_cpu
];
...
...
@@ -1104,7 +1110,9 @@ static inline unsigned int double_lock_balance(runqueue_t *this_rq,
/*
* find_busiest_queue - find the busiest runqueue among the cpus in cpumask.
*/
static
inline
runqueue_t
*
find_busiest_queue
(
runqueue_t
*
this_rq
,
int
this_cpu
,
int
idle
,
int
*
imbalance
,
cpumask_t
cpumask
)
static
inline
runqueue_t
*
find_busiest_queue
(
runqueue_t
*
this_rq
,
int
this_cpu
,
int
idle
,
int
*
imbalance
,
cpumask_t
cpumask
)
{
int
nr_running
,
load
,
max_load
,
i
;
runqueue_t
*
busiest
,
*
rq_src
;
...
...
@@ -1167,7 +1175,8 @@ static inline runqueue_t *find_busiest_queue(runqueue_t *this_rq, int this_cpu,
goto
out
;
}
nr_running
=
double_lock_balance
(
this_rq
,
busiest
,
this_cpu
,
idle
,
nr_running
);
nr_running
=
double_lock_balance
(
this_rq
,
busiest
,
this_cpu
,
idle
,
nr_running
);
/*
* Make sure nothing changed since we checked the
* runqueue length.
...
...
@@ -1184,14 +1193,17 @@ static inline runqueue_t *find_busiest_queue(runqueue_t *this_rq, int this_cpu,
* pull_task - move a task from a remote runqueue to the local runqueue.
* Both runqueues must be locked.
*/
static
inline
void
pull_task
(
runqueue_t
*
src_rq
,
prio_array_t
*
src_array
,
task_t
*
p
,
runqueue_t
*
this_rq
,
int
this_cpu
)
static
inline
void
pull_task
(
runqueue_t
*
src_rq
,
prio_array_t
*
src_array
,
task_t
*
p
,
runqueue_t
*
this_rq
,
int
this_cpu
)
{
dequeue_task
(
p
,
src_array
);
nr_running_dec
(
src_rq
);
set_task_cpu
(
p
,
this_cpu
);
nr_running_inc
(
this_rq
);
enqueue_task
(
p
,
this_rq
->
active
);
p
->
timestamp
=
sched_clock
()
-
(
src_rq
->
timestamp_last_tick
-
p
->
timestamp
);
p
->
timestamp
=
sched_clock
()
-
(
src_rq
->
timestamp_last_tick
-
p
->
timestamp
);
/*
* Note that idle threads have a prio of MAX_PRIO, for this test
* to be always true for them.
...
...
@@ -1203,8 +1215,8 @@ static inline void pull_task(runqueue_t *src_rq, prio_array_t *src_array, task_t
/*
* can_migrate_task - may task p from runqueue rq be migrated to this_cpu?
*/
static
inline
int
can_migrate_task
(
task_t
*
tsk
,
runqueue_t
*
rq
,
int
this_cpu
,
int
idle
)
static
inline
int
can_migrate_task
(
task_t
*
tsk
,
runqueue_t
*
rq
,
int
this_cpu
,
int
idle
)
{
unsigned
long
delta
=
rq
->
timestamp_last_tick
-
tsk
->
timestamp
;
...
...
@@ -1239,7 +1251,8 @@ static void load_balance(runqueue_t *this_rq, int idle, cpumask_t cpumask)
struct
list_head
*
head
,
*
curr
;
task_t
*
tmp
;
busiest
=
find_busiest_queue
(
this_rq
,
this_cpu
,
idle
,
&
imbalance
,
cpumask
);
busiest
=
find_busiest_queue
(
this_rq
,
this_cpu
,
idle
,
&
imbalance
,
cpumask
);
if
(
!
busiest
)
goto
out
;
...
...
@@ -1381,7 +1394,7 @@ static inline void rebalance_tick(runqueue_t *this_rq, int idle)
}
#endif
DEFINE_PER_CPU
(
struct
kernel_stat
,
kstat
)
=
{
{
0
}
}
;
DEFINE_PER_CPU
(
struct
kernel_stat
,
kstat
);
EXPORT_PER_CPU_SYMBOL
(
kstat
);
...
...
@@ -1630,7 +1643,7 @@ asmlinkage void schedule(void)
RCU_qsctr
(
task_cpu
(
prev
))
++
;
prev
->
sleep_avg
-=
run_time
;
if
((
long
)
prev
->
sleep_avg
<=
0
){
if
((
long
)
prev
->
sleep_avg
<=
0
)
{
prev
->
sleep_avg
=
0
;
if
(
!
(
HIGH_CREDIT
(
prev
)
||
LOW_CREDIT
(
prev
)))
prev
->
interactive_credit
--
;
...
...
@@ -1707,7 +1720,8 @@ EXPORT_SYMBOL(default_wake_function);
* started to run but is not in state TASK_RUNNING. try_to_wake_up() returns
* zero in this (rare) case, and we handle it by continuing to scan the queue.
*/
static
void
__wake_up_common
(
wait_queue_head_t
*
q
,
unsigned
int
mode
,
int
nr_exclusive
,
int
sync
)
static
void
__wake_up_common
(
wait_queue_head_t
*
q
,
unsigned
int
mode
,
int
nr_exclusive
,
int
sync
)
{
struct
list_head
*
tmp
,
*
next
;
...
...
@@ -1784,7 +1798,8 @@ void complete(struct completion *x)
spin_lock_irqsave
(
&
x
->
wait
.
lock
,
flags
);
x
->
done
++
;
__wake_up_common
(
&
x
->
wait
,
TASK_UNINTERRUPTIBLE
|
TASK_INTERRUPTIBLE
,
1
,
0
);
__wake_up_common
(
&
x
->
wait
,
TASK_UNINTERRUPTIBLE
|
TASK_INTERRUPTIBLE
,
1
,
0
);
spin_unlock_irqrestore
(
&
x
->
wait
.
lock
,
flags
);
}
...
...
@@ -1796,7 +1811,8 @@ void complete_all(struct completion *x)
spin_lock_irqsave
(
&
x
->
wait
.
lock
,
flags
);
x
->
done
+=
UINT_MAX
/
2
;
__wake_up_common
(
&
x
->
wait
,
TASK_UNINTERRUPTIBLE
|
TASK_INTERRUPTIBLE
,
0
,
0
);
__wake_up_common
(
&
x
->
wait
,
TASK_UNINTERRUPTIBLE
|
TASK_INTERRUPTIBLE
,
0
,
0
);
spin_unlock_irqrestore
(
&
x
->
wait
.
lock
,
flags
);
}
...
...
@@ -2449,7 +2465,8 @@ asmlinkage long sys_sched_get_priority_min(int policy)
* this syscall writes the default timeslice value of a given process
* into the user-space timespec buffer. A value of '0' means infinity.
*/
asmlinkage
long
sys_sched_rr_get_interval
(
pid_t
pid
,
struct
timespec
__user
*
interval
)
asmlinkage
long
sys_sched_rr_get_interval
(
pid_t
pid
,
struct
timespec
__user
*
interval
)
{
int
retval
=
-
EINVAL
;
struct
timespec
t
;
...
...
@@ -2695,7 +2712,7 @@ static void move_task_away(struct task_struct *p, int dest_cpu)
}
p
->
timestamp
=
rq_dest
->
timestamp_last_tick
;
out:
out:
double_rq_unlock
(
this_rq
(),
rq_dest
);
local_irq_restore
(
flags
);
}
...
...
@@ -2764,11 +2781,10 @@ static int migration_thread(void * data)
* migration_call - callback that gets triggered when a CPU is added.
* Here we can start up the necessary migration thread for the new CPU.
*/
static
int
migration_call
(
struct
notifier_block
*
nfb
,
unsigned
long
action
,
static
int
migration_call
(
struct
notifier_block
*
nfb
,
unsigned
long
action
,
void
*
hcpu
)
{
long
cpu
=
(
long
)
hcpu
;
long
cpu
=
(
long
)
hcpu
;
migration_startup_t
startup
;
switch
(
action
)
{
...
...
@@ -2797,7 +2813,8 @@ static int migration_call(struct notifier_block *nfb,
return
NOTIFY_OK
;
}
static
struct
notifier_block
migration_notifier
=
{
&
migration_call
,
NULL
,
0
};
static
struct
notifier_block
migration_notifier
=
{
.
notifier_call
=
&
migration_call
};
__init
int
migration_init
(
void
)
{
...
...
@@ -2851,7 +2868,8 @@ static struct notifier_block __devinitdata kstat_nb = {
.
next
=
NULL
,
};
__init
static
void
init_kstat
(
void
)
{
__init
static
void
init_kstat
(
void
)
{
kstat_cpu_notify
(
&
kstat_nb
,
(
unsigned
long
)
CPU_UP_PREPARE
,
(
void
*
)(
long
)
smp_processor_id
());
register_cpu_notifier
(
&
kstat_nb
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment