Re: Early hang with 2.6.21-rc4-rt1

Ingo Molnar
2007-03-27T19:22:45Z

* Roland Dreier <rdreier@cisco.com> wrote:

> Any suggestion of where to look? My /proc/latency_trace stays
> stubbornly empty -- are there any sysctls I need to change from their
> default to get latency tracing? I'm a complete noob when it comes to
> the -rt patch, so I'm not sure what the right way to use the tracing
> infrastructure to track down this lost rtc interrupts issue is.

please apply the patch below, from Steve - this should fix the tracer.

Ingo

---------------------->
Ingo,

I wasn't able to turn on latency tracing on a x86_64 box. Using logdev
to see what was happening, I found that echoing 0
into /proc/sys/kernel/preempt_max_latency would only change the max from
-1ULL to 0xffffffff00000000. Which would keep the max pretty high still.

The problem is in sysctl.c where preempt_max_latency can be modified. On
systems where cycle_t is greater than the size of int (x86_64) we only
write to the 4 LSB.

Here's the patch:

-- Steve

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>

Index: linux-2.6.21-rc5/kernel/sysctl.c
===================================================================
--- linux-2.6.21-rc5.orig/kernel/sysctl.c
+++ linux-2.6.21-rc5/kernel/sysctl.c
@@ -287,17 +287,17 @@ static ctl_table kern_table[] = {
.ctl_name = CTL_UNNUMBERED,
.procname = "preempt_max_latency",
.data = &preempt_max_latency,
- .maxlen = sizeof(int),
+ .maxlen = sizeof(preempt_max_latency),
.mode = 0644,
- .proc_handler = &proc_dointvec,
+ .proc_handler = &proc_doulongvec_minmax,
},
{
.ctl_name = CTL_UNNUMBERED,
.procname = "preempt_thresh",
.data = &preempt_thresh,
- .maxlen = sizeof(int),
+ .maxlen = sizeof(preempt_thresh),
.mode = 0644,
- .proc_handler = &proc_dointvec,
+ .proc_handler = &proc_doulongvec_minmax,
},
#endif
#ifdef CONFIG_EVENT_TRACE