[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [microblaze-uclinux] BUG: scheduling while atomic: (Kernel 2.6)



Hi, John

After patching, the problem is solved!

regards,
chun yeow

On 7/26/07, John Williams < jwilliams@xxxxxxxxxxxxxx> wrote:
Hi again,

Yeoh Chun Yeow wrote:

> After patching the entry.S, I don't see thje BUG: scheduling problem in
> my compiled kernel (without CONFIG_PREEMPT). However, the ping results
> contain "ping: recvfrom: Invalid argument". Any ideas?

Can you please try the attached patch?

Thanks,

John

Index: linux-2.6.x/arch/microblaze/kernel/setup.c
===================================================================
--- linux-2.6.x/arch/microblaze/kernel/setup.c  (revision 2733)
+++ linux-2.6.x/arch/microblaze/kernel/setup.c  (working copy)
@@ -35,7 +35,6 @@
DEFINE_PER_CPU(unsigned int, ENTRY_SP);        /* Saved SP on kernel entry */
DEFINE_PER_CPU(unsigned int, R11_SAVE);        /* Temp variable for entry */
DEFINE_PER_CPU(unsigned int, CURRENT_SAVE);    /* Saved current pointer */
-DEFINE_PER_CPU(unsigned int, SYSCALL_SAVE);    /* Saved syscall number */

extern void early_printk(const char *fmt, ...);
extern void irq_early_init(void);
@@ -150,7 +149,6 @@
        per_cpu(CURRENT_SAVE,0) = (unsigned long)current;

/*!!!!!!!!!! These two shall be removed in release !!!!!!!!!!!*/
-       per_cpu(SYSCALL_SAVE,0) = 0x0;
        //*((unsigned long *)0x74) = 0x0; /* debug */

        irq_early_init();
Index: linux-2.6.x/arch/microblaze/kernel/signal.c
===================================================================
--- linux-2.6.x/arch/microblaze/kernel/signal.c (revision 2739)
+++ linux-2.6.x/arch/microblaze/kernel/signal.c (working copy)
@@ -455,7 +455,6 @@
        /* fallthrough */
        case -ERESTARTNOINTR:
        do_restart:
-               regs->r12 = get_cpu_var(SYSCALL_SAVE);
                /* offset of 4 bytes to re-execute trap (brki) instruction */
                regs->pc -= 4;
                break;
Index: linux-2.6.x/arch/microblaze/kernel/entry.S
===================================================================
--- linux-2.6.x/arch/microblaze/kernel/entry.S  (revision 3031)
+++ linux-2.6.x/arch/microblaze/kernel/entry.S  (working copy)
@@ -197,7 +197,6 @@
        bri     0

ENTRY(_user_exception)
-       swi     r12, r0, PER_CPU(SYSCALL_SAVE)  /* sys num */
        swi     r1, r0, PER_CPU(ENTRY_SP)       /* save the current sp */
        swi     r11, r0, PER_CPU(R11_SAVE)      /* temporarily save r11 */
        lwi     r11, r0, PER_CPU(KM)            /* load mode indicator */
@@ -557,7 +556,6 @@
        addk    r7, r1, r0

sys_execve_wrapper:
-       swi     r1, r0, PER_CPU(SYSCALL_SAVE)
        brid    sys_execve
        addk    r8, r1, r0