mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [patch-rt 0/4] Bugfixes for 2.6.26-rt
@ 2009-01-28 21:28 Thomas Gleixner
  2009-01-28 21:29 ` [patch-rt 1/4] ftrace: fix swapped nibbles in tracer raw hex output Thomas Gleixner
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Thomas Gleixner @ 2009-01-28 21:28 UTC (permalink / raw)
  To: LKML; +Cc: Steven Rostedt, Ingo Molnar, Carsten Emde

Carsten and I spent some time to decode remaining weird behaviour of
2.6.26-rt.

Mostly trivial fixes, but nasty to reproduce and decode.

Thanks,

	tglx
-- 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [patch-rt 1/4] ftrace: fix swapped nibbles in tracer raw hex output
  2009-01-28 21:28 [patch-rt 0/4] Bugfixes for 2.6.26-rt Thomas Gleixner
@ 2009-01-28 21:29 ` Thomas Gleixner
  2009-01-28 21:29 ` [patch-rt 2/4] ftrace: fix erroneous histogram stop WARN_ON() messages Thomas Gleixner
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Thomas Gleixner @ 2009-01-28 21:29 UTC (permalink / raw)
  To: LKML; +Cc: Steven Rostedt, Ingo Molnar, Carsten Emde, Carsten Emde

[-- Attachment #1: fix-swapped-nibbles-in-tracer-raw-hex-output-backport-from-2-6-28-mainline.patch --]
[-- Type: text/plain, Size: 914 bytes --]

backport from 2.6.28 mainline

Signed-off-by: Carsten Emde <Carsten.Emde@osadl.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 kernel/trace/trace.c |    7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

Index: linux-2.6.26/kernel/trace/trace.c
===================================================================
--- linux-2.6.26.orig/kernel/trace/trace.c
+++ linux-2.6.26/kernel/trace/trace.c
@@ -421,7 +421,6 @@ trace_seq_putmem_hex(struct trace_seq *s
 {
 	unsigned char hex[HEX_CHARS];
 	unsigned char *data = mem;
-	unsigned char byte;
 	int i, j;
 
 	BUG_ON(len >= HEX_CHARS);
@@ -431,10 +430,8 @@ trace_seq_putmem_hex(struct trace_seq *s
 #else
 	for (i = len-1, j = 0; i >= 0; i--) {
 #endif
-		byte = data[i];
-
-		hex[j++] = hex2asc[byte & 0x0f];
-		hex[j++] = hex2asc[byte >> 4];
+		hex[j++] = hex_asc_hi(data[i]);
+		hex[j++] = hex_asc_lo(data[i]);
 	}
 	hex[j++] = ' ';
 

-- 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [patch-rt 2/4] ftrace: fix erroneous histogram stop WARN_ON() messages
  2009-01-28 21:28 [patch-rt 0/4] Bugfixes for 2.6.26-rt Thomas Gleixner
  2009-01-28 21:29 ` [patch-rt 1/4] ftrace: fix swapped nibbles in tracer raw hex output Thomas Gleixner
