Re: 2.6.13-rc6-rt6

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2005-08-16 at 19:08 +0200, Ingo Molnar wrote:
> * Ingo Molnar <[email protected]> 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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux