public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] 2.5: preemptive kernel on UP
@ 2002-03-05  0:11 Robert Love
  2002-03-05  0:43 ` Russell King
  2002-03-06 19:17 ` george anzinger
  0 siblings, 2 replies; 11+ messages in thread
From: Robert Love @ 2002-03-05  0:11 UTC (permalink / raw)
  To: linux-kernel

During 2.5.5-pre, an optimization was made that removed schedule_tail
from UP kernels.  This causes the initial preempt_count of a new task,
which starts at 1, to never decrement to zero and thus never become
preemptible.

Thanks to everyone who pointed out the lousy performance - it took
awhile to find but it should be fixed now.  Please comment if not.

Patch is against 2.5.6-pre2 and is critical for all UP+preempt users.

	Robert Love

diff -urN linux-2.5.6-pre2/arch/alpha/kernel/entry.S linux/arch/alpha/kernel/entry.S
--- linux-2.5.6-pre2/arch/alpha/kernel/entry.S	Fri Mar  1 17:21:14 2002
+++ linux/arch/alpha/kernel/entry.S	Mon Mar  4 17:49:27 2002
@@ -495,7 +495,7 @@
 	ret	$31,($26),1
 .end alpha_switch_to
 
-#ifdef CONFIG_SMP
+#ifdef CONFIG_SMP || CONFIG_PREEMPT
 .globl  ret_from_fork
 .align 3
 .ent ret_from_fork
diff -urN linux-2.5.6-pre2/arch/i386/kernel/entry.S linux/arch/i386/kernel/entry.S
--- linux-2.5.6-pre2/arch/i386/kernel/entry.S	Tue Feb 19 21:10:58 2002
+++ linux/arch/i386/kernel/entry.S	Mon Mar  4 17:48:32 2002
@@ -195,7 +195,7 @@
 

 ENTRY(ret_from_fork)
-#if CONFIG_SMP
+#if CONFIG_SMP || CONFIG_PREEMPT
 	call SYMBOL_NAME(schedule_tail)
 #endif
 	GET_THREAD_INFO(%ebx)
diff -urN linux-2.5.6-pre2/arch/ppc/kernel/entry.S linux/arch/ppc/kernel/entry.S
--- linux-2.5.6-pre2/arch/ppc/kernel/entry.S	Tue Feb 19 21:10:59 2002
+++ linux/arch/ppc/kernel/entry.S	Mon Mar  4 17:48:41 2002
@@ -343,7 +343,7 @@
 
 	.globl	ret_from_fork
 ret_from_fork:
-#ifdef CONFIG_SMP
+#ifdef CONFIG_SMP || CONFIG_PREEMPT
 	bl	schedule_tail
 #endif
 	rlwinm	r3,r1,0,0,18
diff -urN linux-2.5.6-pre2/arch/ppc64/kernel/entry.S linux/arch/ppc64/kernel/entry.S
--- linux-2.5.6-pre2/arch/ppc64/kernel/entry.S	Tue Feb 19 21:10:53 2002
+++ linux/arch/ppc64/kernel/entry.S	Mon Mar  4 17:52:16 2002
@@ -311,7 +311,7 @@
 	blr
 
 _GLOBAL(ret_from_fork)
-#ifdef CONFIG_SMP
+#ifdef CONFIG_SMP || CONFIG_PREEMPT
 	bl	.schedule_tail
 #endif
 	clrrdi	r4,r1,THREAD_SHIFT
diff -urN linux-2.5.6-pre2/arch/s390/kernel/entry.S linux/arch/s390/kernel/entry.S
--- linux-2.5.6-pre2/arch/s390/kernel/entry.S	Tue Feb 19 21:10:57 2002
+++ linux/arch/s390/kernel/entry.S	Mon Mar  4 17:48:12 2002
@@ -295,7 +295,7 @@
         stosm   24(%r15),0x03     # reenable interrupts
         sr      %r0,%r0           # child returns 0
         st      %r0,SP_R2(%r15)   # store return value (change R2 on stack)
