Re: PREEMPT is messing with everyone

From: Michal Schmidt
Date: Tue Dec 05 2006 - 10:08:35 EST


Jaswinder Singh wrote:
Hi,

preempt stuff SHOULD only stay in #ifdef CONFIG_PREEMP_* , but it is
messing with everyone even though not defined.

e.g.

1. linux-2.6.19/kernel/spinlock.c

Line 18: #include <linux/preempt.h>

Line 26: preempt_disable();

Line 32: preempt_disable();

and so on .

Don't worry. These compile into "do { } while (0)" (i.e. nothing) when CONFIG_PREEMPT is not set.


2. linux-2.6.19/kernel/sched.c

Line 1096: int preempted;

Line 1104: preempted = !task_running(rq, p);

Line 1106: if (preempted)

Line 2059: if (TASK_PREEMPTS_CURR(p, this_rq))

Linux always does preemptive multitasking of user tasks. These have nothing to do with CONFIG_PREEMPT.

Line 3355: current->comm, preempt_count(), current->pid);

Line 3342: preempt_disable();

Line 3375: if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {

preempt_count() is useful in !CONFIG_PREEMPT kernels too. It stores information about the current context (hardirq, softirq, ...).

[...]

70 to 80 % of this code is removed when compiled.

but 20 to 30 % code left in binary kernel image.

Why Linux kernel is wasting its resources which is not defined at all.

I don't think that's the case.

Any solution ?

Thank you,

Best Regards,

Jaswinder Singh.

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