Re: MIPS: Test reault for enable interrupts before WAIT instruction patch

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

 



On 05/06/2013 11:30 PM, EUNBONG SONG wrote:
> 
> Hello. I  tested with two patches.
> The first one is thomas gleixner's patch. The patch is as follow.
> This patch works well without any problem.

You don't need them both.  When we fix it, it will be one or the other,
not both.


> 
> Index: linux-2.6/arch/mips/kernel/process.c
> ===================================================================
> --- linux-2.6.orig/arch/mips/kernel/process.c
> +++ linux-2.6/arch/mips/kernel/process.c
> @@ -50,13 +50,18 @@ void arch_cpu_idle_dead(void)
>   }
>   #endif
> 
> -void arch_cpu_idle(void)
> +static void smtc_idle_hook(void)
>   {
>   #ifdef CONFIG_MIPS_MT_SMTC
>          extern void smtc_idle_loop_hook(void);
> -
>          smtc_idle_loop_hook();
>   #endif
> +}
> +
> +void arch_cpu_idle(void)
> +{
> +       local_irq_enable();
> +       smtc_idle_hook();
>          if (cpu_wait)
>                  (*cpu_wait)();
>          else

Although I wrote the other patch, I now think that Thomas Gleixner's
patch (above), is the best option.

There are many cpu_wait() implementations.  Fixing a bunch of different
assembly implementations, most of which I cannot test, is a recipe for
disaster.


> --
> 
> The second one is david daney's patch.  The patch is as follow.
> arch/mips/kernel/genex.S | 7 ++++---
>   1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S
> index ecb347c..57cda9a 100644
> --- a/arch/mips/kernel/genex.S
> +++ b/arch/mips/kernel/genex.S
> @@ -132,12 +132,13 @@ LEAF(r4k_wait)
>          .set    noreorder
>          /* start of rollback region */
>          LONG_L  t0, TI_FLAGS($28)
> -       nop
>          andi    t0, _TIF_NEED_RESCHED
>          bnez    t0, 1f
>           nop
> -       nop
> -       nop
> +       /* Enable interrupts so WAIT will complete */
> +       mfc0    t0, CP0_STATUS
> +       ori     t0, ST0_IE
> +       mtc0    t0, CP0_STATUS
>          .set    mips3
>          wait
>          /* end of rollback region (the region size must be power of two) */
> 
> After apply this patch. I got two error message.
> The first one is as follow
> [  124.661211] Checking for the daddi bug... no.
> [  124.665737] ------------[ cut here ]------------
> [  124.670187] WARNING: at kernel/cpu/idle.c:96 cpu_startup_entry+0x150/0x178()
> [  124.677209] Modules linked in:
> [  124.680251] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.9.0+ #40
> [  124.686237] Stack : 0000000000000004 0000000000000034 ffffffff80fa0000 ffffffff80292558
>            0000000000000000 ffffffff80fa0000 0000000000000001 ffffffff80293810
>            0000000000000000 0000000000000000 ffffffff81080000 ffffffff81080000
>            ffffffff80e2acf0 ffffffff80f8f977 ffffffff80f8fa80 ffffffff80e31730
>            0000000000000001 0000000000000004 ffffffff00000000 0000000000000004
>            ffffffffc05633f0 ffffffff806ef728 ffffffff80f57d08 ffffffff80290a74
>            ffffffffc05633f0 ffffffff80293c40 000000000000003e ffffffff80e2acf0
>            0000000000000000 ffffffff80f57c30 00ffffff80f8fdc0 ffffffff802908c0
>            0000000000000000 0000000000000000 0000000000000000 0000000000000000
>            0000000000000000 ffffffff80272498 0000000000000000 0000000000000000
>            ...
> [  124.751163] Call Trace:
> [  124.753599] [<ffffffff80272498>] show_stack+0x68/0x80
> [  124.758634] [<ffffffff802908c0>] warn_slowpath_common+0x78/0xa8
> [  124.764533] [<ffffffff802d4448>] cpu_startup_entry+0x150/0x178
> [  124.770351] [<ffffffff80fd6b04>] start_kernel+0x440/0x45c
> [  124.775728]
> [  124.777219] ---[ end trace 9179e654e5693e72 ]---
> 
> After boot process is done the follow error message is printed periodically.
> 
> [  284.751007] INFO: rcu_preempt detected stalls on CPUs/tasks: { 6} (detected by 1, t=14712 jiffies, g=18446744073709551344, c=18446744073709551343, q=2437)
> [  284.764878] Task dump for CPU 6:
> [  284.768105] swapper/6       R  running task        0     0      1 0x00100000
> [  284.775174] Stack : 0000005311112000 ffffffff80f60000 ffffffff80f60000 a800000001d2d950
>            0000000000000018 ffffffff81080000 ffffffff81080000 0000000000000000
>            ffffffff81010000 ffffffff8030893c 4256e5715da6083d 800000040f800000
>            0000000000000018 ffffffff81080000 ffffffff81080000 ffffffff80264f3c
>            ffffffff80e31730 0000000000000000 ffffffff80e31730 ffffffff80f90000
>            ffffffff80fd0000 ffffffff8026c760 0000000000000000 0000000010008ce1
>            0000000000100000 a8000000414e4010 ffffffff80f8bb18 0000000000000000
>            0000005311112000 0000000000000001 0000000000000001 0000000000000000
>            ffffffff80f8bc58 a800000001d32c60 a8000000414e7fe0 0000000000008c00
>            a80000003f7d8000 0000000000000000 ffffffff80fd0000 ffffffff80e31730
>            ...
> [  284.840704] Call Trace:
> [  284.843153] [<ffffffff806f1a48>] __schedule+0x3b0/0x938
> [  284.848377]
> 
> 
> Thanks
> 




[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux