Kernel Preemption patch

brian.auld at adic.com brian.auld at adic.com
Tue Feb 25 02:56:25 EST 2003


Eugene,

Sorry, I'm using microsoft outlook and I can't seem to figure out how to
embedded comments in a satisfactory manner, so I have to write my replies at
the top of email threads all the time...

Below is an excerp from your post below. You include it to show the
redefinition of the line "#if !defined(CONFIG_4xx) || defined(CONFIG_440)".

However, I noticed that your 'preempt_enable' at the bottom of the exerp has
been changed from 'preempt_enable' as in the RML patch, to
'preempt_enable_no_reshed'. What's the reason for this inconsistency?

<----------------- cut ------------------->
#if !defined(CONFIG_4xx) || defined(CONFIG_440)
         case 0x900:
#else
         case 0x1000:
#endif
                 ret = timer_interrupt(regs);
                 break;
         default:
                 BUG();
         }

         preempt_enable_no_resched();
         return ret;
}
#endif /* CONFIG_PREEMPT */
<------------------ cut -------------------->

-- Brian

-----Original Message-----
From: Eugene Surovegin [mailto:ebs at ebshome.net]
Sent: Sunday, February 23, 2003 5:54 PM
To: brian.auld at adic.com
Cc: linuxppc-embedded at lists.linuxppc.org
Subject: Re: Kernel Preemption patch

At 02:28 PM 2/23/2003, brian.auld at adic.com wrote:
>Hello,
>
>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
>
>When I try to boot this kernel, I get the following error:
>
><------- snipped
>Kernel command line: root=/dev/nfs rw
>nfsroot=172.16.77.152:/opt/eldk/ppc_4xx
>ip=172.16.77.155:172.16.77.152::255.255.255.0:EBONY-2::off
>kernel BUG at irq.c:575!
>Oops: Exception in kernel mode, sig: 4
>NIP: C0002B04 XER: 00000000 LR: C0002B04 SP: C0125F50 REGS: c0125ea0 TRAP:
>0700    Not tainted
>MSR: 00001030 EE: 0 PR: 0 FP: 0 ME: 1 IR/DR: 11
>TASK = c0124060[0] 'swapper' Last syscall: 0
>last math 00000000 last altivec 00000000
>PLB0: bear= 0x00008000 acr=   0x9b000000 besr=  0x00000000
>
>GPR00: C0002B04 C0125F50 C0124060 00000019 00001030 00000001 00000020
>C0170000
>GPR08: 000001D8 00000002 00000000 C0125E70 C012A8A8 71000000 07FE7300
>007FFC73
>GPR16: 00000000 00000001 007FFC00 FFFFFFFF 00001032 C0125F60 00000000
>C00017CC
>GPR24: C0002AA0 007FFB90 00000E00 007FFC73 007FFC00 00000000 00000000
>007FFB90
>Call backtrace:
>C0002B04 C00017CC C0133504 C0000224
>Kernel panic: Attempted to kill the idle task!
>In idle task - not syncing
>  <0>Rebooting in 180 seconds..

RML patches doesn't support 2_4_devel tree very well (and especially
PPC440).

If irq.c:575 correspond to preempt_intercept function in your tree, it
should look like:

#ifdef CONFIG_PREEMPT
int
preempt_intercept(struct pt_regs *regs)
{
         int ret;

         preempt_disable();

         switch(regs->trap) {
         case 0x500:
                 ret = do_IRQ(regs);
                 break;
#if !defined(CONFIG_4xx) || defined(CONFIG_440)
         case 0x900:
#else
         case 0x1000:
#endif
                 ret = timer_interrupt(regs);
                 break;
         default:
                 BUG();
         }

         preempt_enable_no_resched();
         return ret;
}
#endif /* CONFIG_PREEMPT */


Please, note additional "defined(CONFIG_440)"

Eugene


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-embedded mailing list