Gilles Chanteperdrix wrote:
> Wolfgang Grandegger wrote:
>> Wolfgang Grandegger wrote:
>>> Hi Gilles,
>>>
>>> Gilles Chanteperdrix wrote:
>>>> Wolfgang Grandegger wrote:
>>>>> I'm also puzzled why pthread_setschedparam() does make a mode switch
>>>>> to secondary mode (sometimes).
>>>> That is normal. The glibc caches threads priority value, so we have to
>>>> call __real_pthread_setschedparam to update them. This issue has been
>>>> solved differently on trunk, but unfortunately, we can not backport this
>>>> modification on v2.4.x branch.
>>> To get you right. With v2.4.x it is not possible with the POSIX skin to
>>> change the priority of a real-time thread in the primary mode without
>>> loosing determinism (because it will switch to secondary mode). What
>>> options do I have?
>> I gave Xenomai trunk a try and pthread_setschedparam() does not switch
>> to secondary mode any more on my PowerPC test system. Nice, I just get
>> an Oops in thread_delete from time to time. More on that issue later.
>> For my ARM i.mx31 system, a need a few patches to get the Xenomai src's
>> compiled:
>>
>> Index: include/asm-generic/bits/bind.h
>> ===================================================================
>> --- include/asm-generic/bits/bind.h  (revision 4450)
>> +++ include/asm-generic/bits/bind.h  (working copy)
>> @@ -72,7 +72,7 @@
>>      err = XENOMAI_SYSCALL1(__xn_sys_current, &current);
>>      if (err) {
>>              fprintf(stderr, "Xenomai: error obtaining handle for current "
>> -                    "thread: %s\n", strerror(err));
>> +                    "thread: %s\n", strerror(-err));
>>              exit(1);
>>      }
>>      __xeno_set_current(current);
>> Index: include/asm-arm/syscall.h
>> ===================================================================
>> --- include/asm-arm/syscall.h        (revision 4450)
>> +++ include/asm-arm/syscall.h        (working copy)
>> @@ -228,7 +228,7 @@
>>      volatile unsigned long long *const tscp = __xn_tscinfo.u.fr.tsc;
>>      volatile unsigned *const counterp = __xn_tscinfo.u.fr.counter;
>>          const unsigned mask = __xn_tscinfo.u.fr.mask;
>> -    register unsigned long long after, before;
>> +    register unsigned long long result;
>>          unsigned counter;
>>  
>>          __asm__ ("ldmia %1, %M0\n": "=r"(result): "r"(tscp), "m"(*tscp));
>>
>>
>> When I then start my application or cyclictest I get:
>>
>> -bash-3.2# ./cyclictest -n 
>> Xenomai: error obtaining handle for current thread: Operation not permitted
>>
>> As the latency program works fine, it seems to be a problem with the
>> POSIX skin. Any idea what it is?
> 
> What version of gcc are you using ? When trying to get xenomai running
> on an ARM platform, I found out that gcc 4.3.1 and 4.3.2 have a bug on
> ARM which thrashes the parameters passed to  some xenomai syscalls.

The new ELDK 4.2 for ARM11 with VFP support [1] uses:

  $ armVFP-linux-gcc --version
  armVFP-linux-gcc (GCC) 4.2.2

Nevertheless, the problems do not show up with Xenomai v2.4.x and
therefore it's unlikely that Xenomai syscalls do not work properly.

[1] http://www.denx.de/en/News/WebHome#NewsEldk42Arm

Wolfgang.



_______________________________________________
Xenomai-help mailing list
Xenomai-help@gna.org
https://mail.gna.org/listinfo/xenomai-help

Reply via email to