Philippe Gerum wrote:
> 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.
>>
> 
> A common issue happens when pthread_self() is inlined in the syscall arg list.
> Early gcc 4.x for powerpc has this problem; never tried with newer releases, 
> but
> rather made sure to use a temporary variable to pass this value to the 
> syscall.
> 
What happens with gcc 4.3.x really looks like a bug to me, so I filled a
bug report on gcc bugzilla:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38674

We could work around this bug for xenomai syscalls, but it would not be
easy, and we do not know if the bug does not happen anywhere else.

-- 
                                            Gilles.

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

Reply via email to