Subject: RE: Kernel Preemption patch

From: "Allen Curtis" <[email-masked]>
Date: Sun, 23 Feb 2003 14:33:55 -0800

> Has anyone successfully applied and run the linux kernel
> preemption patch on
> a 2.4.20 kernel. I have the following:
>
> - Latest Denx kernel (2_4_devel) running on 440GP ebony
> - 'preempt-kernel-rml-2.4.20-1.patch' applied to my kernel source
>   (I manually corrected a couple of fails and double checked a few
>    'successfully applied with fuzz' instances when applying the patch).
> - Kernel compiled with 'Kernel preemption =y' in make oldconfig

Yes, but didn't you get any compile errors? There are some missing brackets,
etc. to fix. Check the attached message from this list.

Subject: Re: Is the preemptive kernel patch unsafe for 8xx/PPC?
From: "Eugene Surovegin" <[email-masked]>
To: "Joakim Tjernlund" <[email-masked]>
Cc: <[email-masked]>
Date: Thu, 12 Dec 2002 22:09:48 -0800

Joakim,

At 12:35 PM 12/12/2002, you wrote:
>Was that the 2.4.19-2 patch? What were the bugs and have you fixed them?

I had the following issues with 2.4.19-2 (2.4.20-1 is identical in this
regard):

1) arch/ppc/kernel.entry.S

diff -urN linux-2.4.20/arch/ppc/kernel/entry.S linux/arch/ppc/kernel/entry.S
--- linux-2.4.20/arch/ppc/kernel/entry.S        2002-11-28
18:53:11.000000000 -0500
+++ linux/arch/ppc/kernel/entry.S       2002-12-11 02:34:47.000000000 -0500
@@ -278,6 +278,41 @@
          */
         cmpi    0,r3,0
         beq     restore
+#ifdef CONFIG_PREEMPT
+       lwz     r3,PREEMPT_COUNT(r2)
+       cmpi    0,r3,1
+       bge     ret_from_except
+       lwz     r5,_MSR(r1)
+       andi.   r5,r5,MSR_PR
+       bne     do_signal_ret

     <rest of the diff is skipped>

I had to change the last command to "bne ret_from_except".
I checked MontaVista tree, and they have "ret_from_except" there also.

Without this change trivial code:

   while (true) ;

locked the box completely.

2) include/asm-ppc/pgalloc.h  There are curly brackets missing in
get_pgd_fast()

3) to support 440GP you have to modify
arc/ppc/kernel/irc.c:preempt_intercept:

#if !defined(CONFIG_4xx) || defined(CONFIG_440)
         case 0x900:
#else
         case 0x1000:
#endif

With these changes (an maybe some others I forgot to mention here :),
I have pretty stable preemptable kernel (2.4.19, PPC440GP & 405GP, also
with rtsched patch by George Anzinger)

Thanks,

  Eugene Surovegin <mailto:[email-masked]>