On 20.09.19 16:23, Pierre FICHEUX wrote:
Thx for the answer bu I don't understand the first sentence (because of my  bad english :))

What dou you mean with "Xenomai 3 prefers the RT patch of a RTDM callback over the NRT if the caller is
a real-time task." ? What is a "patch of RTDM callback" ??

I actually have to correct myself: Since "cobalt/syscalls: allow for handing over mode selection to syscall handlers" (predates v3.0.3), RTDM entry points are supposed to have to original behavior again (call driver handler corresponding to current caller mode first, then switch if handler returns -ENOSYS).

Maybe we need to look into your concrete case again if something else changes the migration pattern.

Jan


Le ven. 20 sept. 2019 à 15:45, Jan Kiszka <[email protected] <mailto:[email protected]>> a écrit :

    On 20.09.19 15:34, Pierre FICHEUX via Xenomai wrote:
     > Hi all,
     >
     > I've been using RTDM _rt / _nrt functions for a long time with Xenomai
     > 2.6.x but it seems not to work (the same way ?) with Xenomai 3 (tested 
with
     > several versions up to 3.0.8). Actually the _nrt driver function is never
     > called (_rt is always called...). I wrote a simple example for Xeno 2 and
     > Xeno 3 available here:
     >
     > https://github.com/pficheux/xenomai_examples.git
     >
     > Here is the test on Raspberry Pi 3 (Xeno 3).
     >
     > # insmod rtdm_test.ko
     >
     > # ./xenomai_test
     >
     > [   47.661245] RTDM open:.
     >
     > [   47.667473] ioctl: RT
     >
     > [   47.672674] ioctl: RT
     >
     > [   48.667479] ioctl: RT
     >
     > [   48.678078] ioctl: RT
     >
     > [   49.667463] ioctl: RT
     >
     > [   49.683076] ioctl: RT
     >
     > [   50.667463] ioctl: RT
     >
     > [   50.687868] ioctl: RT
     >
     >
     > Of course it works fine with Xenomai 2 (on Pi B+) :
     >
     > # insmod rtdm_test.ko
     >
     > # ./xenomai_test
     >
     > [  753.614275] RTDM open
     >
     > [  753.632852] ioctl: RT
     >
     > [  753.636779] ioctl: NRT
     >
     > [  755.632839] ioctl: RT
     >
     > [  755.640252] ioctl: NRT
     >
     > [  756.632841] ioctl: RT
     >
     > [  757.632838] ioctl: RT
     >
     > [  757.643779] ioctl: NRT
     >
     > [  758.632836] ioctl: RT
     >
     > Thx by advance for your help
     >

    Xenomai 3 prefers the RT patch of a RTDM callback over the NRT if the 
caller is
    a real-time task. Xenomai 2 had an adaptive behavior where the current 
state of
    the caller defined that. This is a problem I also ran into before and 
proposed
    to revert to the old behavior (in fact, we do that in one internal 
deployment).
    But there is also the point that preferring RT over NRT makes sense for many
    scenarios.

    Discussing this with Philippe back then on the list (I do not find the
    reference
    ATM), we came to the conclusion that the better answer is to allow the
    driver to
    declare which particular behavior a callback should have - in contrast to 
doing
    that in one way or the other at the top level, ie. on syscall entry of ioctl
    etc. But I do not have a design for that yet, and I didn't want to delay the
    3.1
    release further to finish that first.

    What we could consider for 3.1 is adding a compile-time configurable to
    re-enable the old behavior at syscall level when a user needs it. Then we 
could
    later on (3.2) push that properly to the driver level and remove the control
    again.

    Jan

-- Siemens AG, Corporate Technology, CT RDA IOT SES-DE
    Corporate Competence Center Embedded Linux



--

Pierre FICHEUX -/- CTO Smile ECS, France -\[email protected]  
<mailto:[email protected]>
                              http://www.smile.fr  <http://www.smile.fr/>
                              https://smile.eu/fr/offres/embarque-iot
I would love to change the world, but they won't give me the source code


--
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux

Reply via email to