Hi Daniel,

Some comments about the Adeos patch for the i.MX21/CSB535FS board. The inlined 
patch
has been rebuilt by diff'ing the vanilla Adeos 1.2-00 support with yours.

> --- linux-2.6.14/arch/arm/kernel/ipipe-core.c      2006-04-21 
16:17:02.000000000 +0200
> +++ linux-2.6.14-heig/arch/arm/kernel/ipipe-core.c 2006-04-21 
15:33:47.000000000 +0200
> @@ -22,6 +22,12 @@
>   * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
>   *
>   * Architecture-dependent I-PIPE core support for ARM.
> + *
> + * April 2006 :
> + * Adapted to ARM9 i.MX21/CSB535FS board with Xenomai by S.Gerber, 
G.Boutillier and D.Rossier
> + * University of Applied Sciences Western Switzerland
> + * Reconfigurable & Embedded Digital Systems, REDS Institute
> + *
>   */
>
>  #include <linux/config.h>
> @@ -320,11 +326,19 @@ static void __ipipe_set_decr(void)
>  int ipipe_tune_timer(unsigned long ns, int flags)
>  {
>    unsigned long x, ticks;
> +  unsigned long us;
>
>    if (flags & IPIPE_RESET_TIMER)
>            ticks = __ipipe_mach_ticks_per_jiffy;
>    else {
> -          ticks = ns * __ipipe_mach_ticks_per_jiffy / (1000000000 / HZ);
> +          
> +          /*
> +           * FIXME : Temporary convert ns to us. With nanosecondes we have a 
problem
> +                 *         with overflow.
> +           *         ticks = ns * __ipipe_mach_ticks_per_jiffy / (1000000000 
/ HZ);
> +           */
> +          us = ns / 1000;
> +          ticks = ((us * __ipipe_mach_ticks_per_jiffy) / 10000);
>

This change is going to be wrong when CONFIG_HZ != 1000,
this is why HZ should remain in the picture. This said, the original expression 
looks
overly complicated, something like the following should do without risking the 
overflow:

-               ticks = ns * __ipipe_mach_ticks_per_jiffy / (1000000000 / HZ);
+               ticks = ns / (TICKS_PER_uSEC * 1000);

>            if (ticks > __ipipe_mach_ticks_per_jiffy)
>                    return -EINVAL;

> diff -uNrp linux-2.6.14/arch/arm/kernel/process.c 
linux-2.6.14-heig/arch/arm/kernel/process.c
> --- linux-2.6.14/arch/arm/kernel/process.c 2006-04-21 16:17:02.000000000 +0200
> +++ linux-2.6.14-heig/arch/arm/kernel/process.c    2006-04-21 
15:33:47.000000000 +0200
> @@ -7,6 +7,12 @@
>   * This program is free software; you can redistribute it and/or modify
>   * it under the terms of the GNU General Public License version 2 as
>   * published by the Free Software Foundation.
> + *
> + * April 2006 :
> + * Adapted to ARM9 i.MX21/CSB535FS board with Xenomai by S.Gerber, 
G.Boutillier and D.Rossier
> + * University of Applied Sciences Western Switzerland
> + * Reconfigurable & Embedded Digital Systems, REDS Institute
> + *
>   */
>  #include <stdarg.h>
>
> @@ -111,7 +117,14 @@ void cpu_idle(void)
>            preempt_disable();
>            leds_event(led_idle_start);
>            while (!need_resched())
> +/*
> + * Width idle -> latenca of interrupts
> + */
> +#ifndef CONFIG_IPIPE
>                    idle();
> +#else
> +                  ;
> +#endif

Ouch. It would be saner to implement the idle mode switch one could pass
as a boot argument to the kernel (e.g. arch/i386/kernel/process.c),
accepting "poll" or "default", instead of hard-wiring the poll mode.

>            leds_event(led_idle_end);
>            preempt_enable();
>            schedule();
> diff -uNrp linux-2.6.14/init/Kconfig linux-2.6.14-heig/init/Kconfig
> --- linux-2.6.14/init/Kconfig      2006-04-21 16:17:02.000000000 +0200
> +++ linux-2.6.14-heig/init/Kconfig 2006-04-21 15:34:01.000000000 +0200
> @@ -502,3 +502,20 @@ config STOP_MACHINE
>    help
>      Need stop_machine() primitive.
>  endmenu
> +
> +menu "Real-time sub-system"
> +

The Xenomai-related stuff does not belong to the Adeos patch.

--

Philippe.

_______________________________________________
Adeos-main mailing list
[email protected]
https://mail.gna.org/listinfo/adeos-main

Reply via email to