-#ifdef CONFIG_SMP
+#ifdef CONFIG_SMP || CONFIG_PREEMPT
         l       %r1,BASED(.Lschedtail)
 	la      %r14,BASED(sysc_return)
         br      %r1               # call schedule_tail, return to sysc_return
@@ -896,7 +896,7 @@
 #error .Ltrace:       .long  syscall_trace
 .Lvfork:       .long  sys_vfork
 
-#ifdef CONFIG_SMP
+#ifdef CONFIG_SMP || CONFIG_PREEMPT
 .Lschedtail:   .long  schedule_tail
 #endif
 
diff -urN linux-2.5.6-pre2/arch/s390x/kernel/entry.S linux/arch/s390x/kernel/entry.S
--- linux-2.5.6-pre2/arch/s390x/kernel/entry.S	Tue Feb 19 21:10:58 2002
+++ linux/arch/s390x/kernel/entry.S	Mon Mar  4 17:53:31 2002
@@ -280,7 +280,7 @@
         GET_CURRENT               # load pointer to task_struct to R9
         stosm   48(%r15),0x03     # reenable interrupts
 	xc      SP_R2(8,%r15),SP_R2(%r15) # child returns 0
-#ifdef CONFIG_SMP
+#ifdef CONFIG_SMP || CONFIG_PREEMPT
 	larl    %r14,sysc_return
         jg      schedule_tail     # return to sysc_return
 #else
diff -urN linux-2.5.6-pre2/kernel/sched.c linux/kernel/sched.c
--- linux-2.5.6-pre2/kernel/sched.c	Fri Mar  1 17:21:16 2002
+++ linux/kernel/sched.c	Mon Mar  4 17:54:00 2002
@@ -397,7 +397,7 @@
 			p->sleep_avg) / (EXIT_WEIGHT + 1);
 }
 
