Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 3309
b: refs/heads/master
c: f8cbd99
h: refs/heads/master
i:
  3307: d279e9d
v: v3
  • Loading branch information
Ingo Molnar authored and Linus Torvalds committed Jun 25, 2005
1 parent 8556f14 commit 83d8f47
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f704f56af95bec3c1ca719d64d0becef74d40899
refs/heads/master: f8cbd99bd3a023db8d6356d19a5f6f539d367327
18 changes: 13 additions & 5 deletions trunk/include/linux/kernel.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,23 @@ struct completion;
* be biten later when the calling function happens to sleep when it is not
* supposed to.
*/
#ifdef CONFIG_PREEMPT_VOLUNTARY
extern int cond_resched(void);
# define might_resched() cond_resched()
#else
# define might_resched() do { } while (0)
#endif

#ifdef CONFIG_DEBUG_SPINLOCK_SLEEP
#define might_sleep() __might_sleep(__FILE__, __LINE__)
#define might_sleep_if(cond) do { if (unlikely(cond)) might_sleep(); } while (0)
void __might_sleep(char *file, int line);
void __might_sleep(char *file, int line);
# define might_sleep() \
do { __might_sleep(__FILE__, __LINE__); might_resched(); } while (0)
#else
#define might_sleep() do {} while(0)
#define might_sleep_if(cond) do {} while (0)
# define might_sleep() do { might_resched(); } while (0)
#endif

#define might_sleep_if(cond) do { if (unlikely(cond)) might_sleep(); } while (0)

#define abs(x) ({ \
int __x = (x); \
(__x < 0) ? -__x : __x; \
Expand Down
57 changes: 49 additions & 8 deletions trunk/kernel/Kconfig.preempt
Original file line number Diff line number Diff line change
@@ -1,15 +1,56 @@

config PREEMPT
bool "Preemptible Kernel"
choice
prompt "Preemption Model"
default PREEMPT_NONE

config PREEMPT_NONE
bool "No Forced Preemption (Server)"
help
This is the traditional Linux preemption model, geared towards
throughput. It will still provide good latencies most of the
time, but there are no guarantees and occasional longer delays
are possible.

Select this option if you are building a kernel for a server or
scientific/computation system, or if you want to maximize the
raw processing power of the kernel, irrespective of scheduling
latencies.

config PREEMPT_VOLUNTARY
bool "Voluntary Kernel Preemption (Desktop)"
help
This option reduces the latency of the kernel when reacting to
real-time or interactive events by allowing a low priority process to
be preempted even if it is in kernel mode executing a system call.
This allows applications to run more reliably even when the system is
This option reduces the latency of the kernel by adding more
"explicit preemption points" to the kernel code. These new
preemption points have been selected to reduce the maximum
latency of rescheduling, providing faster application reactions,
at the cost of slighly lower throughput.

This allows reaction to interactive events by allowing a
low priority process to voluntarily preempt itself even if it
is in kernel mode executing a system call. This allows
applications to run more 'smoothly' even when the system is
under load.

Say Y here if you are building a kernel for a desktop, embedded
or real-time system. Say N if you are unsure.
Select this if you are building a kernel for a desktop system.

config PREEMPT
bool "Preemptible Kernel (Low-Latency Desktop)"
help
This option reduces the latency of the kernel by making
all kernel code (that is not executing in a critical section)
preemptible. This allows reaction to interactive events by
permitting a low priority process to be preempted involuntarily
even if it is in kernel mode executing a system call and would
otherwise not be about to reach a natural preemption point.
This allows applications to run more 'smoothly' even when the
system is under load, at the cost of slighly lower throughput
and a slight runtime overhead to kernel code.

Select this if you are building a kernel for a desktop or
embedded system with latency requirements in the milliseconds
range.

endchoice

config PREEMPT_BKL
bool "Preempt The Big Kernel Lock"
Expand Down

0 comments on commit 83d8f47

Please sign in to comment.