Messages in this thread | | | Subject | Re: [patch 1/9] Conditional Calls - Architecture Independent Code | From | Andi Kleen <> | Date | 31 May 2007 15:47:44 +0200 |
| |
Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> writes:
> +struct __cond_call_struct {
Calling structs *_struct is severly deprecated and will cause some people to make fun of your code.
> + const char *name; > + void *enable; > + int flags; > +} __attribute__((packed));
The packed doesn't seem to be needed. There will be padding at the end anyways because the next one needs to be aligned.
> + > + > +/* Cond call flags : selects the mechanism used to enable the conditional calls > + * and prescribe what can be executed within their function. This is primarily > + * used at reentrancy-unfriendly sites. */ > +#define CF_OPTIMIZED (1 << 0) /* Use optimized cond_call */ > +#define CF_LOCKDEP (1 << 1) /* Can call lockdep */ > +#define CF_PRINTK (1 << 2) /* Probe can call vprintk */ > +#define CF_STATIC_ENABLE (1 << 3) /* Enable cond_call statically */
Why is that all needed? Condcall shouldn't really need to know anything about all this. They're just a fancy conditional anyways -- and you don't tell if() that it may need to printk.
Please consider eliminating.
> +#define _CF_NR 4
> + > +#ifdef CONFIG_COND_CALL > + > +/* Generic cond_call flavor always available. > + * Note : the empty asm volatile with read constraint is used here instead of a > + * "used" attribute to fix a gcc 4.1.x bug. */
What gcc 4.1 bug?
> +#define cond_call_generic(flags, name, func) \ > + ({ \ > + static const char __cstrtab_name_##name[] \ > + __attribute__((section("__cond_call_strings"))) = #name; \ > + static char __cond_call_enable_##name = \ > + (flags) & CF_STATIC_ENABLE; \ > + static const struct __cond_call_struct __cond_call_##name \ > + __attribute__((section("__cond_call"))) = \ > + { __cstrtab_name_##name, \ > + &__cond_call_enable_##name, \ > + (flags) & ~CF_OPTIMIZED } ; \ > + asm volatile ( "" : : "i" (&__cond_call_##name)); \ > + (unlikely(__cond_call_enable_##name)) ? \ > + (func) : \ > + (__typeof__(func))0; \ > + })
-Andi - 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/
| |