[RTnet-users] Re: userspace support for fusion
Brought to you by:
bet-frogger,
kiszka
|
From: Philippe G. <rp...@xe...> - 2005-04-21 16:30:41
|
Hi Jan,
Jan Kiszka wrote:
> Hi,
>
> RTnet just gained userspace support under RTAI/fusion (tested with
> latest fusion-CVS), see the SVN. This is more a less a hack to the
> existing RTDM port for fusion (no library, just ugly static-inlines),
> but it is not intended to stay for long. On the mid-term, it is planned
> to merge RTDM into the official fusion branch anyhow,
Confirmed here, FWIW.
> so this version
> can be seen as a first (usable!) demonstration of the functionality.
>
> I also ported two examples to fusion, namely the interface lister
> rtnet_ifs and the ip-fragmentation example frag-ip. Both work smoothly,
> and demonstrate the usage of RTnet in fusion userspace quite well (I
> hope). There is one tricky point again, common to both classic and
> fusion: automatic hard/soft respectively primary/secondary mode
> switching of threads. See the hack I had to add to frag-ip in order to
> switch back after printing some texts. RTnet's send/receive functions
> always require hard/primary context to execute! This is an issue we have
> to think about again when integrating RTDM into fusion.
>
I'd suggest this to solve the issue:
--- ./rtnet/rtai_rtdm/rtdm.c~ 2005-04-21 18:05:36.000000000 +0200
+++ ./rtnet/rtai_rtdm/rtdm.c 2005-04-21 18:20:03.000000000 +0200
@@ -966,8 +966,8 @@
[_RTDM_IOCTL] = { sys_rtdm_ioctl, __xn_exec_current },
[_RTDM_READ] = { sys_rtdm_read, __xn_exec_current },
[_RTDM_WRITE] = { sys_rtdm_write, __xn_exec_current },
- [_RTDM_RECVMSG] = { sys_rtdm_recvmsg, __xn_exec_current },
- [_RTDM_SENDMSG] = { sys_rtdm_sendmsg, __xn_exec_current },
+ [_RTDM_RECVMSG] = { sys_rtdm_recvmsg, __xn_exec_primary },
+ [_RTDM_SENDMSG] = { sys_rtdm_sendmsg, __xn_exec_primary },
};
This implies that callers must be fusion RT tasks in user-space like it
seems reading the example. If not, i.e. would any Linux task be able to
call these services into the RTAI domain, then using __xn_exec_histage
instead would do.
> Furthermore, I was not able to trigger any hidden RTAI problems under
> fusion - which is also a big step forward compared to the situation with
> RTAI <= 3.1! I haven't recently tested 3.2 with RTnet, but most
> scheduler issues seem to be fixed there as well the time I tried with
> old magma. However, any new userspace projects on top of RTnet should
> definitely try fusion first, it has further advantages (e.g. gdb support).
>
> The SVN also include a patch by Fabian Koch to improve the selection
> scheme when loading RT-NICs on system with multiple cards. This scheme
> now works like this: When you have four NICs of the same type
> (theoretical scenario, at least we do not have such a box yet :)), issue
> "insmod <rt_driver> cards=0,1,0,1" to let the real-time NIC driver grab
> only the second and the fourth one. This scheme now works for all
> drivers except the broken ones (MPC drivers and the 3c59x).
>
> There is another patch pending to add (upon request via configure
> switch) IRQ-sharing support with normal Linux, I hope to merge it soon.
> This might conflict with hard RT-requirements (therefore the configure
> switch), but it was suggested by a user who wants to use RTnet in a
> soft-RT scenario without being able to separate the RT-NICs IRQ from
> some Linux IRQ.
>
> Have fun!
> Jan
--
Philippe.
|