lkml.org 
[lkml]   [2005]   [Aug]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRe: 2.6.13-rc6-rt6
From
Date
On Tue, 2005-08-16 at 19:08 +0200, Ingo Molnar wrote:
> * Ingo Molnar <mingo@elte.hu> wrote:
>
> > it's the raw_local_irq_save() in ___trace() that causes trouble.
>
> ok, i've uploaded 2.6.13-rc6-rt6, which should fix this. (i've pushed
> the IRQ tracing into the raw_local_*() primitives, and kept the
> __raw_local_*() primitives clean, and ___trace() is using them now)
>
> Does it boot for you now?

Ingo,

I just compiled it and got a bunch of uninitialized variable warnings.
Are you sure you want this? Here's the problem.


In something like _trace_cmdline we have:

static void notrace _trace_cmdline(int cpu, struct cpu_trace *tr)
{
unsigned long flags;

raw_local_save_flags(flags);
____trace(cpu, TRACE_CMDLINE, tr, 0, 0, 0, 0, 0, flags);
}


Now the raw_local_save_flags is defined as:

do { typecheck(unsigned long,flags); \
if (raw_irqs_disabled_flags(flags)) \
trace_irqs_off(); else trace_irqs_on(); \
__raw_local_save_flags(flags); } while (0)


The test of raw_irqs_disabled_flags is checking an uninitialized
variable. I haven't tried to run it yet since this just doesn't look
good.

I changed it for now to the following, but it still desn't make sense to
me. With a local_save_flags, which doesn't disable or restore the
interrupts, why bother with the trace at all?

-- Steve

Index: linux_realtime_ernie/include/linux/rt_irq.h
===================================================================
--- linux_realtime_ernie/include/linux/rt_irq.h (revision 294)
+++ linux_realtime_ernie/include/linux/rt_irq.h (working copy)
@@ -26,7 +26,7 @@
# endif

/* soft state does not follow the hard state */
-# define raw_local_save_flags(flags) do { typecheck(unsigned long,flags); if (raw_irqs_disabled_flags(flags)) trace_irqs_off(); else trace_irqs_on(); __raw_local_save_flags(flags); } while (0)
+# define raw_local_save_flags(flags) do { typecheck(unsigned long,flags); if (raw_irqs_disabled()) trace_irqs_off(); else trace_irqs_on(); __raw_local_save_flags(flags); } while (0)
# define raw_local_irq_enable() do { trace_irqs_on(); __raw_local_irq_enable(); } while (0)
# define raw_local_irq_disable() do { __raw_local_irq_disable(); trace_irqs_off(); } while (0)
# define raw_local_irq_save(flags) do { __raw_local_irq_save(flags); trace_irqs_off(); } while (0)


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-08-16 19:53    [W:0.124 / U:2.064 seconds]
©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site