Re: [RFC] New kernel-message logging API (take 2)

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Geert Uytterhoeven
Date: Friday, September 28, 2007 - 12:31 am

On Thu, 27 Sep 2007, Vegard Nossum wrote:

If-blocks spanning macros are really dangerous!

E.g. an Ethernet driver may want to do:

	kprint_block(&block, "MAC ");
	for (i = 0; i < 6; i++) {
		card->mac[i] = obtain_mac_byte_from_hw(i);
		kprint_block(&block, "%02x", card->mac[i]);
	}

This looks (and should be) innocent, but the actual MAC addres retrieval
would never be executed if loglevel <= CONFIG_KPRINT_LOGLEVEL_MAX.

Can't you store the loglevel in the kprint_block and check it in all
successive kprint_*() macros? If gcc knows it's constant, it can optimize
the non-wanted code away. As other fields in struct kprint_block cannot be
constant (they store internal state), you have to split it like:

    struct kprint_block {
	    int loglevel;
	    struct real_kprint_block real;  /* internal state */
    }

and pass &block.real() instead of &block to all successive internal functions.
I haven't tried this, so let's hope gcc is actually smart enough...

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC] New kernel-message logging API (take 2), Vegard Nossum, (Thu Sep 27, 2:18 pm)
Re: [RFC] New kernel-message logging API (take 2), Geert Uytterhoeven, (Fri Sep 28, 12:31 am)
Re: [RFC] New kernel-message logging API (take 2), Kyle Moffett, (Fri Sep 28, 12:44 am)
Re: [RFC] New kernel-message logging API (take 2), Jan Engelhardt, (Fri Sep 28, 2:45 am)
Re: [RFC] New kernel-message logging API (take 2), Vegard Nossum, (Fri Sep 28, 4:46 am)
Re: [RFC] New kernel-message logging API (take 2), Vegard Nossum, (Fri Sep 28, 4:49 am)
Re: [RFC] New kernel-message logging API (take 2), Vegard Nossum, (Fri Sep 28, 4:59 am)
Re: [RFC] New kernel-message logging API (take 2), Vegard Nossum, (Fri Sep 28, 5:11 am)
Re: [RFC] New kernel-message logging API (take 2), Miguel Ojeda, (Fri Sep 28, 6:30 am)
Re: [RFC] New kernel-message logging API (take 2), Vegard Nossum, (Fri Sep 28, 6:55 am)
Re: [RFC] New kernel-message logging API (take 2), Miguel Ojeda, (Fri Sep 28, 7:00 am)
Re: [RFC] New kernel-message logging API (take 2), Rob Landley, (Fri Sep 28, 9:30 am)
Re: [RFC] New kernel-message logging API (take 2), Vegard Nossum, (Fri Sep 28, 9:41 am)