Re: [Xenomai-core] [PATCH] Clean-up powerpc SMP timer support
Heikki Lindholm wrote: Follow-up for the previously posted powerpc SMP timer support code. It's better to let each processor set its own disarm_decr. Additionally, cuts down unused code from UP build. Tested on a G5 SMP & UP. Applied, thanks. -- Philippe.
[Xenomai-core] [PATCH] Clean-up powerpc SMP timer support
Follow-up for the previously posted powerpc SMP timer support code. It's better to let each processor set its own disarm_decr. Additionally, cuts down unused code from UP build. Tested on a G5 SMP & UP. -- Heikki Lindholm diff -Nru xenomai.orig/ksrc/arch/powerpc/hal.c xenomai/ksrc/arch/powerpc/hal.c --- xenomai.orig/ksrc/arch/powerpc/hal.c2005-12-07 19:22:11.0 +0200 +++ xenomai/ksrc/arch/powerpc/hal.c 2005-12-09 16:19:11.110664000 +0200 @@ -131,6 +131,7 @@ } static void rthal_critical_sync(void) { +#ifdef CONFIG_SMP rthal_declare_cpuid; rthal_load_cpuid(); @@ -139,20 +140,24 @@ /* timer_request */ if (rthal_periodic_p[cpuid]) rthal_set_local_cpu_timer(); - + else + disarm_decr[cpuid] = 1; break; case 2: /* timer_release */ if (rthal_periodic_p[cpuid]) rthal_set_local_cpu_timer(); else + disarm_decr[cpuid] = 0; set_dec(tb_ticks_per_jiffy); break; case 3: /* cancel action */ + disarm_decr[cpuid] = 0; break; } +#endif /* CONFIG_SMP */ } static void rthal_smp_relay_tick(unsigned irq, void *cookie) @@ -183,7 +188,6 @@ else { /* Oneshot setup. */ for_each_present_cpu(i) { - disarm_decr[i] = 1; rthal_periodic_p[i] = 0; } #ifdef CONFIG_40x @@ -191,10 +195,10 @@ #endif /* CONFIG_40x */ rthal_timer_program_shot(tb_ticks_per_jiffy); } + rthal_load_cpuid(); + if (err) goto out; - - rthal_load_cpuid(); rthal_irq_release(RTHAL_TIMER_IRQ); if ((err = rthal_irq_request(RTHAL_TIMER_IRQ, @@ -225,14 +229,14 @@ if (rthal_periodic_p[cpuid]) rthal_set_local_cpu_timer(); + else + disarm_decr[cpuid] = 1; out: if (err) { rthal_sync_op = 3; __ipipe_decr_ticks = tb_ticks_per_jiffy; - for_each_present_cpu(i) { - disarm_decr[i] = 0; - } + disarm_decr[cpuid] = 0; } rthal_critical_exit(flags); @@ -253,10 +257,6 @@ if (rthal_periodic_p[cpuid]) rthal_set_cpu_timers_unsafe(0); else { - int i; - for_each_present_cpu(i) { - disarm_decr[i] = 0; - } #ifdef CONFIG_40x mtspr(SPRN_TCR,mfspr(SPRN_TCR)|TCR_ARE); /* Auto-reload on. */ mtspr(SPRN_PIT,tb_ticks_per_jiffy); @@ -273,6 +273,8 @@ if (rthal_periodic_p[cpuid]) rthal_set_local_cpu_timer(); + else + disarm_decr[cpuid] = 0; rthal_critical_exit(flags); }
Re: [Xenomai-core] [PATCH] Clean-up powerpc SMP timer support
Heikki Lindholm wrote: Follow-up for the previously posted powerpc SMP timer support code. It's better to let each processor set its own disarm_decr. Additionally, cuts down unused code from UP build. Tested on a G5 SMP & UP. Applied, thanks. -- Philippe. ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core
[Xenomai-core] [PATCH] Clean-up powerpc SMP timer support
Follow-up for the previously posted powerpc SMP timer support code. It's better to let each processor set its own disarm_decr. Additionally, cuts down unused code from UP build. Tested on a G5 SMP & UP. -- Heikki Lindholm diff -Nru xenomai.orig/ksrc/arch/powerpc/hal.c xenomai/ksrc/arch/powerpc/hal.c --- xenomai.orig/ksrc/arch/powerpc/hal.c2005-12-07 19:22:11.0 +0200 +++ xenomai/ksrc/arch/powerpc/hal.c 2005-12-09 16:19:11.110664000 +0200 @@ -131,6 +131,7 @@ } static void rthal_critical_sync(void) { +#ifdef CONFIG_SMP rthal_declare_cpuid; rthal_load_cpuid(); @@ -139,20 +140,24 @@ /* timer_request */ if (rthal_periodic_p[cpuid]) rthal_set_local_cpu_timer(); - + else + disarm_decr[cpuid] = 1; break; case 2: /* timer_release */ if (rthal_periodic_p[cpuid]) rthal_set_local_cpu_timer(); else + disarm_decr[cpuid] = 0; set_dec(tb_ticks_per_jiffy); break; case 3: /* cancel action */ + disarm_decr[cpuid] = 0; break; } +#endif /* CONFIG_SMP */ } static void rthal_smp_relay_tick(unsigned irq, void *cookie) @@ -183,7 +188,6 @@ else { /* Oneshot setup. */ for_each_present_cpu(i) { - disarm_decr[i] = 1; rthal_periodic_p[i] = 0; } #ifdef CONFIG_40x @@ -191,10 +195,10 @@ #endif /* CONFIG_40x */ rthal_timer_program_shot(tb_ticks_per_jiffy); } + rthal_load_cpuid(); + if (err) goto out; - - rthal_load_cpuid(); rthal_irq_release(RTHAL_TIMER_IRQ); if ((err = rthal_irq_request(RTHAL_TIMER_IRQ, @@ -225,14 +229,14 @@ if (rthal_periodic_p[cpuid]) rthal_set_local_cpu_timer(); + else + disarm_decr[cpuid] = 1; out: if (err) { rthal_sync_op = 3; __ipipe_decr_ticks = tb_ticks_per_jiffy; - for_each_present_cpu(i) { - disarm_decr[i] = 0; - } + disarm_decr[cpuid] = 0; } rthal_critical_exit(flags); @@ -253,10 +257,6 @@ if (rthal_periodic_p[cpuid]) rthal_set_cpu_timers_unsafe(0); else { - int i; - for_each_present_cpu(i) { - disarm_decr[i] = 0; - } #ifdef CONFIG_40x mtspr(SPRN_TCR,mfspr(SPRN_TCR)|TCR_ARE); /* Auto-reload on. */ mtspr(SPRN_PIT,tb_ticks_per_jiffy); @@ -273,6 +273,8 @@ if (rthal_periodic_p[cpuid]) rthal_set_local_cpu_timer(); + else + disarm_decr[cpuid] = 0; rthal_critical_exit(flags); } ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core