@ 2009-01-28 21:29 ` Thomas Gleixner
  2009-01-28 21:29 ` [patch-rt 3/4] ftrace: display real preempt_count in ftracer Thomas Gleixner
  2009-01-28 21:29 ` [patch-rt 4/4] sched: mark SCHED_HRTICK broken Thomas Gleixner
  3 siblings, 0 replies; 6+ messages in thread
From: Thomas Gleixner @ 2009-01-28 21:29 UTC (permalink / raw)
  To: LKML; +Cc: Steven Rostedt, Ingo Molnar, Carsten Emde

[-- Attachment #1: fix-erroneous-histogram-stop-warn-on-messages.patch --]
[-- Type: text/plain, Size: 967 bytes --]

IRQs are temporarily disabled during histogram calculation in
cycles_2_ns(). This causes a nested irqs_off histogram processing
which emittes an erroneous WARN_ON() message and also confuses the
histogramm output.

Change local_irq to raw_local_irq in cycles_2_ns to prevent irqs_off
histogram processing.

Tested-by: Carsten Emde <C.Emde@osadl.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

---
 include/asm-x86/timer.h |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Index: linux-2.6.26/include/asm-x86/timer.h
===================================================================
--- linux-2.6.26.orig/include/asm-x86/timer.h
+++ linux-2.6.26/include/asm-x86/timer.h
@@ -53,9 +53,9 @@ static inline notrace unsigned long long
 	unsigned long long ns;
 	unsigned long flags;
 
-	local_irq_save(flags);
+	raw_local_irq_save(flags);
 	ns = __cycles_2_ns(cyc);
-	local_irq_restore(flags);
+	raw_local_irq_restore(flags);
 
 	return ns;
 }

-- 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [patch-rt 3/4] ftrace: display real preempt_count in ftracer
  2009-01-28 21:28 [patch-rt 0/4] Bugfixes for 2.6.26-rt Thomas Gleixner
  2009-01-28 21:29 ` [patch-rt 1/4] ftrace: fix swapped nibbles in tracer raw hex output Thomas Gleixner
  2009-01-28 21:29 ` [patch-rt 2/4] ftrace: fix erroneous histogram stop WARN_ON() messages Thomas Gleixner
@ 2009-01-28 21:29 ` Thomas Gleixner
  2009-01-28 21:29 ` [patch-rt 4/4] sched: mark SCHED_HRTICK broken Thomas Gleixner
  3 siblings, 0 replies; 6+ messages in thread
From: Thomas Gleixner @ 2009-01-28 21:29 UTC (permalink / raw)
  To: LKML; +Cc: Steven Rostedt, Ingo Molnar, Carsten Emde, Carsten Emde

[-- Attachment #1: ftrace-correctly-display-preempt-count-in-ftracer.patch --]
[-- Type: text/plain, Size: 13504 bytes --]

ftrace determined the preempt_count after preemption was disabled
instead of the original preemption count.

Signed-off-by: Carsten Emde <C.Emde@osadl.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

---
 kernel/trace/trace.c              |   54 +++++++++++++++++++-------------------
 kernel/trace/trace.h              |    3 +-
 kernel/trace/trace_hist.c         |    2 -
 kernel/trace/trace_irqsoff.c      |   13 +++++----
 kernel/trace/trace_sched_wakeup.c |    9 ++++--
 5 files changed, 45 insertions(+), 36 deletions(-)

Index: linux-2.6.26/kernel/trace/trace.c
===================================================================
--- linux-2.6.26.orig/kernel/trace/trace.c
+++ linux-2.6.26/kernel/trace/trace.c
@@ -833,12 +833,10 @@ tracing_get_trace_entry(struct trace_arr
 }
 
 static inline void
-tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags)
+tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags,
+			     unsigned long pc)
 {
 	struct task_struct *tsk = current;
-	unsigned long pc;
-
-	pc = preempt_count();
 
 	entry->field.preempt_count	= pc & 0xff;
 	entry->field.pid		= (tsk) ? tsk->pid : 0;
@@ -852,7 +850,8 @@ tracing_generic_entry_update(struct trac
 
 void
 trace_function(struct trace_array *tr, struct trace_array_cpu *data,
-	       unsigned long ip, unsigned long parent_ip, unsigned long flags)
+	       unsigned long ip, unsigned long parent_ip, unsigned long flags,
+	       unsigned long pc)
 {
 	struct trace_entry *entry;
 	unsigned long irq_flags;
@@ -860,7 +859,7 @@ trace_function(struct trace_array *tr, s
 	raw_local_irq_save(irq_flags);
 	__raw_spin_lock(&data->lock);
 	entry				= tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, pc);
 	entry->type			= TRACE_FN;
 	entry->field.fn.ip		= ip;
 	entry->field.fn.parent_ip	= parent_ip;
@@ -873,7 +872,8 @@ ftrace(struct trace_array *tr, struct tr
        unsigned long ip, unsigned long parent_ip, unsigned long flags)
 {
 	if (likely(!atomic_read(&data->disabled)))
-		trace_function(tr, data, ip, parent_ip, flags);
+		trace_function(tr, data, ip, parent_ip, flags,
+			       preempt_count());
 }
 
 #ifdef CONFIG_MMIOTRACE
@@ -887,7 +887,7 @@ void __trace_mmiotrace_rw(struct trace_a
 	__raw_spin_lock(&data->lock);
 
 	entry				= tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, 0);
+	tracing_generic_entry_update(entry, 0, preempt_count());
 	entry->type			= TRACE_MMIO_RW;
 	entry->field.mmiorw		= *rw;
 
@@ -907,7 +907,7 @@ void __trace_mmiotrace_map(struct trace_
 	__raw_spin_lock(&data->lock);
 
 	entry				= tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, 0);
+	tracing_generic_entry_update(entry, 0, preempt_count());
 	entry->type			= TRACE_MMIO_MAP;
 	entry->field.mmiomap		= *map;
 
@@ -930,7 +930,7 @@ void __trace_stack(struct trace_array *t
 		return;
 
 	entry			= tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type		= TRACE_STACK;
 
 	memset(&entry->field.stack, 0, sizeof(entry->field.stack));
@@ -955,7 +955,7 @@ __trace_special(void *__tr, void *__data
 	raw_local_irq_save(irq_flags);
 	__raw_spin_lock(&data->lock);
 	entry				= tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, 0);
+	tracing_generic_entry_update(entry, 0, preempt_count());
 	entry->type			= TRACE_SPECIAL;
 	entry->field.special.arg1	= arg1;
 	entry->field.special.arg2	= arg2;
@@ -980,7 +980,7 @@ tracing_sched_switch_trace(struct trace_
 	raw_local_irq_save(irq_flags);
 	__raw_spin_lock(&data->lock);
 	entry				= tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type			= TRACE_CTX;
 	entry->field.ctx.prev_pid	= prev->pid;
 	entry->field.ctx.prev_prio	= prev->prio;
@@ -1007,7 +1007,7 @@ tracing_sched_wakeup_trace(struct trace_
 	raw_local_irq_save(irq_flags);
 	__raw_spin_lock(&data->lock);
 	entry			= tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type		= TRACE_WAKE;
 	entry->field.ctx.prev_pid	= curr->pid;
 	entry->field.ctx.prev_prio	= curr->prio;
@@ -1057,7 +1057,7 @@ void tracing_event_irq(struct trace_arra
 	struct trace_entry *entry;
 
 	entry = tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type			= TRACE_IRQ;
 	entry->field.irq.ip		= ip;
 	entry->field.irq.irq		= irq;
@@ -1076,7 +1076,7 @@ void tracing_event_fault(struct trace_ar
 	struct trace_entry *entry;
 
 	entry = tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type			= TRACE_FAULT;
 	entry->field.fault.ip		= ip;
 	entry->field.fault.ret_ip	= retip;
@@ -1093,7 +1093,7 @@ void tracing_event_timer_set(struct trac
 	struct trace_entry *entry;
 
 	entry = tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type			= TRACE_TIMER_SET;
 	entry->field.timer.ip		= ip;
 	entry->field.timer.expire	= *expires;
@@ -1109,7 +1109,7 @@ void tracing_event_program_event(struct 
 	struct trace_entry *entry;
 
 	entry = tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type		= TRACE_PROGRAM_EVENT;
 	entry->field.program.ip	= ip;
 	entry->field.program.expire	= *expires;
@@ -1126,7 +1126,7 @@ void tracing_event_resched_task(struct t
 	struct trace_entry *entry;
 
 	entry = tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type		= TRACE_RESCHED_TASK;
 	entry->field.task.ip	= ip;
 	entry->field.task.prio	= p->prio;
@@ -1143,7 +1143,7 @@ void tracing_event_timer_triggered(struc
 	struct trace_entry *entry;
 
 	entry = tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type			= TRACE_TIMER_TRIG;
 	entry->field.timer.ip		= ip;
 	entry->field.timer.expire	= *expired;
@@ -1159,7 +1159,7 @@ void tracing_event_timestamp(struct trac
 	struct trace_entry *entry;
 
 	entry = tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type			= TRACE_TIMESTAMP;
 	entry->field.timestamp.ip		= ip;
 	entry->field.timestamp.now		= *now;
@@ -1175,7 +1175,7 @@ void tracing_event_task_activate(struct 
 	struct trace_entry *entry;
 
 	entry = tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type			= TRACE_TASK_ACT;
 	entry->field.task.ip		= ip;
 	entry->field.task.pid		= p->pid;
@@ -1193,7 +1193,7 @@ void tracing_event_task_deactivate(struc
 	struct trace_entry *entry;
 
 	entry = tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type			= TRACE_TASK_DEACT;
 	entry->field.task.ip		= ip;
 	entry->field.task.pid		= p->pid;
@@ -1213,7 +1213,7 @@ void tracing_event_syscall(struct trace_
 	struct trace_entry *entry;
 
 	entry = tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type			= TRACE_SYSCALL;
 	entry->field.syscall.ip		= ip;
 	entry->field.syscall.nr		= nr;
@@ -1231,7 +1231,7 @@ void tracing_event_sysret(struct trace_a
 	struct trace_entry *entry;
 
 	entry = tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type			= TRACE_SYSRET;
 	entry->field.sysret.ip		= ip;
 	entry->field.sysret.ret		= ret;
@@ -1246,6 +1246,7 @@ function_trace_call(unsigned long ip, un
 	unsigned long flags;
 	long disabled;
 	int cpu, resched;
+	unsigned long pc;
 
 	if (unlikely(!ftrace_function_enabled))
 		return;
@@ -1253,6 +1254,7 @@ function_trace_call(unsigned long ip, un
 	if (skip_trace(ip))
 		return;
 
+	pc = preempt_count();
 	resched = ftrace_preempt_disable();
 	cpu = raw_smp_processor_id();
 	data = tr->data[cpu];
@@ -1260,7 +1262,7 @@ function_trace_call(unsigned long ip, un
 
 	if (likely(disabled == 1)) {
 		local_save_flags(flags);
-		trace_function(tr, data, ip, parent_ip, flags);
+		trace_function(tr, data, ip, parent_ip, flags, pc);
 	}
 
 	atomic_dec(&data->disabled);
@@ -3531,7 +3533,7 @@ int __ftrace_printk(unsigned long ip, co
 
 	__raw_spin_lock(&data->lock);
 	entry				= tracing_get_trace_entry(tr, data);
-	tracing_generic_entry_update(entry, flags);
+	tracing_generic_entry_update(entry, flags, preempt_count());
 	entry->type			= TRACE_PRINT;
 	entry->field.print.ip		= ip;
 
Index: linux-2.6.26/kernel/trace/trace.h
===================================================================
--- linux-2.6.26.orig/kernel/trace/trace.h
+++ linux-2.6.26/kernel/trace/trace.h
@@ -322,7 +322,8 @@ void trace_function(struct trace_array *
 		    struct trace_array_cpu *data,
 		    unsigned long ip,
 		    unsigned long parent_ip,
-		    unsigned long flags);
+		    unsigned long flags,
+		    unsigned long pc);
 void tracing_event_irq(struct trace_array *tr,
 		       struct trace_array_cpu *data,
 		       unsigned long flags,
Index: linux-2.6.26/kernel/trace/trace_hist.c
===================================================================
--- linux-2.6.26.orig/kernel/trace/trace_hist.c
+++ linux-2.6.26/kernel/trace/trace_hist.c
@@ -354,7 +354,7 @@ notrace void tracing_hist_preempt_stop(i
 	cpu = raw_smp_processor_id();
 
 #ifdef CONFIG_INTERRUPT_OFF_HIST
-	if (irqs_on  &&
+	if (irqs_on &&
 	    per_cpu(hist_irqsoff_tracing, cpu)) {
 		stop = ftrace_now(cpu);
 		stop_set++;
Index: linux-2.6.26/kernel/trace/trace_irqsoff.c
===================================================================
--- linux-2.6.26.orig/kernel/trace/trace_irqsoff.c
+++ linux-2.6.26/kernel/trace/trace_irqsoff.c
@@ -99,7 +99,8 @@ irqsoff_tracer_call(unsigned long ip, un
 	disabled = atomic_inc_return(&data->disabled);
 
 	if (likely(disabled == 1))
-		trace_function(tr, data, ip, parent_ip, flags);
+		trace_function(tr, data, ip, parent_ip, flags,
+			       preempt_count());
 
 	atomic_dec(&data->disabled);
 }
@@ -154,7 +155,8 @@ check_critical_timing(struct trace_array
 	if (!report_latency(delta))
 		goto out_unlock;
 
-	trace_function(tr, data, CALLER_ADDR0, parent_ip, flags);
+	trace_function(tr, data, CALLER_ADDR0, parent_ip, flags,
+		       preempt_count());
 
 	latency = nsecs_to_usecs(delta);
 
@@ -178,7 +180,8 @@ out:
 	data->critical_sequence = max_sequence;
 	data->preempt_timestamp = ftrace_now(cpu);
 	tracing_reset(data);
-	trace_function(tr, data, CALLER_ADDR0, parent_ip, flags);
+	trace_function(tr, data, CALLER_ADDR0, parent_ip, flags,
+		       preempt_count());
 }
 
 static inline void
@@ -211,7 +214,7 @@ start_critical_timing(unsigned long ip, 
 
 	local_save_flags(flags);
 
-	trace_function(tr, data, ip, parent_ip, flags);
+	trace_function(tr, data, ip, parent_ip, flags, preempt_count());
 
 	per_cpu(tracing_cpu, cpu) = 1;
 
@@ -245,7 +248,7 @@ stop_critical_timing(unsigned long ip, u
 	atomic_inc(&data->disabled);
 
 	local_save_flags(flags);
-	trace_function(tr, data, ip, parent_ip, flags);
+	trace_function(tr, data, ip, parent_ip, flags, preempt_count());
 	check_critical_timing(tr, data, parent_ip ? : ip, cpu);
 	data->critical_start = 0;
 	atomic_dec(&data->disabled);
Index: linux-2.6.26/kernel/trace/trace_sched_wakeup.c
===================================================================
--- linux-2.6.26.orig/kernel/trace/trace_sched_wakeup.c
+++ linux-2.6.26/kernel/trace/trace_sched_wakeup.c
@@ -44,10 +44,12 @@ wakeup_tracer_call(unsigned long ip, uns
 	long disabled;
 	int resched;
 	int cpu;
+	unsigned long pc;
 
 	if (likely(!wakeup_task) || !ftrace_enabled)
 		return;
 
+	pc = preempt_count();
 	resched = ftrace_preempt_disable();
 
 	cpu = raw_smp_processor_id();
@@ -71,7 +73,7 @@ wakeup_tracer_call(unsigned long ip, uns
 
 	/* interrupts are disabled, no worry about scheduling */
 	preempt_enable_no_resched_notrace();
-	trace_function(tr, data, ip, parent_ip, flags);
+	trace_function(tr, data, ip, parent_ip, flags, pc);
 	preempt_disable_notrace();
 
  unlock:
@@ -149,7 +151,8 @@ probe_wakeup_sched_switch(struct rq *rq,
 	if (unlikely(!tracer_enabled || next != wakeup_task))
 		goto out_unlock;
 
-	trace_function(wakeup_trace, data, CALLER_ADDR1, CALLER_ADDR2, flags);
+	trace_function(wakeup_trace, data, CALLER_ADDR1, CALLER_ADDR2, flags,
+		       preempt_count());
 
 	/*
 	 * usecs conversion is slow so we try to delay the conversion
@@ -250,7 +253,7 @@ probe_wakeup(struct rq *rq, struct task_
 
 	wakeup_trace->data[wakeup_cpu]->preempt_timestamp = ftrace_now(cpu);
 	trace_function(wakeup_trace, wakeup_trace->data[wakeup_cpu],
-		       CALLER_ADDR1, CALLER_ADDR2, flags);
+		       CALLER_ADDR1, CALLER_ADDR2, flags, preempt_count());
 
 out_locked:
 	__raw_spin_unlock(&wakeup_lock);

-- 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [patch-rt 4/4] sched: mark SCHED_HRTICK broken
  2009-01-28 21:28 [patch-rt 0/4] Bugfixes for 2.6.26-rt Thomas Gleixner
                   ` (2 preceding siblings ...)
  2009-01-28 21:29 ` [patch-rt 3/4] ftrace: display real preempt_count in ftracer Thomas Gleixner
@ 2009-01-28 21:29 ` Thomas Gleixner
  2009-01-29  9:58   ` Peter Zijlstra
  3 siblings, 1 reply; 6+ messages in thread
From: Thomas Gleixner @ 2009-01-28 21:29 UTC (permalink / raw)
  To: LKML; +Cc: Steven Rostedt, Ingo Molnar, Carsten Emde

[-- Attachment #1: do-not-configure-sched-hrtick-since-it-is-currently-broken.patch --]
[-- Type: text/plain, Size: 658 bytes --]

SCHED_HRTICK is broken and not yet fixed in mainline. WTF is it still
enabled in -rt ?

Suggested-by: Peter Zijlstra <peterz@infradead.org>
Tested-by: Carsten Emde <C.Emde@osadl.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 kernel/Kconfig.hz |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: linux-2.6.26/kernel/Kconfig.hz
===================================================================
--- linux-2.6.26.orig/kernel/Kconfig.hz
+++ linux-2.6.26/kernel/Kconfig.hz
@@ -55,4 +55,4 @@ config HZ
 	default 1000 if HZ_1000
 
 config SCHED_HRTICK
-	def_bool HIGH_RES_TIMERS && X86
+	def_bool HIGH_RES_TIMERS && X86 && BROKEN

-- 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch-rt 4/4] sched: mark SCHED_HRTICK broken
  2009-01-28 21:29 ` [patch-rt 4/4] sched: mark SCHED_HRTICK broken Thomas Gleixner
@ 2009-01-29  9:58   ` Peter Zijlstra
  0 siblings, 0 replies; 6+ messages in thread
From: Peter Zijlstra @ 2009-01-29  9:58 UTC (permalink / raw)
  To: Thomas Gleixner; +Cc: LKML, Steven Rostedt, Ingo Molnar, Carsten Emde

On Wed, 2009-01-28 at 21:29 +0000, Thomas Gleixner wrote:
> plain text document attachment
> (do-not-configure-sched-hrtick-since-it-is-currently-broken.patch)
> SCHED_HRTICK is broken and not yet fixed in mainline. WTF is it still
> enabled in -rt ?

It got fixed in mainline, but past .26. That said, we still disabled in
in mainline because of performance issues.

> Suggested-by: Peter Zijlstra <peterz@infradead.org>
> Tested-by: Carsten Emde <C.Emde@osadl.org>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
>  kernel/Kconfig.hz |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> Index: linux-2.6.26/kernel/Kconfig.hz
> ===================================================================
> --- linux-2.6.26.orig/kernel/Kconfig.hz
> +++ linux-2.6.26/kernel/Kconfig.hz
> @@ -55,4 +55,4 @@ config HZ
>  	default 1000 if HZ_1000
>  
>  config SCHED_HRTICK
> -	def_bool HIGH_RES_TIMERS && X86
> +	def_bool HIGH_RES_TIMERS && X86 && BROKEN
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-01-29  9:58 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-01-28 21:28 [patch-rt 0/4] Bugfixes for 2.6.26-rt Thomas Gleixner
2009-01-28 21:29 ` [patch-rt 1/4] ftrace: fix swapped nibbles in tracer raw hex output Thomas Gleixner
2009-01-28 21:29 ` [patch-rt 2/4] ftrace: fix erroneous histogram stop WARN_ON() messages Thomas Gleixner
2009-01-28 21:29 ` [patch-rt 3/4] ftrace: display real preempt_count in ftracer Thomas Gleixner
2009-01-28 21:29 ` [patch-rt 4/4] sched: mark SCHED_HRTICK broken Thomas Gleixner
2009-01-29  9:58   ` Peter Zijlstra

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome