From: george anzinger <george@mvista.com>
To: Robert Love <rml@tech9.net>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] 2.5: preemptive kernel on UP
Date: Wed, 06 Mar 2002 11:17:42 -0800 [thread overview]
Message-ID: <3C866B56.AE2F63BD@mvista.com> (raw)
In-Reply-To: <1015287099.865.3.camel@phantasy>
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/
next prev parent reply other threads:[~2002-03-06 19:18 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
2002-03-06 20:21 ` Robert Love
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3C866B56.AE2F63BD@mvista.com \
--to=george@mvista.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rml@tech9.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.