Hua Zhong <[email protected]> wrote:
>
> +#define __check_likely(x, v, uv) \
those single-char identifiers are not nice.
> + ({ static int _ckl_print_nr = 0; \
> + static unsigned int _ckl_s[2]; \
> + int _ckl_r = !!(x); \
> + _ckl_s[_ckl_r]++; \
> + if ((_ckl_s[v] == _ckl_s[uv]) && (_ckl_s[v] > debug_likely_count_min_thresh) \
> + && (_ckl_print_nr < debug_likely_print_max_thresh)) { \
> + _ckl_print_nr++; \
> + printk_debug_likely("possible (un)likely misuse at %s:%d/%s()\n", \
> + __FILE__, __LINE__, __FUNCTION__); \
> + } \
> + _ckl_r; })
Kinda. It would be better to put all the counters into a linked list
struct likeliness {
char *file;
int line;
atomic_t true_count;
atomic_t false_count;
struct likeliness *next;
};
then
#define __check_likely(expr, value)
({
static struct likeliness likeliness;
do_check_likely(__FILE__, __LINE__, &likeliness, value);
})
...
static struct likeliness *likeliness_list;
void do_check_likely(char *file, int line, struct likeliness *likeliness,
int value)
{
static DEFINE_SPINLOCK(lock);
unsigned long flags;
if (!likeliness->next) {
if (!spin_trylock_irqsave(&lock, flags))
return; /* Can be called from NMI */
if (!likeliness->next) {
likeliness->next = likeliness_list;
likeliness_list = likeliness;
likeliness->file = file;
likeliness->line = line;
}
spin_unlock_irqsave(&lock, flags);
}
if (value)
atomic_inc(&likeliness->true_count);
else
atomic_inc(&likeliness->false_count);
}
EXPORT_SYMBOL(do_check_likely);
then write a thingy to dump the linked list (sysrq&printk if it's a hack,
/proc handler if not).
It'll crash if a module gets registered then unloaded.
CONFIG_MODULE_UNLOAD=n would be required.
-
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]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]