>>> On Mon, Feb 25, 2008 at 5:09 PM, in message <20080225220950.GI2659@xxxxxxxxxx>, Pavel Machek <pavel@xxxxxx> wrote: > Hi! > >> From: Peter W.Morreale <pmorreale@xxxxxxxxxx> >> >> This patch adds the adaptive spin lock busywait to rtmutexes. It adds >> a new tunable: rtmutex_timeout, which is the companion to the >> rtlock_timeout tunable. >> >> Signed-off-by: Peter W. Morreale <pmorreale@xxxxxxxxxx> > > Not signed off by you? I wasn't sure if this was appropriate for me to do. This is the first time I was acting as "upstream" to someone. If that is what I am expected to do, consider this an "ack" for your remaining comments related to this. > >> diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt >> index ac1cbad..864bf14 100644 >> --- a/kernel/Kconfig.preempt >> +++ b/kernel/Kconfig.preempt >> @@ -214,6 +214,43 @@ config RTLOCK_DELAY >> tunable at runtime via a sysctl. A setting of 0 (zero) disables >> the adaptive algorithm entirely. >> >> +config ADAPTIVE_RTMUTEX >> + bool "Adaptive real-time mutexes" >> + default y >> + depends on ADAPTIVE_RTLOCK >> + help >> + This option adds the adaptive rtlock spin/sleep algorithm to >> + rtmutexes. In rtlocks, a significant gain in throughput >> + can be seen by allowing rtlocks to spin for a distinct >> + amount of time prior to going to sleep for deadlock avoidence. >> + >> + Typically, mutexes are used when a critical section may need to >> + sleep due to a blocking operation. In the event the critical >> + section does not need to sleep, an additional gain in throughput >> + can be seen by avoiding the extra overhead of sleeping. > > Watch the whitespace. ... and do we need yet another config options? > >> +config RTMUTEX_DELAY >> + int "Default delay (in loops) for adaptive mutexes" >> + range 0 10000000 >> + depends on ADAPTIVE_RTMUTEX >> + default "3000" >> + help >> + This allows you to specify the maximum delay a task will use >> + to wait for a rt mutex before going to sleep. Note that that >> + although the delay is implemented as a preemptable loop, tasks >> + of like priority cannot preempt each other and this setting can >> + result in increased latencies. >> + >> + The value is tunable at runtime via a sysctl. A setting of 0 >> + (zero) disables the adaptive algorithm entirely. > > Ouch. ? Is this reference to whitespace damage, or does the content need addressing? > >> +#ifdef CONFIG_ADAPTIVE_RTMUTEX >> + >> +#define mutex_adaptive_wait adaptive_wait >> +#define mutex_prepare_adaptive_wait prepare_adaptive_wait >> + >> +extern int rtmutex_timeout; >> + >> +#define DECLARE_ADAPTIVE_MUTEX_WAITER(name) \ >> + struct adaptive_waiter name = { .owner = NULL, \ >> + .timeout = rtmutex_timeout, } >> + >> +#else >> + >> +#define DECLARE_ADAPTIVE_MUTEX_WAITER(name) >> + >> +#define mutex_adaptive_wait(lock, intr, waiter, busy) 1 >> +#define mutex_prepare_adaptive_wait(lock, busy) {} > > More evil macros. Macro does not behave like a function, make it > inline function if you are replacing a function. Ok > Pavel - To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html