-#if CONFIG_SMP
+#if CONFIG_SMP || CONFIG_PREEMPT
 asmlinkage void schedule_tail(void)
 {
 	spin_unlock_irq(&this_rq()->lock);


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

* Re: [PATCH] 2.5: preemptive kernel on UP
  2002-03-05  0:11 [PATCH] 2.5: preemptive kernel on UP Robert Love
@ 2002-03-05  0:43 ` Russell King
  2002-03-05  0:51   ` Robert Love
  2002-03-06 19:17 ` george anzinger
  1 sibling, 1 reply; 11+ messages in thread
From: Russell King @ 2002-03-05  0:43 UTC (permalink / raw)
  To: Robert Love; +Cc: linux-kernel

On Mon, Mar 04, 2002 at 07:11:23PM -0500, Robert Love wrote:
> During 2.5.5-pre, an optimization was made that removed schedule_tail
> from UP kernels.  This causes the initial preempt_count of a new task,
> which starts at 1, to never decrement to zero and thus never become
> preemptible.
> 
> Thanks to everyone who pointed out the lousy performance - it took
> awhile to find but it should be fixed now.  Please comment if not.
> 
> Patch is against 2.5.6-pre2 and is critical for all UP+preempt users.
> 
> 	Robert Love
> 
> diff -urN linux-2.5.6-pre2/arch/alpha/kernel/entry.S linux/arch/alpha/kernel/entry.S
> --- linux-2.5.6-pre2/arch/alpha/kernel/entry.S	Fri Mar  1 17:21:14 2002
> +++ linux/arch/alpha/kernel/entry.S	Mon Mar  4 17:49:27 2002
> @@ -495,7 +495,7 @@
>  	ret	$31,($26),1
>  .end alpha_switch_to
>  
> -#ifdef CONFIG_SMP
> +#ifdef CONFIG_SMP || CONFIG_PREEMPT

Surely you really don't mean this?

-- 
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html


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

* Re: [PATCH] 2.5: preemptive kernel on UP
  2002-03-05  0:43 ` Russell King
@ 2002-03-05  0:51   ` Robert Love
  2002-03-05  0:53     ` Russell King
  0 siblings, 1 reply; 11+ messages in thread
From: Robert Love @ 2002-03-05  0:51 UTC (permalink / raw)
  To: Russell King; +Cc: linux-kernel

On Mon, 2002-03-04 at 19:43, Russell King wrote:

> > diff -urN linux-2.5.6-pre2/arch/alpha/kernel/entry.S linux/arch/alpha/kernel/entry.S
> > --- linux-2.5.6-pre2/arch/alpha/kernel/entry.S	Fri Mar  1 17:21:14 2002
> > +++ linux/arch/alpha/kernel/entry.S	Mon Mar  4 17:49:27 2002
> > @@ -495,7 +495,7 @@
> >  	ret	$31,($26),1
> >  .end alpha_switch_to
> >  
> > -#ifdef CONFIG_SMP
> > +#ifdef CONFIG_SMP || CONFIG_PREEMPT
> 
> Surely you really don't mean this?

Yes, why?  We need to call schedule_tail ...

	Robert Love


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

* Re: [PATCH] 2.5: preemptive kernel on UP
  2002-03-05  0:51   ` Robert Love
@ 2002-03-05  0:53     ` Russell King
  2002-03-05  0:58       ` Robert Love
  0 siblings, 1 reply; 11+ messages in thread
From: Russell King @ 2002-03-05  0:53 UTC (permalink / raw)
  To: Robert Love; +Cc: linux-kernel

On Mon, Mar 04, 2002 at 07:51:33PM -0500, Robert Love wrote:
> On Mon, 2002-03-04 at 19:43, Russell King wrote:
> 
> > > diff -urN linux-2.5.6-pre2/arch/alpha/kernel/entry.S linux/arch/alpha/kernel/entry.S
> > > --- linux-2.5.6-pre2/arch/alpha/kernel/entry.S	Fri Mar  1 17:21:14 2002
> > > +++ linux/arch/alpha/kernel/entry.S	Mon Mar  4 17:49:27 2002
> > > @@ -495,7 +495,7 @@
> > >  	ret	$31,($26),1
> > >  .end alpha_switch_to
> > >  
> > > -#ifdef CONFIG_SMP
> > > +#ifdef CONFIG_SMP || CONFIG_PREEMPT
> > 
> > Surely you really don't mean this?
> 
> Yes, why?  We need to call schedule_tail ...

It's a #ifdef, not a #if

Does this compiler message give you a better idea:

warning: extra tokens at end of #ifdef directive

-- 
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html


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

* Re: [PATCH] 2.5: preemptive kernel on UP
  2002-03-05  0:53     ` Russell King
@ 2002-03-05  0:58       ` Robert Love
  2002-03-05  1:55         ` Alan Cox
  0 siblings, 1 reply; 11+ messages in thread
From: Robert Love @ 2002-03-05  0:58 UTC (permalink / raw)
  To: Russell King; +Cc: linux-kernel

On Mon, 2002-03-04 at 19:53, Russell King wrote:

> It's a #ifdef, not a #if

Better?

	Robert Love

diff -urN linux-2.5.6-pre2/arch/alpha/kernel/entry.S linux/arch/alpha/kernel/entry.S
--- linux-2.5.6-pre2/arch/alpha/kernel/entry.S	Fri Mar  1 17:21:14 2002
+++ linux/arch/alpha/kernel/entry.S	Mon Mar  4 17:49:27 2002
@@ -495,7 +495,7 @@
 	ret	$31,($26),1
 .end alpha_switch_to
 
-#ifdef CONFIG_SMP
+#if CONFIG_SMP || CONFIG_PREEMPT
 .globl  ret_from_fork
 .align 3
 .ent ret_from_fork
diff -urN linux-2.5.6-pre2/arch/i386/kernel/entry.S linux/arch/i386/kernel/entry.S
--- linux-2.5.6-pre2/arch/i386/kernel/entry.S	Tue Feb 19 21:10:58 2002
+++ linux/arch/i386/kernel/entry.S	Mon Mar  4 17:48:32 2002
@@ -195,7 +195,7 @@
 

 ENTRY(ret_from_fork)
-#if CONFIG_SMP
+#if CONFIG_SMP || CONFIG_PREEMPT
 	call SYMBOL_NAME(schedule_tail)
 #endif
 	GET_THREAD_INFO(%ebx)
diff -urN linux-2.5.6-pre2/arch/ppc/kernel/entry.S linux/arch/ppc/kernel/entry.S
--- linux-2.5.6-pre2/arch/ppc/kernel/entry.S	Tue Feb 19 21:10:59 2002
+++ linux/arch/ppc/kernel/entry.S	Mon Mar  4 17:48:41 2002
@@ -343,7 +343,7 @@
 
 	.globl	ret_from_fork
 ret_from_fork:
-#ifdef CONFIG_SMP
+#if CONFIG_SMP || CONFIG_PREEMPT
 	bl	schedule_tail
 #endif
 	rlwinm	r3,r1,0,0,18
diff -urN linux-2.5.6-pre2/arch/ppc64/kernel/entry.S linux/arch/ppc64/kernel/entry.S
--- linux-2.5.6-pre2/arch/ppc64/kernel/entry.S	Tue Feb 19 21:10:53 2002
+++ linux/arch/ppc64/kernel/entry.S	Mon Mar  4 17:52:16 2002
@@ -311,7 +311,7 @@
 	blr
 
 _GLOBAL(ret_from_fork)
-#ifdef CONFIG_SMP
+#if CONFIG_SMP || CONFIG_PREEMPT
 	bl	.schedule_tail
 #endif
 	clrrdi	r4,r1,THREAD_SHIFT
diff -urN linux-2.5.6-pre2/arch/s390/kernel/entry.S linux/arch/s390/kernel/entry.S
--- linux-2.5.6-pre2/arch/s390/kernel/entry.S	Tue Feb 19 21:10:57 2002
+++ linux/arch/s390/kernel/entry.S	Mon Mar  4 17:48:12 2002
@@ -295,7 +295,7 @@
         stosm   24(%r15),0x03     # reenable interrupts
         sr      %r0,%r0           # child returns 0
         st      %r0,SP_R2(%r15)   # store return value (change R2 on stack)
-#ifdef CONFIG_SMP
+#if CONFIG_SMP || CONFIG_PREEMPT
         l       %r1,BASED(.Lschedtail)
 	la      %r14,BASED(sysc_return)
         br      %r1               # call schedule_tail, return to sysc_return
@@ -896,7 +896,7 @@
 #error .Ltrace:       .long  syscall_trace
 .Lvfork:       .long  sys_vfork
 
-#ifdef CONFIG_SMP
+#if CONFIG_SMP || CONFIG_PREEMPT
 .Lschedtail:   .long  schedule_tail
 #endif
 
diff -urN linux-2.5.6-pre2/arch/s390x/kernel/entry.S linux/arch/s390x/kernel/entry.S
--- linux-2.5.6-pre2/arch/s390x/kernel/entry.S	Tue Feb 19 21:10:58 2002
+++ linux/arch/s390x/kernel/entry.S	Mon Mar  4 17:53:31 2002
@@ -280,7 +280,7 @@
         GET_CURRENT               # load pointer to task_struct to R9
         stosm   48(%r15),0x03     # reenable interrupts
 	xc      SP_R2(8,%r15),SP_R2(%r15) # child returns 0
-#ifdef CONFIG_SMP
+#if CONFIG_SMP || CONFIG_PREEMPT
 	larl    %r14,sysc_return
         jg      schedule_tail     # return to sysc_return
 #else
diff -urN linux-2.5.6-pre2/kernel/sched.c linux/kernel/sched.c
--- linux-2.5.6-pre2/kernel/sched.c	Fri Mar  1 17:21:16 2002
+++ linux/kernel/sched.c	Mon Mar  4 17:54:00 2002
@@ -397,7 +397,7 @@
 			p->sleep_avg) / (EXIT_WEIGHT + 1);
 }
 
-#if CONFIG_SMP
+#if CONFIG_SMP || CONFIG_PREEMPT
 asmlinkage void schedule_tail(void)
 {
 	spin_unlock_irq(&this_rq()->lock);


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

* Re: [PATCH] 2.5: preemptive kernel on UP
  2002-03-05  1:55         ` Alan Cox
@ 2002-03-05  1:43           ` Robert Love
  2002-03-05  4:40             ` Ben Clifford
  2002-03-05  1:56           ` yodaiken
  1 sibling, 1 reply; 11+ messages in thread
From: Robert Love @ 2002-03-05  1:43 UTC (permalink / raw)
  To: Alan Cox; +Cc: Russell King, linux-kernel

On Mon, 2002-03-04 at 20:55, Alan Cox wrote:

> try
> 
> #if defined(a) || defined(b)

Is that needed since the .config is defined to 1 and 0 in autoconf.h?

> Interesting that the difference pre-empt makes is so large you didnt notice
> you hadn't re-enabled it ;)

The above fix isn't needed for i386 ... and I noticed the problem in the
first place because performance was odd.

	Robert Love


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

* Re: [PATCH] 2.5: preemptive kernel on UP
  2002-03-05  0:58       ` Robert Love
@ 2002-03-05  1:55         ` Alan Cox
  2002-03-05  1:43           ` Robert Love
  2002-03-05  1:56           ` yodaiken
  0 siblings, 2 replies; 11+ messages in thread
From: Alan Cox @ 2002-03-05  1:55 UTC (permalink / raw)
  To: Robert Love; +Cc: Russell King, linux-kernel

> Better?

Not really

> +#if CONFIG_SMP || CONFIG_PREEMPT

#if [expression]

try

#if defined(a) || defined(b)

Interesting that the difference pre-empt makes is so large you didnt notice
you hadn't re-enabled it ;)

Alan
--
   "Nothing would please me more than being able to hire ten programmers 
      and deluge the hobby market with good software." -- Bill Gates 1976

   We are still waiting ....


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

* Re: [PATCH] 2.5: preemptive kernel on UP
  2002-03-05  1:55         ` Alan Cox
  2002-03-05  1:43           ` Robert Love
@ 2002-03-05  1:56           ` yodaiken
  1 sibling, 0 replies; 11+ messages in thread
From: yodaiken @ 2002-03-05  1:56 UTC (permalink / raw)
  To: Alan Cox; +Cc: Robert Love, Russell King, linux-kernel

On Tue, Mar 05, 2002 at 01:55:05AM +0000, Alan Cox wrote:
>    "Nothing would please me more than being able to hire ten programmers 
>       and deluge the hobby market with good software." -- Bill Gates 1976
> 
>    We are still waiting ....

After Bill, the deluge.

-- 
---------------------------------------------------------
Victor Yodaiken 
Finite State Machine Labs: The RTLinux Company.
 www.fsmlabs.com  www.rtlinux.com


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

* Re: [PATCH] 2.5: preemptive kernel on UP
  2002-03-05  1:43           ` Robert Love
@ 2002-03-05  4:40             ` Ben Clifford
  0 siblings, 0 replies; 11+ messages in thread
From: Ben Clifford @ 2002-03-05  4:40 UTC (permalink / raw)
  To: Robert Love; +Cc: linux-kernel

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


Robert,

In one message you wrote:

> Patch [...] is critical for all UP+preempt users.

and in another (in the same thread) you write:

> The above fix isn't needed for i386

I don't understand what to do in the UP i386 case - apply or not apply?

I suspect I'm misunderstanding what you mean by "the above fix".

Ben

- -- 
Ben Clifford     benc@hawaga.org.uk     GPG: 30F06950

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE8hEw+sYXoezDwaVARAmByAJ4iW2lVfJO61hRoAYmwige/7fyY3ACfS7Lk
ytnH2rCLgTvKgchWtt3cvVw=
=tb/c
-----END PGP SIGNATURE-----


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

* Re: [PATCH] 2.5: preemptive kernel on UP
  2002-03-05  0:11 [PATCH] 2.5: preemptive kernel on UP Robert Love
  2002-03-05  0:43 ` Russell King
@ 2002-03-06 19:17 ` george anzinger
  2002-03-06 20:21   ` Robert Love
  1 sibling, 1 reply; 11+ messages in thread
From: george anzinger @ 2002-03-06 19:17 UTC (permalink / raw)
  To: Robert Love; +Cc: linux-kernel

Robert Love wrote:
> 
> During 2.5.5-pre, an optimization was made that removed schedule_tail
> from UP kernels.  This causes the initial preempt_count of a new task,
> which starts at 1, to never decrement to zero and thus never become
> preemptible.
> 
> Thanks to everyone who pointed out the lousy performance - it took
> awhile to find but it should be fixed now.  Please comment if not.
> 
> Patch is against 2.5.6-pre2 and is critical for all UP+preempt users.

With out a lot of looking, wouldn't it be easier to just change fork?

-g
> 
>         Robert Love
> 
> diff -urN linux-2.5.6-pre2/arch/alpha/kernel/entry.S linux/arch/alpha/kernel/entry.S
> --- linux-2.5.6-pre2/arch/alpha/kernel/entry.S  Fri Mar  1 17:21:14 2002
> +++ linux/arch/alpha/kernel/entry.S     Mon Mar  4 17:49:27 2002
> @@ -495,7 +495,7 @@
>         ret     $31,($26),1
>  .end alpha_switch_to
> 
> -#ifdef CONFIG_SMP
> +#ifdef CONFIG_SMP || CONFIG_PREEMPT
>  .globl  ret_from_fork
>  .align 3
>  .ent ret_from_fork
> diff -urN linux-2.5.6-pre2/arch/i386/kernel/entry.S linux/arch/i386/kernel/entry.S
> --- linux-2.5.6-pre2/arch/i386/kernel/entry.S   Tue Feb 19 21:10:58 2002
> +++ linux/arch/i386/kernel/entry.S      Mon Mar  4 17:48:32 2002
> @@ -195,7 +195,7 @@
> 
> 
>  ENTRY(ret_from_fork)
> -#if CONFIG_SMP
> +#if CONFIG_SMP || CONFIG_PREEMPT
>         call SYMBOL_NAME(schedule_tail)
>  #endif
>         GET_THREAD_INFO(%ebx)
> diff -urN linux-2.5.6-pre2/arch/ppc/kernel/entry.S linux/arch/ppc/kernel/entry.S
> --- linux-2.5.6-pre2/arch/ppc/kernel/entry.S    Tue Feb 19 21:10:59 2002
> +++ linux/arch/ppc/kernel/entry.S       Mon Mar  4 17:48:41 2002
> @@ -343,7 +343,7 @@
> 
>         .globl  ret_from_fork
>  ret_from_fork:
> -#ifdef CONFIG_SMP
> +#ifdef CONFIG_SMP || CONFIG_PREEMPT
>         bl      schedule_tail
>  #endif
>         rlwinm  r3,r1,0,0,18
> diff -urN linux-2.5.6-pre2/arch/ppc64/kernel/entry.S linux/arch/ppc64/kernel/entry.S
> --- linux-2.5.6-pre2/arch/ppc64/kernel/entry.S  Tue Feb 19 21:10:53 2002
> +++ linux/arch/ppc64/kernel/entry.S     Mon Mar  4 17:52:16 2002
> @@ -311,7 +311,7 @@
>         blr
> 
>  _GLOBAL(ret_from_fork)
> -#ifdef CONFIG_SMP
> +#ifdef CONFIG_SMP || CONFIG_PREEMPT
>         bl      .schedule_tail
>  #endif
>         clrrdi  r4,r1,THREAD_SHIFT
> diff -urN linux-2.5.6-pre2/arch/s390/kernel/entry.S linux/arch/s390/kernel/entry.S
> --- linux-2.5.6-pre2/arch/s390/kernel/entry.S   Tue Feb 19 21:10:57 2002
> +++ linux/arch/s390/kernel/entry.S      Mon Mar  4 17:48:12 2002
> @@ -295,7 +295,7 @@
>          stosm   24(%r15),0x03     # reenable interrupts
>          sr      %r0,%r0           # child returns 0
>          st      %r0,SP_R2(%r15)   # store return value (change R2 on stack)
> -#ifdef CONFIG_SMP
> +#ifdef CONFIG_SMP || CONFIG_PREEMPT
>          l       %r1,BASED(.Lschedtail)
>         la      %r14,BASED(sysc_return)
>          br      %r1               # call schedule_tail, return to sysc_return
> @@ -896,7 +896,7 @@
>  #error .Ltrace:       .long  syscall_trace
>  .Lvfork:       .long  sys_vfork
> 
> -#ifdef CONFIG_SMP
> +#ifdef CONFIG_SMP || CONFIG_PREEMPT
>  .Lschedtail:   .long  schedule_tail
>  #endif
> 
> diff -urN linux-2.5.6-pre2/arch/s390x/kernel/entry.S linux/arch/s390x/kernel/entry.S
> --- linux-2.5.6-pre2/arch/s390x/kernel/entry.S  Tue Feb 19 21:10:58 2002
> +++ linux/arch/s390x/kernel/entry.S     Mon Mar  4 17:53:31 2002
> @@ -280,7 +280,7 @@
>          GET_CURRENT               # load pointer to task_struct to R9
>          stosm   48(%r15),0x03     # reenable interrupts
>         xc      SP_R2(8,%r15),SP_R2(%r15) # child returns 0
> -#ifdef CONFIG_SMP
> +#ifdef CONFIG_SMP || CONFIG_PREEMPT
>         larl    %r14,sysc_return
>          jg      schedule_tail     # return to sysc_return
>  #else
> diff -urN linux-2.5.6-pre2/kernel/sched.c linux/kernel/sched.c
> --- linux-2.5.6-pre2/kernel/sched.c     Fri Mar  1 17:21:16 2002
> +++ linux/kernel/sched.c        Mon Mar  4 17:54:00 2002
> @@ -397,7 +397,7 @@
>                         p->sleep_avg) / (EXIT_WEIGHT + 1);
>  }
> 
> -#if CONFIG_SMP
> +#if CONFIG_SMP || CONFIG_PREEMPT
>  asmlinkage void schedule_tail(void)
>  {
>         spin_unlock_irq(&this_rq()->lock);
> 
> -
> 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/

-- 
George           george@mvista.com
High-res-timers: http://sourceforge.net/projects/high-res-timers/
Real time sched: http://sourceforge.net/projects/rtsched/

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

* Re: [PATCH] 2.5: preemptive kernel on UP
  2002-03-06 19:17 ` george anzinger
@ 2002-03-06 20:21   ` Robert Love
  0 siblings, 0 replies; 11+ messages in thread
From: Robert Love @ 2002-03-06 20:21 UTC (permalink / raw)
  To: george anzinger; +Cc: linux-kernel

On Wed, 2002-03-06 at 14:17, george anzinger wrote:

> With out a lot of looking, wouldn't it be easier to just change fork?

Don't we need to unlock the rq regardless of what fork does?

Also, the alternative would be to set preempt_count to 0 if
CONFIG_PREEMPT and 1 if CONFIG_PREEMPT && CONFIG_SMP.  I figured Linus
would balk at that sort #if/#else in do_fork.  And, even then, is it
safe to start the task with a preempt_count of 0?

	Robert Love


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

end of thread, other threads:[~2002-03-06 20:21 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-03-05  0:11 [PATCH] 2.5: preemptive kernel on UP Robert Love
2002-03-05  0:43 ` Russell King
2002-03-05  0:51   ` Robert Love
2002-03-05  0:53     ` Russell King
2002-03-05  0:58       ` Robert Love
2002-03-05  1:55         ` Alan Cox
2002-03-05  1:43           ` Robert Love
2002-03-05  4:40             ` Ben Clifford
2002-03-05  1:56           ` yodaiken
2002-03-06 19:17 ` george anzinger
2002-03-06 20:21   ` Robert Love

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox