LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* PREEMPT is messing with everyone
@ 2006-12-05 14:10 Jaswinder Singh
  2006-12-05 15:08 ` Michal Schmidt
  0 siblings, 1 reply; 6+ messages in thread
From: Jaswinder Singh @ 2006-12-05 14:10 UTC (permalink / raw)
  To: linux-kernel

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 .

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))

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

Line 3342:  preempt_disable();

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

Line 3471:  preempt_enable_no_resched();

3. linux-2.6.19/kernel/timer.c

Line 444:     int preempt_count = preempt_count();

Line 447:     if (preempt_count != preempt_count()) {

4. linux-2.6.19/arch/i386/kernel/entry.S

Line 240:  preempt_stop

5. linux-2.6.19/arch/i386/irq.c

Line 111:    irqctx->tinfo.preempt_count =

Line 112:    (irqctx->tinfo.preempt_count & ~SOFTIRQ_MASK) |

Line 113:    (curctx->tinfo.preempt_count & SOFTIRQ_MASK);

Line 160:  irqctx->tinfo.preempt_count     = HARDIRQ_OFFSET;

and so on.

Similarly unnecessary preempt code is also written in other important files.

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.

Any solution ?

Thank you,

Best Regards,

Jaswinder Singh.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PREEMPT is messing with everyone
  2006-12-05 14:10 PREEMPT is messing with everyone Jaswinder Singh
@ 2006-12-05 15:08 ` Michal Schmidt
  2006-12-05 16:50   ` Jaswinder Singh
  0 siblings, 1 reply; 6+ messages in thread
From: Michal Schmidt @ 2006-12-05 15:08 UTC (permalink / raw)
  To: Jaswinder Singh; +Cc: linux-kernel

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

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PREEMPT is messing with everyone
  2006-12-05 15:08 ` Michal Schmidt
@ 2006-12-05 16:50   ` Jaswinder Singh
  2006-12-05 16:58     ` Michal Schmidt
                       ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Jaswinder Singh @ 2006-12-05 16:50 UTC (permalink / raw)
  To: Michal Schmidt; +Cc: linux-kernel

On 12/5/06, Michal Schmidt <xschmi00@stud.feec.vutbr.cz> wrote:
> 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.
>

Yes, Compiler will remove it but this looks ugly and confusing.

Why dont we use like this :-

#ifdef CONFIG_PREEMPT
#include <linux/preempt.h>
#endif

#ifdef CONFIG_PREEMPT
 preempt_disable();
#endif

#ifdef CONFIG_PREEMPT
 preempt_enable();
#endif

Regards,

Jaswinder Singh.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PREEMPT is messing with everyone
  2006-12-05 16:50   ` Jaswinder Singh
@ 2006-12-05 16:58     ` Michal Schmidt
  2006-12-05 19:55     ` Bill Davidsen
  2006-12-05 20:30     ` Jan Engelhardt
  2 siblings, 0 replies; 6+ messages in thread
From: Michal Schmidt @ 2006-12-05 16:58 UTC (permalink / raw)
  To: Jaswinder Singh; +Cc: linux-kernel

Jaswinder Singh skrev:
> Yes, Compiler will remove it but this looks ugly and confusing.
> 
> Why dont we use like this :-
> 
> #ifdef CONFIG_PREEMPT
> #include <linux/preempt.h>
> #endif
> 
> #ifdef CONFIG_PREEMPT
>  preempt_disable();
> #endif
> 
> #ifdef CONFIG_PREEMPT
>  preempt_enable();
> #endif

Surely you're joking.
It is much more readable and maintainable to hide the #ifdef-hackery in 
header files than to clutter the *.c files.

Michal


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PREEMPT is messing with everyone
  2006-12-05 16:50   ` Jaswinder Singh
  2006-12-05 16:58     ` Michal Schmidt
@ 2006-12-05 19:55     ` Bill Davidsen
  2006-12-05 20:30     ` Jan Engelhardt
  2 siblings, 0 replies; 6+ messages in thread
From: Bill Davidsen @ 2006-12-05 19:55 UTC (permalink / raw)
  To: Jaswinder Singh; +Cc: linux-kernel

Jaswinder Singh wrote:
> On 12/5/06, Michal Schmidt <xschmi00@stud.feec.vutbr.cz> wrote:
>> 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.
>>
> 
> Yes, Compiler will remove it but this looks ugly and confusing.
> 
> Why dont we use like this :-

Because it's ugly and confusing.
> 
> #ifdef CONFIG_PREEMPT
> #include <linux/preempt.h>
> #endif
> 
> #ifdef CONFIG_PREEMPT
> preempt_disable();
> #endif
> 
> #ifdef CONFIG_PREEMPT
> preempt_enable();
> #endif


-- 
bill davidsen <davidsen@tmr.com>
   CTO TMR Associates, Inc
   Doing interesting things with small computers since 1979

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PREEMPT is messing with everyone
  2006-12-05 16:50   ` Jaswinder Singh
  2006-12-05 16:58     ` Michal Schmidt
  2006-12-05 19:55     ` Bill Davidsen
@ 2006-12-05 20:30     ` Jan Engelhardt
  2 siblings, 0 replies; 6+ messages in thread
From: Jan Engelhardt @ 2006-12-05 20:30 UTC (permalink / raw)
  To: Jaswinder Singh; +Cc: Michal Schmidt, linux-kernel


> Yes, Compiler will remove it but this looks ugly and confusing.
>
> Why dont we use like this :-

Even more fugly.

> # ifdef CONFIG_PREEMPT
> # include <linux/preempt.h>
> # endif
>
> #ifdef CONFIG_PREEMPT
> preempt_disable();
> #endif
>
> #ifdef CONFIG_PREEMPT
> preempt_enable();
> #endif
>

	-`J'
-- 

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2006-12-05 20:30 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-12-05 14:10 PREEMPT is messing with everyone Jaswinder Singh
2006-12-05 15:08 ` Michal Schmidt
2006-12-05 16:50   ` Jaswinder Singh
2006-12-05 16:58     ` Michal Schmidt
2006-12-05 19:55     ` Bill Davidsen
2006-12-05 20:30     ` Jan Engelhardt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).