All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
@ 2015-07-13 13:37 Frederik Bayart
  2015-07-14  9:53 ` Philippe Gerum
  0 siblings, 1 reply; 24+ messages in thread
From: Frederik Bayart @ 2015-07-13 13:37 UTC (permalink / raw)
  To: xenomai@xenomai.org

Hallo,

I have problems to bind named semaphores from an external process using
the alchemy API.  Below a detailed description. Does anyone have a suggestion

what could be wrong or what I could do to solve the problem ?
Kind regards,

Frederik

In attachment an example to reproduce my problem (makefile, stest.c).
If you run 'sudo ./stest 1', a named semaphore is created and a task is started
that binds it and perform a p operation. The main task is waiting on CTRL+C,
and then ask the numer of waiters and performs v operations.
If you run 'sudo ./stest 0', the named semaphore is not created, only a task is
started that binds it and perform a p operation.

I start first 'sudo ./stest 1'. The process binds the semaphore and blocks on rt_sem_p.
The content of /var/run/xenomai is :

xenomai/
xenomai/root
xenomai/root/anon@1262
xenomai/root/anon@1262/1262
xenomai/root/anon@1262/system

Now I execute 'sudo ./stest 0' in another shell.
This process blocks on rt_sem_bind, so the semaphore is not found 

The content of /var/run/xenomai is now :
xenomai/
xenomai/root
xenomai/root/anon@1277
xenomai/root/anon@1277/1277
xenomai/root/anon@1277/system
xenomai/root/anon@1262
xenomai/root/anon@1262/1262
xenomai/root/anon@1262/system

If I press CTRL-C on the first process, I get 

stest.c:146: nwaiters = 1
stest.c:147: count = 0
stest.c:152: calling rt_sem_v 1...
stest.c:60: rt_sem_p passed
stest.c:161: rt_sem_v called
stest.c:184: nwaiters = 0
stest.c:185: count = 0


So there is only 1 waiter (because the 2nd process didn't succeed the bind).

I tried the example also on xenomai 2.4.10 and there it's working.

I'm using linux-3.18.12, xenomai-3.0-rc5 (from tarball) and ipipe-core-3.18.12-x86-1.patch
I configured CONFIG_FUSE_FS=m in the kernel (see configuration in attachment), module fuse is loaded.

My linux distribution is debian - jessie. The fuse packages are installed :

ii  fuse             2.9.3-15+b1  amd64    Filesystem in Userspace
ii  gvfs-fuse        1.22.2-1     amd64    userspace virtual filesystem - fuse server
ii  libfuse-dev      2.9.3-15+b1  amd64    Filesystem in Userspace (development)
ii  libfuse2:amd64   2.9.3-15+b1  amd64    Filesystem in Userspace (library)

To build xenomai debian packages, I added following configure options to debian/rules :
--with-core=cobalt --enable-smp --enable-pshared --enable-registry
and then executed `debuild -uc -us`

The output of `xeno-config --info` :

Linux dev-x10sae 3.18.12-x86-64-xeno-3.0.rc5 #1 SMP PREEMPT Fri Jul 10 12:29:14 CEST 2015 x86_64 GNU/Linux
Kernel parameters: BOOT_IMAGE=/boot/vmlinuz-3.18.12-x86-64-xeno-3.0.rc5
root=UUID=fc8ecefa-fc73-487f-a045-cffa99c38a11
ro quiet console=tty0 console=ttyS0,115200n8
I-pipe release #1 detected
Cobalt core 3.0-rc5 detected
Compiler: gcc version 4.9.2 (Debian 4.9.2-10) 
Build args: --prefix=/usr --includedir=/usr/include/xenomai
--mandir=/usr/share/man --with-testdir=/usr/lib/xenomai/testsuite
--with-core=cobalt --enable-smp --enable-pshared --enable-registry
--build x86_64-linux-gnu build_alias=x86_64-linux-gnu

The shared libraries in use :
ldd ./stest
linux-vdso.so.1 (0x00007fff422e5000)
libalchemy.so.0 => /usr/lib/libalchemy.so.0 (0x00007f0da8bf6000)
libcopperplate.so.0 => /usr/lib/libcopperplate.so.0 (0x00007f0da89df000)
libcobalt.so.2 => /usr/lib/libcobalt.so.2 (0x00007f0da87be000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0da85a1000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f0da8399000)
libfuse.so.2 => /lib/x86_64-linux-gnu/libfuse.so.2 (0x00007f0da815a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0da7db1000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0da8e25000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0da7bad000)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: config-3.18.12-x86-64-xeno-3.0.rc5
Type: application/octet-stream
Size: 126458 bytes
Desc: not available
URL: <http://xenomai.org/pipermail/xenomai/attachments/20150713/4f971614/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: makefile
Type: application/octet-stream
Size: 794 bytes
Desc: not available
URL: <http://xenomai.org/pipermail/xenomai/attachments/20150713/4f971614/attachment-0001.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: stest.c
Type: text/x-csrc
Size: 4041 bytes
Desc: not available
URL: <http://xenomai.org/pipermail/xenomai/attachments/20150713/4f971614/attachment.c>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-13 13:37 [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process Frederik Bayart
@ 2015-07-14  9:53 ` Philippe Gerum
  2015-07-15 12:45   ` Frederik Bayart
  0 siblings, 1 reply; 24+ messages in thread
From: Philippe Gerum @ 2015-07-14  9:53 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/13/2015 03:37 PM, Frederik Bayart wrote:
> Hallo,
> 
> I have problems to bind named semaphores from an external process using
> the alchemy API.  Below a detailed description. Does anyone have a suggestion
> 
> what could be wrong or what I could do to solve the problem ?
> Kind regards,
> 
> Frederik
> 
> In attachment an example to reproduce my problem (makefile, stest.c).
> If you run 'sudo ./stest 1', a named semaphore is created and a task is started
> that binds it and perform a p operation. The main task is waiting on CTRL+C,
> and then ask the numer of waiters and performs v operations.
> If you run 'sudo ./stest 0', the named semaphore is not created, only a task is
> started that binds it and perform a p operation.
> 
> I start first 'sudo ./stest 1'. The process binds the semaphore and blocks on rt_sem_p.
> The content of /var/run/xenomai is :
> 

[snip]

The key issue is that multiple programs forming a single application
must belong to the same Xenomai session, for sharing data/objects. The
notion of "session" was introduced by Xenomai 3.

So, all you need to do, is to tell the application bootstrap code about
the session you want to create between several programs, e.g.:

# ./stest --session=foo 1
# ./stest --session=foo 0

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-14  9:53 ` Philippe Gerum
@ 2015-07-15 12:45   ` Frederik Bayart
  2015-07-16 15:35     ` Philippe Gerum
  0 siblings, 1 reply; 24+ messages in thread
From: Frederik Bayart @ 2015-07-15 12:45 UTC (permalink / raw)
  To: xenomai@xenomai.org

> On Tuesday, 14 July 2015, 11:53, Philippe Gerum <rpm@xenomai.org> wrote:
>
>
>On 07/13/2015 03:37 PM, Frederik Bayart wrote:
>
>> Hallo,
>>
>> I have problems to bind named semaphores from an external process using
>> the alchemy API.  Below a detailed description. Does anyone have a suggestion
>>
>> what could be wrong or what I could do to solve the problem ?
>> Kind regards,
>>
>> Frederik
>>
>> In attachment an example to reproduce my problem (makefile, stest.c).
>> If you run 'sudo ./stest 1', a named semaphore is created and a task is started
>> that binds it and perform a p operation. The main task is waiting on CTRL+C,
>> and then ask the numer of waiters and performs v operations.
>> If you run 'sudo ./stest 0', the named semaphore is not created, only a task is
>> started that binds it and perform a p operation.
>>
>> I start first 'sudo ./stest 1'. The process binds the semaphore and blocks on rt_sem_p.
>> The content of /var/run/xenomai is :
>
>>
>
>[snip]
>
>The key issue is that multiple programs forming a single application
>must belong to the same Xenomai session, for sharing data/objects. The
>notion of "session" was introduced by Xenomai 3.
>
>So, all you need to do, is to tell the application bootstrap code about
>the session you want to create between several programs, e.g.:
>
># ./stest --session=foo 1
># ./stest --session=foo 0
>
>-- 
>Philippe.

This works. I still notice 2 issues :

1) If you execute reversely

./stest --session=foo 0
./stest --session=foo 1

The first process binds to the named semaphore which is not yet created. According to the description of rt_sem_bind,  if the object does not exist on entry, the caller may block until a semaphore of the given name is created.

So based on this description, I would I expect that if the second process is started, the first process would bind and continue and blocks in the p operation. The same for the 2nd process. Is this correct ? At the moment, if I start the 2nd process, I get a segfault in rt_sem_create :

[ 9758.887921] [Xenomai] switching main to secondary mode after exception #14 from user-space at 0x7f6ad8c4a43e (pid 9256)
[ 9758.887930] main[9256]: segfault at 7f903bf6e038 ip 00007f6ad8c4a43e sp 00007fffbd2c2eb8 error 6 in libcobalt.so.2.0.0[7f6ad8c3d000+1e000]


2)

The fuse filesystem is not unmounted. This is because in xenomai-3.0-rc5/lib/copperplate/regd/regd.c the fullpath is hardcoded to fusermount and umount

sh: 1: /usr/bin/fusermount: not found
sysregd: create_directory_recursive("/var/run/xenomai/root/stest/system"): Transport endpoint is not connected
sh: 1: /usr/bin/fusermount: not found
sysregd: create_directory_recursive("/var/run/xenomai/root/stest/system"): Transport endpoint is not connected
sh: 1: /usr/bin/fusermount: not found
sysregd: create_directory_recursive("/var/run/xenomai/root/stest/system"): Transport endpoint is not connected
0"602.802| WARNING: [main] cannot connect to registry daemon
0"602.875| WARNING: [main] setup call copperplate failed
0"602.929| BUG in xenomai_init(): [main] initialization failed, EAGAIN

In the code is written :

/usr/bin/fusermount
/usr/bin/umount

However, on debian jessie, these binaries are in /bin, not in /usr/bin.
It's hardcoded, so if I think this is not a configure problem.

I could fixed it, with the diff below. It's not clear to me why access of umount is tested and not from fusermount.


Frederik


--- regd.c.old    2015-07-14 15:58:09.748049358 +0200
+++ regd.c.new    2015-07-15 14:41:52.798401291 +0200
@@ -22,6 +22,7 @@
#include <sys/select.h>
#include <sys/timerfd.h>
#include <sys/un.h>
+#include <linux/limits.h>
#include <signal.h>
#include <stdio.h>
#include <limits.h>
@@ -65,6 +66,8 @@
struct pvholder next;
};

+static char *umount_fullpath = NULL;
+
static DEFINE_PRIVATE_LIST(client_list);

static void usage(void)
@@ -76,6 +79,36 @@
fprintf(stderr, "               [--linger]       disable timed exit on idleness\n");
}

+static char *afullpath(const char *cmd)
+{
+    FILE *fp;
+    char *which_cmd;
+    char path[PATH_MAX];
+    char *fullpath;
+    int len;
+
+    if (asprintf(&which_cmd, "which %s", cmd) == -1)
+        return NULL;
+
+    fp = popen(which_cmd, "r");
+    free(which_cmd);
+    if (fp == NULL)
+        return NULL;
+
+    if (fgets(path, sizeof(path), fp) == NULL) {
+        pclose(fp);
+        return NULL;
+    }
+
+    pclose(fp);
+    len = strlen(path) - 1;
+    if (path[len] == '\n')
+        path[len--] = '\0';
+    fullpath = malloc(len+2);
+    strcpy(fullpath, path);
+    return fullpath;
+}
+
static const struct option options[] = {
{
#define help_opt    0
@@ -279,7 +312,7 @@
if (flags >= 0)
fcntl(2, F_SETFD, flags | FD_CLOEXEC);

-    ret = asprintf(&cmd, "/usr/bin/fusermount -uzq %s", path);
+    ret = asprintf(&cmd, "fusermount -uzq %s", path);
if (ret < 0)
return;

@@ -288,10 +321,10 @@
if (ret != -1 && WIFEXITED(ret) && WEXITSTATUS(ret) == 0)
return;

-    if (access("/usr/bin/umount", X_OK))
+    if (access(umount_fullpath, X_OK))
return;

-    ret = asprintf(&cmd, "/usr/bin/umount -l %s", path);
+    ret = asprintf(&cmd, "%s -l %s", umount_fullpath, path);
if (ret < 0)
return;

@@ -529,6 +562,10 @@
if (rootdir == NULL)
error(1, EINVAL, "--root must be given");

+    umount_fullpath = afullpath("umount");
+    if (umount_fullpath == NULL)
+        error(1, ENOENT, "umount not found in path");
+
memset(&sa, 0, sizeof(sa));
sa.sa_handler = SIG_IGN;
sigaction(SIGCHLD, &sa, NULL);
@@ -544,6 +581,7 @@
bind_socket();
create_system_fs(argv[0], rootdir, flags);
handle_requests();
+    free(umount_fullpath);

return 0;

}


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-15 12:45   ` Frederik Bayart
@ 2015-07-16 15:35     ` Philippe Gerum
  2015-07-28 15:19       ` Frederik Bayart
  0 siblings, 1 reply; 24+ messages in thread
From: Philippe Gerum @ 2015-07-16 15:35 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/15/2015 02:45 PM, Frederik Bayart wrote:
> This works. I still notice 2 issues :
> 
> 1) If you execute reversely
> 
> ./stest --session=foo 0
> ./stest --session=foo 1
> 
> The first process binds to the named semaphore which is not yet created. According to the description of rt_sem_bind,  if the object does not exist on entry, the caller may block until a semaphore of the given name is created.
> 
> So based on this description, I would I expect that if the second process is started, the first process would bind and continue and blocks in the p operation. The same for the 2nd process. Is this correct ? At the moment, if I start the 2nd process, I get a segfault in rt_sem_create :
> 
> [ 9758.887921] [Xenomai] switching main to secondary mode after exception #14 from user-space at 0x7f6ad8c4a43e (pid 9256)
> [ 9758.887930] main[9256]: segfault at 7f903bf6e038 ip 00007f6ad8c4a43e sp 00007fffbd2c2eb8 error 6 in libcobalt.so.2.0.0[7f6ad8c3d000+1e000]
>

Looking at the copperplate code, yep, this definitely can't work. Ok,
queued.

> 
> 2)
> 
> The fuse filesystem is not unmounted. This is because in xenomai-3.0-rc5/lib/copperplate/regd/regd.c the fullpath is hardcoded to fusermount and umount
> 
> I could fixed it, with the diff below. It's not clear to me why access of umount is tested and not from fusermount.
> 

Piping the "which" output seems seriously overkill. Besides, we don't
want to rely on the environment to find those paths, we are running with
supervisor privileges (i.e. we don't want to run what the user tells us
what "umount" should be, but rather what the distro actually says
"umount" is).

Per LSB 3.0, /bin/umount would be the place to find this, so basically,
testing a couple of reasonable locations should be enough.

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-16 15:35     ` Philippe Gerum
@ 2015-07-28 15:19       ` Frederik Bayart
  2015-07-29 10:12         ` Philippe Gerum
  0 siblings, 1 reply; 24+ messages in thread
From: Frederik Bayart @ 2015-07-28 15:19 UTC (permalink / raw)
  To: xenomai@xenomai.org

>> ./stest --session=foo 1
>>
>> The first process binds to the named semaphore which is not yet created. According to the description of rt_sem_bind,  if the object does not exist on entry, the caller may block until a semaphore of the given name is created.
>>
>> So based on this description, I would I expect that if the second process is started, the first process would bind and continue and blocks in the p operation. The same for the 2nd process. Is this correct ? At the moment, if I start the 2nd process, I get a segfault in rt_sem_create :
>>
>> [ 9758.887921] [Xenomai] switching main to secondary mode after exception #14 from user-space at 0x7f6ad8c4a43e (pid 9256)
>> [ 9758.887930] main[9256]: segfault at 7f903bf6e038 ip 00007f6ad8c4a43e sp 00007fffbd2c2eb8 error 6 in libcobalt.so.2.0.0[7f6ad8c3d000+1e000]
>>
>
>Looking at the copperplate code, yep, this definitely can't work. Ok,
>queued.

I noticed also :

 ./stest --session=foo 1
 ./stest --session=foo 0

Both processes are waiting in rt_sem_p . The first process catches SIGINT, the second doesn't. If you press CTRL+C on the second process it stops but also the first process is falling through the rt_sem_p although no rt_sem_v is raised. At that moment no process is pending on rt_sem_p anymore. But if you do then a rt_sem_inquire, nwaiters is still 1.
>
>>
>> 2)
>>
>> The fuse filesystem is not unmounted. This is because in xenomai-3.0-rc5/lib/copperplate/regd/regd.c the fullpath is hardcoded to fusermount and umount
>>
>> I could fixed it, with the diff below. It's not clear to me why access of umount is tested and not from fusermount.
>>
>
>Piping the "which" output seems seriously overkill. Besides, we don't
>want to rely on the environment to find those paths, we are running with
>supervisor privileges (i.e. we don't want to run what the user tells us
>what "umount" should be, but rather what the distro actually says
>"umount" is).
>
>Per LSB 3.0, /bin/umount would be the place to find this, so basically,
>testing a couple of reasonable locations should be enough.
>
>
>-- 
>Philippe.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-28 15:19       ` Frederik Bayart
@ 2015-07-29 10:12         ` Philippe Gerum
  2015-07-29 11:48           ` Frederik Bayart
  0 siblings, 1 reply; 24+ messages in thread
From: Philippe Gerum @ 2015-07-29 10:12 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/28/2015 05:19 PM, Frederik Bayart wrote:
>>> ./stest --session=foo 1
>>>
>>> The first process binds to the named semaphore which is not yet created. According to the description of rt_sem_bind,  if the object does not exist on entry, the caller may block until a semaphore of the given name is created.
>>>
>>> So based on this description, I would I expect that if the second process is started, the first process would bind and continue and blocks in the p operation. The same for the 2nd process. Is this correct ? At the moment, if I start the 2nd process, I get a segfault in rt_sem_create :
>>>
>>> [ 9758.887921] [Xenomai] switching main to secondary mode after exception #14 from user-space at 0x7f6ad8c4a43e (pid 9256)
>>> [ 9758.887930] main[9256]: segfault at 7f903bf6e038 ip 00007f6ad8c4a43e sp 00007fffbd2c2eb8 error 6 in libcobalt.so.2.0.0[7f6ad8c3d000+1e000]
>>>
>>
>> Looking at the copperplate code, yep, this definitely can't work. Ok,
>> queued.
> 
> I noticed also :
> 
>  ./stest --session=foo 1
>  ./stest --session=foo 0
> 
> Both processes are waiting in rt_sem_p . The first process catches SIGINT, the second doesn't. If you press CTRL+C on the second process it stops but also the first process is falling through the rt_sem_p although no rt_sem_v is raised.


Spurious wake up in the Cobalt kernel when aborting a sem wait operation
due to a signal/unblock event, that is the reason why I could not see
this from a Mercury setup. This is fixed in the -next branch.

> At that moment no process is pending on rt_sem_p anymore. But if you do then a rt_sem_inquire, nwaiters is still 1.

I don't observe this one. Assuming you enabled the registry, what does
/var/run/xenomai/.../alchemy/semaphores/semtestsem tell you about the
sema4 value?

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-29 10:12         ` Philippe Gerum
@ 2015-07-29 11:48           ` Frederik Bayart
  2015-07-29 12:20             ` Philippe Gerum
                               ` (2 more replies)
  0 siblings, 3 replies; 24+ messages in thread
From: Frederik Bayart @ 2015-07-29 11:48 UTC (permalink / raw)
  To: xenomai@xenomai.org

> On Wednesday, 29 July 2015, 12:12, Philippe Gerum <rpm@xenomai.org> wrote:
>
>
>On 07/28/2015 05:19 PM, Frederik Bayart wrote:
>>>> ./stest --session=foo 1
>>>>
>>>> The first process binds to the named semaphore which is not yet created. According to the description of rt_sem_bind,  if the object does not exist on entry, the caller may block until a semaphore of the given name is created.
>>>>
>>>> So based on this description, I would I expect that if the second process is started, the first process would bind and continue and blocks in the p operation. The same for the 2nd process. Is this correct ? At the moment, if I start the 2nd process, I get a segfault in rt_sem_create :
>>>>
>>>> [ 9758.887921] [Xenomai] switching main to secondary mode after exception #14 from user-space at 0x7f6ad8c4a43e (pid 9256)
>>>> [ 9758.887930] main[9256]: segfault at 7f903bf6e038 ip 00007f6ad8c4a43e sp 00007fffbd2c2eb8 error 6 in libcobalt.so.2.0.0[7f6ad8c3d000+1e000]
>>>>
>>>
>>> Looking at the copperplate code, yep, this definitely can't work. Ok,
>>> queued.
>>
>> I noticed also :
>>
>>  ./stest --session=foo 1
>>  ./stest --session=foo 0
>>
>> Both processes are waiting in rt_sem_p . The first process catches SIGINT, the second doesn't. If you press CTRL+C on the second process it stops but also the first process is falling through the rt_sem_p although no rt_sem_v is raised.
>
>
>Spurious wake up in the Cobalt kernel when aborting a sem wait operation
>due to a signal/unblock event, that is the reason why I could not see
>this from a Mercury setup. This is fixed in the -next branch.
>
>> At that moment no process is pending on rt_sem_p anymore. But if you do then a rt_sem_inquire, nwaiters is still 1.
>
>I don't observe this one. Assuming you enabled the registry, what does
>/var/run/xenomai/.../alchemy/semaphores/semtestsem tell you about the
>sema4 value?
>

When I start my processes, I don't see this alchemy directory in my registry. Any suggestion why ?

The output of 'xeno-config --info' is :

Xenomai version: Xenomai/cobalt v3.0-rc5 -- 
Linux dev-x10sae 3.18.12-x86-64-xeno-3.0.rc5 #1 SMP PREEMPT Fri Jul 10 12:29:14 CEST 2015 x86_64 GNU/Linux
Kernel parameters: BOOT_IMAGE=/boot/vmlinuz-3.18.12-x86-64-xeno-3.0.rc5 root=UUID=fc8ecefa-fc73-487f-a045-cffa99c38a11 ro quiet console=tty0 console=ttyS0,115200n8
I-pipe release #1 detected
Cobalt core 3.0-rc5 detected
Compiler: gcc version 4.9.2 (Debian 4.9.2-10) 
Build args: --prefix=/usr --includedir=/usr/include/xenomai --mandir=/usr/share/man --with-testdir=/usr/lib/xenomai/testsuite --with-core=cobalt --enable-smp --enable-pshared --enable-registry --build x86_64-linux-gnu build_alias=x86_64-linux-gnu

I have only this in the registery :

find /var/run/xenomai

/var/run/xenomai
/var/run/xenomai/root
/var/run/xenomai/root/foo
/var/run/xenomai/root/foo/6210
/var/run/xenomai/root/foo/6203
/var/run/xenomai/root/foo/system


In attachment my latest version of stest.c to be sure, there are only small modifications.

Below the output of the first process

sudo ./stest --session=foo 1
stest.c:82: __XENO_COMPAT__ not defined, create = 1
stest.c:121: enter CTRL+C to continue...
stest.c:43: binding sem semtestsem...
stest.c:51: calling rt_sem_p...
========= Now CTRL+C on the second (other) process ======================
stest.c:60: rt_sem_p passed
========= Now CTRL+C on this (first) process to interrupt the wait loop =========
stest.c:32: signal(2)
stest.c:146: nwaiters = 1
stest.c:147: count = 0
stest.c:152: calling rt_sem_v 1...
stest.c:161: rt_sem_v called
stest.c:186: nwaiters = 0
stest.c:187: count = 0

>-- 
>Philippe.
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: stest.c
Type: text/x-csrc
Size: 4401 bytes
Desc: not available
URL: <http://xenomai.org/pipermail/xenomai/attachments/20150729/df21dd27/attachment.c>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-29 11:48           ` Frederik Bayart
@ 2015-07-29 12:20             ` Philippe Gerum
  2015-07-29 12:28             ` Philippe Gerum
  2015-07-29 12:48             ` Philippe Gerum
  2 siblings, 0 replies; 24+ messages in thread
From: Philippe Gerum @ 2015-07-29 12:20 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/29/2015 01:48 PM, Frederik Bayart wrote:
>> On Wednesday, 29 July 2015, 12:12, Philippe Gerum <rpm@xenomai.org> wrote:
>>
>>
>> On 07/28/2015 05:19 PM, Frederik Bayart wrote:
>>>>> ./stest --session=foo 1
>>>>>
>>>>> The first process binds to the named semaphore which is not yet created. According to the description of rt_sem_bind,  if the object does not exist on entry, the caller may block until a semaphore of the given name is created.
>>>>>
>>>>> So based on this description, I would I expect that if the second process is started, the first process would bind and continue and blocks in the p operation. The same for the 2nd process. Is this correct ? At the moment, if I start the 2nd process, I get a segfault in rt_sem_create :
>>>>>
>>>>> [ 9758.887921] [Xenomai] switching main to secondary mode after exception #14 from user-space at 0x7f6ad8c4a43e (pid 9256)
>>>>> [ 9758.887930] main[9256]: segfault at 7f903bf6e038 ip 00007f6ad8c4a43e sp 00007fffbd2c2eb8 error 6 in libcobalt.so.2.0.0[7f6ad8c3d000+1e000]
>>>>>
>>>>
>>>> Looking at the copperplate code, yep, this definitely can't work. Ok,
>>>> queued.
>>>
>>> I noticed also :
>>>
>>>  ./stest --session=foo 1
>>>  ./stest --session=foo 0
>>>
>>> Both processes are waiting in rt_sem_p . The first process catches SIGINT, the second doesn't. If you press CTRL+C on the second process it stops but also the first process is falling through the rt_sem_p although no rt_sem_v is raised.
>>
>>
>> Spurious wake up in the Cobalt kernel when aborting a sem wait operation
>> due to a signal/unblock event, that is the reason why I could not see
>> this from a Mercury setup. This is fixed in the -next branch.
>>
>>> At that moment no process is pending on rt_sem_p anymore. But if you do then a rt_sem_inquire, nwaiters is still 1.
>>
>> I don't observe this one. Assuming you enabled the registry, what does
>> /var/run/xenomai/.../alchemy/semaphores/semtestsem tell you about the
>> sema4 value?
>>
> 
> When I start my processes, I don't see this alchemy directory in my registry. Any suggestion why ?
> 
> The output of 'xeno-config --info' is :
> 
> Xenomai version: Xenomai/cobalt v3.0-rc5 -- 
> Linux dev-x10sae 3.18.12-x86-64-xeno-3.0.rc5 #1 SMP PREEMPT Fri Jul 10 12:29:14 CEST 2015 x86_64 GNU/Linux
> Kernel parameters: BOOT_IMAGE=/boot/vmlinuz-3.18.12-x86-64-xeno-3.0.rc5 root=UUID=fc8ecefa-fc73-487f-a045-cffa99c38a11 ro quiet console=tty0 console=ttyS0,115200n8
> I-pipe release #1 detected
> Cobalt core 3.0-rc5 detected

You should be running -rc6.

> Compiler: gcc version 4.9.2 (Debian 4.9.2-10) 
> Build args: --prefix=/usr --includedir=/usr/include/xenomai --mandir=/usr/share/man --with-testdir=/usr/lib/xenomai/testsuite --with-core=cobalt --enable-smp --enable-pshared --enable-registry --build x86_64-linux-gnu build_alias=x86_64-linux-gnu
> 
> I have only this in the registery :
> 
> find /var/run/xenomai
> 
> /var/run/xenomai
> /var/run/xenomai/root
> /var/run/xenomai/root/foo
> /var/run/xenomai/root/foo/6210
> /var/run/xenomai/root/foo/6203
> /var/run/xenomai/root/foo/system
> 
> 

FUSE services do not seem to be enabled, those directories are the mount
points created by sysregd, over which fuse-managed fs should be mounted.

Are you sure those directories are not left overs from a previous run,
and that you are actually running an executable built over the
configuration settings above?

This would confirm it:

$ <your-app-executable> --dump-config|grep REGISTRY

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-29 11:48           ` Frederik Bayart
  2015-07-29 12:20             ` Philippe Gerum
@ 2015-07-29 12:28             ` Philippe Gerum
  2015-07-29 12:48             ` Philippe Gerum
  2 siblings, 0 replies; 24+ messages in thread
From: Philippe Gerum @ 2015-07-29 12:28 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/29/2015 01:48 PM, Frederik Bayart wrote:

> In attachment my latest version of stest.c to be sure, there are only small modifications.
>

If __XENO_COMPAT__ is enabled, that should mean that you built your
application with --[skin=]native, which automatically enables backward
compat mode from {lib, include}/trank, to the new alchemy API.

In this case, you don't need to test this symbol for picking the proper
include files, these are available from include/trank/native, which
xeno-config points you at.

Obsolete definitions like T_FPU will be found in those compat headers.

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-29 11:48           ` Frederik Bayart
  2015-07-29 12:20             ` Philippe Gerum
  2015-07-29 12:28             ` Philippe Gerum
@ 2015-07-29 12:48             ` Philippe Gerum
  2015-07-29 12:56               ` Philippe Gerum
  2015-07-29 15:14               ` Frederik Bayart
  2 siblings, 2 replies; 24+ messages in thread
From: Philippe Gerum @ 2015-07-29 12:48 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/29/2015 01:48 PM, Frederik Bayart wrote:
>> On Wednesday, 29 July 2015, 12:12, Philippe Gerum <rpm@xenomai.org> wrote:
>>
>>
>> On 07/28/2015 05:19 PM, Frederik Bayart wrote:
>>>>> ./stest --session=foo 1
>>>>>
>>>>> The first process binds to the named semaphore which is not yet created. According to the description of rt_sem_bind,  if the object does not exist on entry, the caller may block until a semaphore of the given name is created.
>>>>>
>>>>> So based on this description, I would I expect that if the second process is started, the first process would bind and continue and blocks in the p operation. The same for the 2nd process. Is this correct ? At the moment, if I start the 2nd process, I get a segfault in rt_sem_create :
>>>>>
>>>>> [ 9758.887921] [Xenomai] switching main to secondary mode after exception #14 from user-space at 0x7f6ad8c4a43e (pid 9256)
>>>>> [ 9758.887930] main[9256]: segfault at 7f903bf6e038 ip 00007f6ad8c4a43e sp 00007fffbd2c2eb8 error 6 in libcobalt.so.2.0.0[7f6ad8c3d000+1e000]
>>>>>
>>>>
>>>> Looking at the copperplate code, yep, this definitely can't work. Ok,
>>>> queued.
>>>
>>> I noticed also :
>>>
>>>  ./stest --session=foo 1
>>>  ./stest --session=foo 0
>>>
>>> Both processes are waiting in rt_sem_p . The first process catches SIGINT, the second doesn't. If you press CTRL+C on the second process it stops but also the first process is falling through the rt_sem_p although no rt_sem_v is raised.
>>
>>
>> Spurious wake up in the Cobalt kernel when aborting a sem wait operation
>> due to a signal/unblock event, that is the reason why I could not see
>> this from a Mercury setup. This is fixed in the -next branch.
>>
>>> At that moment no process is pending on rt_sem_p anymore. But if you do then a rt_sem_inquire, nwaiters is still 1.
>>
>> I don't observe this one. Assuming you enabled the registry, what does
>> /var/run/xenomai/.../alchemy/semaphores/semtestsem tell you about the
>> sema4 value?
>>
> 
> When I start my processes, I don't see this alchemy directory in my registry. Any suggestion why ?
> 
> The output of 'xeno-config --info' is :
> 
> Xenomai version: Xenomai/cobalt v3.0-rc5 -- 
> Linux dev-x10sae 3.18.12-x86-64-xeno-3.0.rc5 #1 SMP PREEMPT Fri Jul 10 12:29:14 CEST 2015 x86_64 GNU/Linux
> Kernel parameters: BOOT_IMAGE=/boot/vmlinuz-3.18.12-x86-64-xeno-3.0.rc5 root=UUID=fc8ecefa-fc73-487f-a045-cffa99c38a11 ro quiet console=tty0 console=ttyS0,115200n8
> I-pipe release #1 detected
> Cobalt core 3.0-rc5 detected
> Compiler: gcc version 4.9.2 (Debian 4.9.2-10) 
> Build args: --prefix=/usr --includedir=/usr/include/xenomai --mandir=/usr/share/man --with-testdir=/usr/lib/xenomai/testsuite --with-core=cobalt --enable-smp --enable-pshared --enable-registry --build x86_64-linux-gnu build_alias=x86_64-linux-gnu
> 
> I have only this in the registery :
> 
> find /var/run/xenomai
> 
> /var/run/xenomai
> /var/run/xenomai/root
> /var/run/xenomai/root/foo
> /var/run/xenomai/root/foo/6210
> /var/run/xenomai/root/foo/6203
> /var/run/xenomai/root/foo/system
> 
> 
> In attachment my latest version of stest.c to be sure, there are only small modifications.
> 
> Below the output of the first process
> 
> sudo ./stest --session=foo 1
> stest.c:82: __XENO_COMPAT__ not defined, create = 1
> stest.c:121: enter CTRL+C to continue...
> stest.c:43: binding sem semtestsem...
> stest.c:51: calling rt_sem_p...
> ========= Now CTRL+C on the second (other) process ======================
> stest.c:60: rt_sem_p passed

You must mean interrupting the one enabling create mode, i.e.
--session=foo 1. ^C on the other one will terminate it immediately since
it does not trap this signal, leaving the first one hanging on
rt_sem_p() as expected (with the latest fix applied).

> ========= Now CTRL+C on this (first) process to interrupt the wait loop =========
> stest.c:32: signal(2)
> stest.c:146: nwaiters = 1
> stest.c:147: count = 0
> stest.c:152: calling rt_sem_v 1...
> stest.c:161: rt_sem_v called
> stest.c:186: nwaiters = 0
> stest.c:187: count = 0
> 

Looking at your code, I fail to see any issue with this trace output.
What output would you expect instead?

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-29 12:48             ` Philippe Gerum
@ 2015-07-29 12:56               ` Philippe Gerum
  2015-07-29 15:14               ` Frederik Bayart
  1 sibling, 0 replies; 24+ messages in thread
From: Philippe Gerum @ 2015-07-29 12:56 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/29/2015 02:48 PM, Philippe Gerum wrote:
> On 07/29/2015 01:48 PM, Frederik Bayart wrote:
>>> On Wednesday, 29 July 2015, 12:12, Philippe Gerum <rpm@xenomai.org> wrote:
>>>
>>>
>>> On 07/28/2015 05:19 PM, Frederik Bayart wrote:
>>>>>> ./stest --session=foo 1
>>>>>>
>>>>>> The first process binds to the named semaphore which is not yet created. According to the description of rt_sem_bind,  if the object does not exist on entry, the caller may block until a semaphore of the given name is created.
>>>>>>
>>>>>> So based on this description, I would I expect that if the second process is started, the first process would bind and continue and blocks in the p operation. The same for the 2nd process. Is this correct ? At the moment, if I start the 2nd process, I get a segfault in rt_sem_create :
>>>>>>
>>>>>> [ 9758.887921] [Xenomai] switching main to secondary mode after exception #14 from user-space at 0x7f6ad8c4a43e (pid 9256)
>>>>>> [ 9758.887930] main[9256]: segfault at 7f903bf6e038 ip 00007f6ad8c4a43e sp 00007fffbd2c2eb8 error 6 in libcobalt.so.2.0.0[7f6ad8c3d000+1e000]
>>>>>>
>>>>>
>>>>> Looking at the copperplate code, yep, this definitely can't work. Ok,
>>>>> queued.
>>>>
>>>> I noticed also :
>>>>
>>>>  ./stest --session=foo 1
>>>>  ./stest --session=foo 0
>>>>
>>>> Both processes are waiting in rt_sem_p . The first process catches SIGINT, the second doesn't. If you press CTRL+C on the second process it stops but also the first process is falling through the rt_sem_p although no rt_sem_v is raised.
>>>
>>>
>>> Spurious wake up in the Cobalt kernel when aborting a sem wait operation
>>> due to a signal/unblock event, that is the reason why I could not see
>>> this from a Mercury setup. This is fixed in the -next branch.
>>>
>>>> At that moment no process is pending on rt_sem_p anymore. But if you do then a rt_sem_inquire, nwaiters is still 1.
>>>
>>> I don't observe this one. Assuming you enabled the registry, what does
>>> /var/run/xenomai/.../alchemy/semaphores/semtestsem tell you about the
>>> sema4 value?
>>>
>>
>> When I start my processes, I don't see this alchemy directory in my registry. Any suggestion why ?
>>
>> The output of 'xeno-config --info' is :
>>
>> Xenomai version: Xenomai/cobalt v3.0-rc5 -- 
>> Linux dev-x10sae 3.18.12-x86-64-xeno-3.0.rc5 #1 SMP PREEMPT Fri Jul 10 12:29:14 CEST 2015 x86_64 GNU/Linux
>> Kernel parameters: BOOT_IMAGE=/boot/vmlinuz-3.18.12-x86-64-xeno-3.0.rc5 root=UUID=fc8ecefa-fc73-487f-a045-cffa99c38a11 ro quiet console=tty0 console=ttyS0,115200n8
>> I-pipe release #1 detected
>> Cobalt core 3.0-rc5 detected
>> Compiler: gcc version 4.9.2 (Debian 4.9.2-10) 
>> Build args: --prefix=/usr --includedir=/usr/include/xenomai --mandir=/usr/share/man --with-testdir=/usr/lib/xenomai/testsuite --with-core=cobalt --enable-smp --enable-pshared --enable-registry --build x86_64-linux-gnu build_alias=x86_64-linux-gnu
>>
>> I have only this in the registery :
>>
>> find /var/run/xenomai
>>
>> /var/run/xenomai
>> /var/run/xenomai/root
>> /var/run/xenomai/root/foo
>> /var/run/xenomai/root/foo/6210
>> /var/run/xenomai/root/foo/6203
>> /var/run/xenomai/root/foo/system
>>
>>
>> In attachment my latest version of stest.c to be sure, there are only small modifications.
>>
>> Below the output of the first process
>>
>> sudo ./stest --session=foo 1
>> stest.c:82: __XENO_COMPAT__ not defined, create = 1
>> stest.c:121: enter CTRL+C to continue...
>> stest.c:43: binding sem semtestsem...
>> stest.c:51: calling rt_sem_p...
>> ========= Now CTRL+C on the second (other) process ======================
>> stest.c:60: rt_sem_p passed
> 
> You must mean interrupting the one enabling create mode, i.e.
> --session=foo 1. ^C on the other one will terminate it immediately since
> it does not trap this signal, leaving the first one hanging on
> rt_sem_p() as expected (with the latest fix applied).
> 
>> ========= Now CTRL+C on this (first) process to interrupt the wait loop =========
>> stest.c:32: signal(2)
>> stest.c:146: nwaiters = 1
>> stest.c:147: count = 0
>> stest.c:152: calling rt_sem_v 1...
>> stest.c:161: rt_sem_v called
>> stest.c:186: nwaiters = 0
>> stest.c:187: count = 0
>>
> 
> Looking at your code, I fail to see any issue with this trace output.
> What output would you expect instead?
> 

In absence of any particular signal disposition (e.g. blocking), SIGINT
can ne sent to the main() thread of your process, which then wakes up
while the one running rt_input() is still pending on rt_sem_p(). Hence
the non-zero waiter count when the main() thread inspects the sema4 data.

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-29 12:48             ` Philippe Gerum
  2015-07-29 12:56               ` Philippe Gerum
@ 2015-07-29 15:14               ` Frederik Bayart
  2015-07-29 18:27                 ` Philippe Gerum
  1 sibling, 1 reply; 24+ messages in thread
From: Frederik Bayart @ 2015-07-29 15:14 UTC (permalink / raw)
  To: xenomai@xenomai.org

>
>On Wednesday, 29 July 2015, 14:48, Philippe Gerum <rpm@xenomai.org> wrote:
>On 07/29/2015 01:48 PM, Frederik Bayart wrote:
>>> On Wednesday, 29 July 2015, 12:12, Philippe Gerum <rpm@xenomai.org> wrote:
>>>
>>>
>>> On 07/28/2015 05:19 PM, Frederik Bayart wrote:
>>>>>> ./stest --session=foo 1
>>>>>>
>>>>>> The first process binds to the named semaphore which is not yet created. According to the description of rt_sem_bind,  if the object does not exist on entry, the caller may block until a semaphore of the given name is created.
>>>>>>
>>>>>> So based on this description, I would I expect that if the second process is started, the first process would bind and continue and blocks in the p operation. The same for the 2nd process. Is this correct ? At the moment, if I start the 2nd process, I get a segfault in rt_sem_create :
>>>>>>
>>>>>> [ 9758.887921] [Xenomai] switching main to secondary mode after exception #14 from user-space at 0x7f6ad8c4a43e (pid 9256)
>>>>>> [ 9758.887930] main[9256]: segfault at 7f903bf6e038 ip 00007f6ad8c4a43e sp 00007fffbd2c2eb8 error 6 in libcobalt.so.2.0.0[7f6ad8c3d000+1e000]
>>>>>>
>>>>>
>>>>> Looking at the copperplate code, yep, this definitely can't work. Ok,
>>>>> queued.
>>>>
>>>> I noticed also :
>>>>
>>>>  ./stest --session=foo 1
>>>>  ./stest --session=foo 0
>>>>
>>>> Both processes are waiting in rt_sem_p . The first process catches SIGINT, the second doesn't. If you press CTRL+C on the second process it stops but also the first process is falling through the rt_sem_p although no rt_sem_v is raised.
>>>
>>>
>>> Spurious wake up in the Cobalt kernel when aborting a sem wait operation
>>> due to a signal/unblock event, that is the reason why I could not see
>>> this from a Mercury setup. This is fixed in the -next branch.
>>>
>>>> At that moment no process is pending on rt_sem_p anymore. But if you do then a rt_sem_inquire, nwaiters is still 1.
>>>
>>> I don't observe this one. Assuming you enabled the registry, what does
>>> /var/run/xenomai/.../alchemy/semaphores/semtestsem tell you about the
>>> sema4 value?
>>>
>>
>> When I start my processes, I don't see this alchemy directory in my registry. Any suggestion why ?
>>
>> The output of 'xeno-config --info' is :
>>
>> Xenomai version: Xenomai/cobalt v3.0-rc5 --
>> Linux dev-x10sae 3.18.12-x86-64-xeno-3.0.rc5 #1 SMP PREEMPT Fri Jul 10 12:29:14 CEST 2015 x86_64 GNU/Linux
>> Kernel parameters: BOOT_IMAGE=/boot/vmlinuz-3.18.12-x86-64-xeno-3.0.rc5 root=UUID=fc8ecefa-fc73-487f-a045-cffa99c38a11 ro quiet console=tty0 console=ttyS0,115200n8
>> I-pipe release #1 detected
>> Cobalt core 3.0-rc5 detected
>> Compiler: gcc version 4.9.2 (Debian 4.9.2-10)
>> Build args: --prefix=/usr --includedir=/usr/include/xenomai --mandir=/usr/share/man --with-testdir=/usr/lib/xenomai/testsuite --with-core=cobalt --enable-smp --enable-pshared --enable-registry --build x86_64-linux-gnu build_alias=x86_64-linux-gnu
>>
>> I have only this in the registery :
>>
>> find /var/run/xenomai
>>
>> /var/run/xenomai
>> /var/run/xenomai/root
>> /var/run/xenomai/root/foo
>> /var/run/xenomai/root/foo/6210
>> /var/run/xenomai/root/foo/6203
>> /var/run/xenomai/root/foo/system
>>
>>
>> In attachment my latest version of stest.c to be sure, there are only small modifications.
>>
>> Below the output of the first process
>>
>> sudo ./stest --session=foo 1
>> stest.c:82: __XENO_COMPAT__ not defined, create = 1
>> stest.c:121: enter CTRL+C to continue...
>> stest.c:43: binding sem semtestsem...
>> stest.c:51: calling rt_sem_p...
>> ========= Now CTRL+C on the second (other) process ======================
>> stest.c:60: rt_sem_p passed
>
>You must mean interrupting the one enabling create mode, i.e.
>--session=foo 1. ^C on the other one will terminate it immediately since
>it does not trap this signal, leaving the first one hanging on
>rt_sem_p() as expected (with the latest fix applied).
>
>> ========= Now CTRL+C on this (first) process to interrupt the wait loop =========
>> stest.c:32: signal(2)
>> stest.c:146: nwaiters = 1
>> stest.c:147: count = 0
>> stest.c:152: calling rt_sem_v 1...
>> stest.c:161: rt_sem_v called
>> stest.c:186: nwaiters = 0
>> stest.c:187: count = 0
>>
>
>Looking at your code, I fail to see any issue with this trace output.
>What output would you expect instead?

I switched to rc6 (kernel and libraries)

Concerning the registry : 

The fuse module is loaded :
$ lsmod | grep fuse
fuse                   87410  7 

$ sudo ./stest  --dump-config|grep REGISTRY
based on Xenomai/cobalt v3.0-rc6 -- 
CONFIG_XENO_REGISTRY=1
CONFIG_XENO_REGISTRY_ROOT="/var/run/xenomai"

Is this what I'm supposed to see ?

Before start of the processes :

$ find /var/run/xenomai/
/var/run/xenomai/
/var/run/xenomai/root

After start of processes

$ find /var/run/xenomai/
/var/run/xenomai/
/var/run/xenomai/root
/var/run/xenomai/root/foo
/var/run/xenomai/root/foo/4910
/var/run/xenomai/root/foo/4899
/var/run/xenomai/root/foo/system

$ mount | grep xenomai
sysregd on /run/xenomai/root/foo/system type fuse.sysregd (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
stest on /run/xenomai/root/foo/4899 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
stest on /run/xenomai/root/foo/4910 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)

So I haven't any idea why I don't see more subdirectories.

Now concerning the semaphore :

$cat /proc/xenomai/sched/threads | grep rt
3  4899   rt     cobalt      0   -             X          main
3  4902   rt     cobalt      0   -             X          sysregd
3  4904   rt     cobalt      0   -             X          sysregd
3  4906   rt     cobalt      0   -             X          stest
3  4907   rt     cobalt    256   -             W          remote-agent
3  4908   rt     cobalt     40   -             W          4899test
0  4910   rt     cobalt      0   -             X          main
0  4912   rt     cobalt      0   -             X          stest
0  4913   rt     cobalt    256   -             W          remote-agent
0  4914   rt     cobalt     40   -             W          4910test


Now I enter CTRL+C on the second process (the non-creating process). The SIGINT signal is not catched in this process. The second process is ended.

$cat /proc/xenomai/sched/threads | grep rt
3  4899   rt     cobalt      0   -             X          main
3  4902   rt     cobalt      0   -             X          sysregd
3  4904   rt     cobalt      0   -             X          sysregd
3  4906   rt     cobalt      0   -             X          stest
3  4907   rt     cobalt    256   -             W          remote-agent


The rt_sem_p call in the first process also returns with return value 0.
This has as consequence that the task 4899test of the first process is also ended.

So : 

1) Is it OK that if 2 tasks are pending on a shared semophore and 1 of the tasks finishes because of uncatched SIGINT, the other task falls through the semaphore ?

2) If OK, the return value is 0, so the task can't detect whether the semaphore is released because of interrupt of other task or because of rt_sem_v.

Now there are no tasks pending anymore on the semaphore, so I would expect nwaiters = 0

However : CTRL+C on the first semaphore-creating process, the SIGINT signal is catched for this process and a flag is set to end the wait loop.

After the wait loop is ended,  rt_sem_inquire is called and returns :

stest.c:149: nwaiters = 1
stest.c:150: count = 0

I would expect that nwaiters is 0 here.

Then rt_sem_v is called then and only after that nwaiters is 0.


After both processes are finished, the registry is clean and there are no mounts anymore :

$ find /var/run/xenomai/
/var/run/xenomai/
/var/run/xenomai/root

$ mount | grep xenomai

Frederik

>
>
>-- 
>Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-29 15:14               ` Frederik Bayart
@ 2015-07-29 18:27                 ` Philippe Gerum
  2015-07-29 18:42                   ` Philippe Gerum
  0 siblings, 1 reply; 24+ messages in thread
From: Philippe Gerum @ 2015-07-29 18:27 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/29/2015 05:14 PM, Frederik Bayart wrote:
>>
>> On Wednesday, 29 July 2015, 14:48, Philippe Gerum <rpm@xenomai.org> wrote:
>> On 07/29/2015 01:48 PM, Frederik Bayart wrote:
>>>> On Wednesday, 29 July 2015, 12:12, Philippe Gerum <rpm@xenomai.org> wrote:
>>>>
>>>>
>>>> On 07/28/2015 05:19 PM, Frederik Bayart wrote:
>>>>>>> ./stest --session=foo 1
>>>>>>>
>>>>>>> The first process binds to the named semaphore which is not yet created. According to the description of rt_sem_bind,  if the object does not exist on entry, the caller may block until a semaphore of the given name is created.
>>>>>>>
>>>>>>> So based on this description, I would I expect that if the second process is started, the first process would bind and continue and blocks in the p operation. The same for the 2nd process. Is this correct ? At the moment, if I start the 2nd process, I get a segfault in rt_sem_create :
>>>>>>>
>>>>>>> [ 9758.887921] [Xenomai] switching main to secondary mode after exception #14 from user-space at 0x7f6ad8c4a43e (pid 9256)
>>>>>>> [ 9758.887930] main[9256]: segfault at 7f903bf6e038 ip 00007f6ad8c4a43e sp 00007fffbd2c2eb8 error 6 in libcobalt.so.2.0.0[7f6ad8c3d000+1e000]
>>>>>>>
>>>>>>
>>>>>> Looking at the copperplate code, yep, this definitely can't work. Ok,
>>>>>> queued.
>>>>>
>>>>> I noticed also :
>>>>>
>>>>>  ./stest --session=foo 1
>>>>>  ./stest --session=foo 0
>>>>>
>>>>> Both processes are waiting in rt_sem_p . The first process catches SIGINT, the second doesn't. If you press CTRL+C on the second process it stops but also the first process is falling through the rt_sem_p although no rt_sem_v is raised.
>>>>
>>>>
>>>> Spurious wake up in the Cobalt kernel when aborting a sem wait operation
>>>> due to a signal/unblock event, that is the reason why I could not see
>>>> this from a Mercury setup. This is fixed in the -next branch.
>>>>
>>>>> At that moment no process is pending on rt_sem_p anymore. But if you do then a rt_sem_inquire, nwaiters is still 1.
>>>>
>>>> I don't observe this one. Assuming you enabled the registry, what does
>>>> /var/run/xenomai/.../alchemy/semaphores/semtestsem tell you about the
>>>> sema4 value?
>>>>
>>>
>>> When I start my processes, I don't see this alchemy directory in my registry. Any suggestion why ?
>>>
>>> The output of 'xeno-config --info' is :
>>>
>>> Xenomai version: Xenomai/cobalt v3.0-rc5 --
>>> Linux dev-x10sae 3.18.12-x86-64-xeno-3.0.rc5 #1 SMP PREEMPT Fri Jul 10 12:29:14 CEST 2015 x86_64 GNU/Linux
>>> Kernel parameters: BOOT_IMAGE=/boot/vmlinuz-3.18.12-x86-64-xeno-3.0.rc5 root=UUID=fc8ecefa-fc73-487f-a045-cffa99c38a11 ro quiet console=tty0 console=ttyS0,115200n8
>>> I-pipe release #1 detected
>>> Cobalt core 3.0-rc5 detected
>>> Compiler: gcc version 4.9.2 (Debian 4.9.2-10)
>>> Build args: --prefix=/usr --includedir=/usr/include/xenomai --mandir=/usr/share/man --with-testdir=/usr/lib/xenomai/testsuite --with-core=cobalt --enable-smp --enable-pshared --enable-registry --build x86_64-linux-gnu build_alias=x86_64-linux-gnu
>>>
>>> I have only this in the registery :
>>>
>>> find /var/run/xenomai
>>>
>>> /var/run/xenomai
>>> /var/run/xenomai/root
>>> /var/run/xenomai/root/foo
>>> /var/run/xenomai/root/foo/6210
>>> /var/run/xenomai/root/foo/6203
>>> /var/run/xenomai/root/foo/system
>>>
>>>
>>> In attachment my latest version of stest.c to be sure, there are only small modifications.
>>>
>>> Below the output of the first process
>>>
>>> sudo ./stest --session=foo 1
>>> stest.c:82: __XENO_COMPAT__ not defined, create = 1
>>> stest.c:121: enter CTRL+C to continue...
>>> stest.c:43: binding sem semtestsem...
>>> stest.c:51: calling rt_sem_p...
>>> ========= Now CTRL+C on the second (other) process ======================
>>> stest.c:60: rt_sem_p passed
>>
>> You must mean interrupting the one enabling create mode, i.e.
>> --session=foo 1. ^C on the other one will terminate it immediately since
>> it does not trap this signal, leaving the first one hanging on
>> rt_sem_p() as expected (with the latest fix applied).
>>
>>> ========= Now CTRL+C on this (first) process to interrupt the wait loop =========
>>> stest.c:32: signal(2)
>>> stest.c:146: nwaiters = 1
>>> stest.c:147: count = 0
>>> stest.c:152: calling rt_sem_v 1...
>>> stest.c:161: rt_sem_v called
>>> stest.c:186: nwaiters = 0
>>> stest.c:187: count = 0
>>>
>>
>> Looking at your code, I fail to see any issue with this trace output.
>> What output would you expect instead?
> 
> I switched to rc6 (kernel and libraries)
> 
> Concerning the registry : 
> 
> The fuse module is loaded :
> $ lsmod | grep fuse
> fuse                   87410  7 
> 
> $ sudo ./stest  --dump-config|grep REGISTRY
> based on Xenomai/cobalt v3.0-rc6 -- 
> CONFIG_XENO_REGISTRY=1
> CONFIG_XENO_REGISTRY_ROOT="/var/run/xenomai"
> 
> Is this what I'm supposed to see ?
> 
> Before start of the processes :
> 
> $ find /var/run/xenomai/
> /var/run/xenomai/
> /var/run/xenomai/root
> 
> After start of processes
> 
> $ find /var/run/xenomai/
> /var/run/xenomai/
> /var/run/xenomai/root
> /var/run/xenomai/root/foo
> /var/run/xenomai/root/foo/4910
> /var/run/xenomai/root/foo/4899
> /var/run/xenomai/root/foo/system
> 
> $ mount | grep xenomai
> sysregd on /run/xenomai/root/foo/system type fuse.sysregd (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
> stest on /run/xenomai/root/foo/4899 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
> stest on /run/xenomai/root/foo/4910 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
> 
> So I haven't any idea why I don't see more subdirectories.
> 
> Now concerning the semaphore :
> 
> $cat /proc/xenomai/sched/threads | grep rt
> 3  4899   rt     cobalt      0   -             X          main
> 3  4902   rt     cobalt      0   -             X          sysregd
> 3  4904   rt     cobalt      0   -             X          sysregd
> 3  4906   rt     cobalt      0   -             X          stest
> 3  4907   rt     cobalt    256   -             W          remote-agent
> 3  4908   rt     cobalt     40   -             W          4899test
> 0  4910   rt     cobalt      0   -             X          main
> 0  4912   rt     cobalt      0   -             X          stest
> 0  4913   rt     cobalt    256   -             W          remote-agent
> 0  4914   rt     cobalt     40   -             W          4910test
> 
> 
> Now I enter CTRL+C on the second process (the non-creating process). The SIGINT signal is not catched in this process. The second process is ended.
> 
> $cat /proc/xenomai/sched/threads | grep rt
> 3  4899   rt     cobalt      0   -             X          main
> 3  4902   rt     cobalt      0   -             X          sysregd
> 3  4904   rt     cobalt      0   -             X          sysregd
> 3  4906   rt     cobalt      0   -             X          stest
> 3  4907   rt     cobalt    256   -             W          remote-agent
> 
> 
> The rt_sem_p call in the first process also returns with return value 0.
> This has as consequence that the task 4899test of the first process is also ended.

Please merge the commit on top of -rc6 I mentioned this morning, which
fixes the spurious wake up:

http://git.xenomai.org/xenomai-3.git/commit/?h=next&id=081cbb8b150f30a019245dfb0e2f0b92cc7f2dfd

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-29 18:27                 ` Philippe Gerum
@ 2015-07-29 18:42                   ` Philippe Gerum
  2015-07-30 14:28                     ` Frederik Bayart
  0 siblings, 1 reply; 24+ messages in thread
From: Philippe Gerum @ 2015-07-29 18:42 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/29/2015 08:27 PM, Philippe Gerum wrote:
> On 07/29/2015 05:14 PM, Frederik Bayart wrote:
>>>
>>> On Wednesday, 29 July 2015, 14:48, Philippe Gerum <rpm@xenomai.org> wrote:
>>> On 07/29/2015 01:48 PM, Frederik Bayart wrote:
>>>>> On Wednesday, 29 July 2015, 12:12, Philippe Gerum <rpm@xenomai.org> wrote:
>>>>>
>>>>>
>>>>> On 07/28/2015 05:19 PM, Frederik Bayart wrote:
>>>>>>>> ./stest --session=foo 1
>>>>>>>>
>>>>>>>> The first process binds to the named semaphore which is not yet created. According to the description of rt_sem_bind,  if the object does not exist on entry, the caller may block until a semaphore of the given name is created.
>>>>>>>>
>>>>>>>> So based on this description, I would I expect that if the second process is started, the first process would bind and continue and blocks in the p operation. The same for the 2nd process. Is this correct ? At the moment, if I start the 2nd process, I get a segfault in rt_sem_create :
>>>>>>>>
>>>>>>>> [ 9758.887921] [Xenomai] switching main to secondary mode after exception #14 from user-space at 0x7f6ad8c4a43e (pid 9256)
>>>>>>>> [ 9758.887930] main[9256]: segfault at 7f903bf6e038 ip 00007f6ad8c4a43e sp 00007fffbd2c2eb8 error 6 in libcobalt.so.2.0.0[7f6ad8c3d000+1e000]
>>>>>>>>
>>>>>>>
>>>>>>> Looking at the copperplate code, yep, this definitely can't work. Ok,
>>>>>>> queued.
>>>>>>
>>>>>> I noticed also :
>>>>>>
>>>>>>  ./stest --session=foo 1
>>>>>>  ./stest --session=foo 0
>>>>>>
>>>>>> Both processes are waiting in rt_sem_p . The first process catches SIGINT, the second doesn't. If you press CTRL+C on the second process it stops but also the first process is falling through the rt_sem_p although no rt_sem_v is raised.
>>>>>
>>>>>
>>>>> Spurious wake up in the Cobalt kernel when aborting a sem wait operation
>>>>> due to a signal/unblock event, that is the reason why I could not see
>>>>> this from a Mercury setup. This is fixed in the -next branch.
>>>>>
>>>>>> At that moment no process is pending on rt_sem_p anymore. But if you do then a rt_sem_inquire, nwaiters is still 1.
>>>>>
>>>>> I don't observe this one. Assuming you enabled the registry, what does
>>>>> /var/run/xenomai/.../alchemy/semaphores/semtestsem tell you about the
>>>>> sema4 value?
>>>>>
>>>>
>>>> When I start my processes, I don't see this alchemy directory in my registry. Any suggestion why ?
>>>>
>>>> The output of 'xeno-config --info' is :
>>>>
>>>> Xenomai version: Xenomai/cobalt v3.0-rc5 --
>>>> Linux dev-x10sae 3.18.12-x86-64-xeno-3.0.rc5 #1 SMP PREEMPT Fri Jul 10 12:29:14 CEST 2015 x86_64 GNU/Linux
>>>> Kernel parameters: BOOT_IMAGE=/boot/vmlinuz-3.18.12-x86-64-xeno-3.0.rc5 root=UUID=fc8ecefa-fc73-487f-a045-cffa99c38a11 ro quiet console=tty0 console=ttyS0,115200n8
>>>> I-pipe release #1 detected
>>>> Cobalt core 3.0-rc5 detected
>>>> Compiler: gcc version 4.9.2 (Debian 4.9.2-10)
>>>> Build args: --prefix=/usr --includedir=/usr/include/xenomai --mandir=/usr/share/man --with-testdir=/usr/lib/xenomai/testsuite --with-core=cobalt --enable-smp --enable-pshared --enable-registry --build x86_64-linux-gnu build_alias=x86_64-linux-gnu
>>>>
>>>> I have only this in the registery :
>>>>
>>>> find /var/run/xenomai
>>>>
>>>> /var/run/xenomai
>>>> /var/run/xenomai/root
>>>> /var/run/xenomai/root/foo
>>>> /var/run/xenomai/root/foo/6210
>>>> /var/run/xenomai/root/foo/6203
>>>> /var/run/xenomai/root/foo/system
>>>>
>>>>
>>>> In attachment my latest version of stest.c to be sure, there are only small modifications.
>>>>
>>>> Below the output of the first process
>>>>
>>>> sudo ./stest --session=foo 1
>>>> stest.c:82: __XENO_COMPAT__ not defined, create = 1
>>>> stest.c:121: enter CTRL+C to continue...
>>>> stest.c:43: binding sem semtestsem...
>>>> stest.c:51: calling rt_sem_p...
>>>> ========= Now CTRL+C on the second (other) process ======================
>>>> stest.c:60: rt_sem_p passed
>>>
>>> You must mean interrupting the one enabling create mode, i.e.
>>> --session=foo 1. ^C on the other one will terminate it immediately since
>>> it does not trap this signal, leaving the first one hanging on
>>> rt_sem_p() as expected (with the latest fix applied).
>>>
>>>> ========= Now CTRL+C on this (first) process to interrupt the wait loop =========
>>>> stest.c:32: signal(2)
>>>> stest.c:146: nwaiters = 1
>>>> stest.c:147: count = 0
>>>> stest.c:152: calling rt_sem_v 1...
>>>> stest.c:161: rt_sem_v called
>>>> stest.c:186: nwaiters = 0
>>>> stest.c:187: count = 0
>>>>
>>>
>>> Looking at your code, I fail to see any issue with this trace output.
>>> What output would you expect instead?
>>
>> I switched to rc6 (kernel and libraries)
>>
>> Concerning the registry : 
>>
>> The fuse module is loaded :
>> $ lsmod | grep fuse
>> fuse                   87410  7 
>>
>> $ sudo ./stest  --dump-config|grep REGISTRY
>> based on Xenomai/cobalt v3.0-rc6 -- 
>> CONFIG_XENO_REGISTRY=1
>> CONFIG_XENO_REGISTRY_ROOT="/var/run/xenomai"
>>
>> Is this what I'm supposed to see ?
>>
>> Before start of the processes :
>>
>> $ find /var/run/xenomai/
>> /var/run/xenomai/
>> /var/run/xenomai/root
>>
>> After start of processes
>>
>> $ find /var/run/xenomai/
>> /var/run/xenomai/
>> /var/run/xenomai/root
>> /var/run/xenomai/root/foo
>> /var/run/xenomai/root/foo/4910
>> /var/run/xenomai/root/foo/4899
>> /var/run/xenomai/root/foo/system
>>
>> $ mount | grep xenomai
>> sysregd on /run/xenomai/root/foo/system type fuse.sysregd (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
>> stest on /run/xenomai/root/foo/4899 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
>> stest on /run/xenomai/root/foo/4910 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
>>
>> So I haven't any idea why I don't see more subdirectories.
>>
>> Now concerning the semaphore :
>>
>> $cat /proc/xenomai/sched/threads | grep rt
>> 3  4899   rt     cobalt      0   -             X          main
>> 3  4902   rt     cobalt      0   -             X          sysregd
>> 3  4904   rt     cobalt      0   -             X          sysregd
>> 3  4906   rt     cobalt      0   -             X          stest
>> 3  4907   rt     cobalt    256   -             W          remote-agent
>> 3  4908   rt     cobalt     40   -             W          4899test
>> 0  4910   rt     cobalt      0   -             X          main
>> 0  4912   rt     cobalt      0   -             X          stest
>> 0  4913   rt     cobalt    256   -             W          remote-agent
>> 0  4914   rt     cobalt     40   -             W          4910test
>>
>>
>> Now I enter CTRL+C on the second process (the non-creating process). The SIGINT signal is not catched in this process. The second process is ended.
>>
>> $cat /proc/xenomai/sched/threads | grep rt
>> 3  4899   rt     cobalt      0   -             X          main
>> 3  4902   rt     cobalt      0   -             X          sysregd
>> 3  4904   rt     cobalt      0   -             X          sysregd
>> 3  4906   rt     cobalt      0   -             X          stest
>> 3  4907   rt     cobalt    256   -             W          remote-agent
>>
>>
>> The rt_sem_p call in the first process also returns with return value 0.
>> This has as consequence that the task 4899test of the first process is also ended.
> 
> Please merge the commit on top of -rc6 I mentioned this morning, which
> fixes the spurious wake up:
> 
> http://git.xenomai.org/xenomai-3.git/commit/?h=next&id=081cbb8b150f30a019245dfb0e2f0b92cc7f2dfd
> 

Actually, I did not mention it, that's why we don't seem to be on the
same page, sorry for this. We should resume the discussion from the
situation obtained with this commit on top of -rc6.

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-29 18:42                   ` Philippe Gerum
@ 2015-07-30 14:28                     ` Frederik Bayart
  2015-07-30 15:08                       ` Frederik Bayart
                                         ` (2 more replies)
  0 siblings, 3 replies; 24+ messages in thread
From: Frederik Bayart @ 2015-07-30 14:28 UTC (permalink / raw)
  To: xenomai@xenomai.org

>On 07/29/2015 08:27 PM, Philippe Gerum wrote:
>>
>> Please merge the commit on top of -rc6 I mentioned this morning, which
>> fixes the spurious wake up:
>>
>> http://git.xenomai.org/xenomai-3.git/commit/?h=next&id=081cbb8b150f30a019245dfb0e2f0b92cc7f2dfd
>>
>
>Actually, I did not mention it, that's why we don't seem to be on the
>same page, sorry for this. We should resume the discussion from the
>situation obtained with this commit on top of -rc6.

I have build a new rc6 kernel & libraries with the new kernel/cobalt/posix/sem.c
The rt_sem_p problem is now solved, the first process is not interrupted anymore.

I still doesn't see the fuse file system like you do.  I'm looking to other problems (select/connect/send/recv on UNIX domain sockets) so I hope that this is not the cause.

I found already that 'select' on  socket(PF_UNIX, SOCK_STREAM, 0)  causes Interrupted system call (errno 4).
If I replace 'select' with '__real_select' the problem seems to be solved, and the select timeout works.
But the select doesn't seem to react on connect. I'm looking at the problem.

Maybe I will see more if I build with --enable-debug.

This is the fuse data of the system :

$ sudo ./stest  --dump-config|grep REGISTRY
based on Xenomai/cobalt v3.0-rc6 -- 
CONFIG_XENO_REGISTRY=1
CONFIG_XENO_REGISTRY_ROOT="/var/run/xenomai"

Is this what I'm supposed to see ?

I configured CONFIG_FUSE_FS=m in the kernel, module fuse is loaded.
The fuse packages are installed :
ii  fuse            2.9.3-15+b1  amd64    Filesystem in Userspace
ii  gvfs-fuse        1.22.2-1    amd64    userspace virtual filesystem - fuse server
ii  libfuse-dev      2.9.3-15+b1  amd64    Filesystem in Userspace (development)
ii  libfuse2:amd64  2.9.3-15+b1  amd64    Filesystem in Userspace (library)

$ xeno-config --info
Xenomai version: Xenomai/cobalt v3.0-rc6 -- 
Linux dev-x10sae 3.18.12-x86-64-xeno-3.0.rc6.1 #1 SMP PREEMPT Thu Jul 30 12:38:10 CEST 2015 x86_64 GNU/Linux
Kernel parameters: BOOT_IMAGE=/boot/vmlinuz-3.18.12-x86-64-xeno-3.0.rc6.1 root=UUID=fc8ecefa-fc73-487f-a045-cffa99c38a11 ro quiet console=tty0 console=ttyS0,115200n8
I-pipe release #1 detected
Cobalt core 3.0-rc6 detected
Compiler: gcc version 4.9.2 (Debian 4.9.2-10) 
Build args: --prefix=/usr --includedir=/usr/include/xenomai --mandir=/usr/share/man --with-testdir=/usr/lib/xenomai/testsuite --with-core=cobalt --enable-smp --enable-pshared --enable-registry --build x86_64-linux-gnu build_alias=x86_64-linux-gnu


If I run the 2 stest processes, this is what I see :
$ find /var/run/xenomai/
/var/run/xenomai/
/var/run/xenomai/root
/var/run/xenomai/root/foo
/var/run/xenomai/root/foo/20678
/var/run/xenomai/root/foo/20667
/var/run/xenomai/root/foo/system

$ mount | grep fuse
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
sysregd on /run/xenomai/root/foo/system type fuse.sysregd (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
stest on /run/xenomai/root/foo/20667 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
stest on /run/xenomai/root/foo/20678 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)

Frederik

>
>-- 
>Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-30 14:28                     ` Frederik Bayart
@ 2015-07-30 15:08                       ` Frederik Bayart
  2015-07-30 16:10                         ` Philippe Gerum
  2015-07-30 15:58                       ` Philippe Gerum
  2015-07-30 16:36                       ` Philippe Gerum
  2 siblings, 1 reply; 24+ messages in thread
From: Frederik Bayart @ 2015-07-30 15:08 UTC (permalink / raw)
  To: xenomai@xenomai.org

>On Thursday, 30 July 2015, 16:28, Frederik Bayart <frederik_bayart@yahoo.co.uk> wrote:
>>On 07/29/2015 08:27 PM, Philippe Gerum wrote:
>>>
>>> Please merge the commit on top of -rc6 I mentioned this morning, which
>>> fixes the spurious wake up:
>>>
>>> http://git.xenomai.org/xenomai-3.git/commit/?h=next&id=081cbb8b150f30a019245dfb0e2f0b92cc7f2dfd
>>>
>>
>>Actually, I did not mention it, that's why we don't seem to be on the
>>same page, sorry for this. We should resume the discussion from the
>>situation obtained with this commit on top of -rc6.
>
>I have build a new rc6 kernel & libraries with the new kernel/cobalt/posix/sem.c
>The rt_sem_p problem is now solved, the first process is not interrupted anymore.
>
>I still doesn't see the fuse file system like you do.  I'm looking to other problems (select/connect/send/recv on UNIX domain sockets) so I hope that this is not the cause.
>
>I found already that 'select' on  socket(PF_UNIX, SOCK_STREAM, 0)  causes Interrupted system call (errno 4).
>If I replace 'select' with '__real_select' the problem seems to be solved, and the select timeout works.
>But the select doesn't seem to react on connect. I'm looking at the problem.


I just notice that the flood of Interrupted system calls is only cause when build with trank. When build with alchemy, Interrupted system call just happens once.

>
>Maybe I will see more if I build with --enable-debug.
>
>This is the fuse data of the system :
>
>$ sudo ./stest  --dump-config|grep REGISTRY
>based on Xenomai/cobalt v3.0-rc6 --
>CONFIG_XENO_REGISTRY=1
>CONFIG_XENO_REGISTRY_ROOT="/var/run/xenomai"
>
>Is this what I'm supposed to see ?
>
>I configured CONFIG_FUSE_FS=m in the kernel, module fuse is loaded.
>The fuse packages are installed :
>ii  fuse            2.9.3-15+b1  amd64    Filesystem in Userspace
>ii  gvfs-fuse        1.22.2-1    amd64    userspace virtual filesystem - fuse server
>ii  libfuse-dev      2.9.3-15+b1  amd64    Filesystem in Userspace (development)
>ii  libfuse2:amd64  2.9.3-15+b1  amd64    Filesystem in Userspace (library)
>
>$ xeno-config --info
>Xenomai version: Xenomai/cobalt v3.0-rc6 --
>Linux dev-x10sae 3.18.12-x86-64-xeno-3.0.rc6.1 #1 SMP PREEMPT Thu Jul 30 12:38:10 CEST 2015 x86_64 GNU/Linux
>Kernel parameters: BOOT_IMAGE=/boot/vmlinuz-3.18.12-x86-64-xeno-3.0.rc6.1 root=UUID=fc8ecefa-fc73-487f-a045-cffa99c38a11 ro quiet console=tty0 console=ttyS0,115200n8
>I-pipe release #1 detected
>Cobalt core 3.0-rc6 detected
>Compiler: gcc version 4.9.2 (Debian 4.9.2-10)
>Build args: --prefix=/usr --includedir=/usr/include/xenomai --mandir=/usr/share/man --with-testdir=/usr/lib/xenomai/testsuite --with-core=cobalt --enable-smp --enable-pshared --enable-registry --build x86_64-linux-gnu build_alias=x86_64-linux-gnu
>
>
>If I run the 2 stest processes, this is what I see :
>$ find /var/run/xenomai/
>/var/run/xenomai/
>/var/run/xenomai/root
>/var/run/xenomai/root/foo
>/var/run/xenomai/root/foo/20678
>/var/run/xenomai/root/foo/20667
>/var/run/xenomai/root/foo/system
>
>$ mount | grep fuse
>fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
>sysregd on /run/xenomai/root/foo/system type fuse.sysregd (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
>stest on /run/xenomai/root/foo/20667 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
>stest on /run/xenomai/root/foo/20678 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
>
>
>Frederik
>
>>
>>--
>>Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-30 14:28                     ` Frederik Bayart
  2015-07-30 15:08                       ` Frederik Bayart
@ 2015-07-30 15:58                       ` Philippe Gerum
  2015-07-30 16:36                       ` Philippe Gerum
  2 siblings, 0 replies; 24+ messages in thread
From: Philippe Gerum @ 2015-07-30 15:58 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/30/2015 04:28 PM, Frederik Bayart wrote:

> I found already that 'select' on  socket(PF_UNIX, SOCK_STREAM, 0)  causes Interrupted system call (errno 4).
> If I replace 'select' with '__real_select' the problem seems to be solved, and the select timeout works.
> But the select doesn't seem to react on connect. I'm looking at the problem.
> 

It all depends on the flags passed to xeno-config (*): if --posix or
--rtdm is given (alone, or along with --native, --alchemy or whatever
other non-POSIX API), then POSIX calls will be wrapped to the
Xenomai/cobalt counterparts, in which case select() would call the
Xenomai implementation for instance.

If neither --posix nor --rtdm are given, then no wrapping takes place,
and select() will call the regular linux implementation.

If __real_select() works successfully in your app and differently than
select(), then wrapping is in effect, and this means that your file
descriptors are plain regular ones, obtained by standard linux syscalls
(__real_open, __real_socket), not by Xenomai syscalls (open, socket).

You may want to check for a mismatch due to POSIX symbol wrapping in
your app.

(*)
http://www.xenomai.org/documentation/xenomai-3/html/man1/xeno-config/index.html

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-30 15:08                       ` Frederik Bayart
@ 2015-07-30 16:10                         ` Philippe Gerum
  2015-07-31 17:54                           ` Frederik Bayart
  0 siblings, 1 reply; 24+ messages in thread
From: Philippe Gerum @ 2015-07-30 16:10 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/30/2015 05:08 PM, Frederik Bayart wrote:
>> On Thursday, 30 July 2015, 16:28, Frederik Bayart <frederik_bayart@yahoo.co.uk> wrote:
>>> On 07/29/2015 08:27 PM, Philippe Gerum wrote:
>>>>
>>>> Please merge the commit on top of -rc6 I mentioned this morning, which
>>>> fixes the spurious wake up:
>>>>
>>>> http://git.xenomai.org/xenomai-3.git/commit/?h=next&id=081cbb8b150f30a019245dfb0e2f0b92cc7f2dfd
>>>>
>>>
>>> Actually, I did not mention it, that's why we don't seem to be on the
>>> same page, sorry for this. We should resume the discussion from the
>>> situation obtained with this commit on top of -rc6.
>>
>> I have build a new rc6 kernel & libraries with the new kernel/cobalt/posix/sem.c
>> The rt_sem_p problem is now solved, the first process is not interrupted anymore.
>>
>> I still doesn't see the fuse file system like you do.  I'm looking to other problems (select/connect/send/recv on UNIX domain sockets) so I hope that this is not the cause.
>>
>> I found already that 'select' on  socket(PF_UNIX, SOCK_STREAM, 0)  causes Interrupted system call (errno 4).
>> If I replace 'select' with '__real_select' the problem seems to be solved, and the select timeout works.
>> But the select doesn't seem to react on connect. I'm looking at the problem.
> 
> 
> I just notice that the flood of Interrupted system calls is only cause when build with trank. When build with alchemy, Interrupted system call just happens once.

libtrank is just an overlay on top of libalchemy, only consisting of
fairly simple wrappers. I would suspect a difference in the flags passed
to xeno-config instead.

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-30 14:28                     ` Frederik Bayart
  2015-07-30 15:08                       ` Frederik Bayart
  2015-07-30 15:58                       ` Philippe Gerum
@ 2015-07-30 16:36                       ` Philippe Gerum
  2015-07-31 16:04                         ` Frederik Bayart
  2 siblings, 1 reply; 24+ messages in thread
From: Philippe Gerum @ 2015-07-30 16:36 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/30/2015 04:28 PM, Frederik Bayart wrote:
>> On 07/29/2015 08:27 PM, Philippe Gerum wrote:
>>>
>>> Please merge the commit on top of -rc6 I mentioned this morning, which
>>> fixes the spurious wake up:
>>>
>>> http://git.xenomai.org/xenomai-3.git/commit/?h=next&id=081cbb8b150f30a019245dfb0e2f0b92cc7f2dfd
>>>
>>
>> Actually, I did not mention it, that's why we don't seem to be on the
>> same page, sorry for this. We should resume the discussion from the
>> situation obtained with this commit on top of -rc6.
> 
> I have build a new rc6 kernel & libraries with the new kernel/cobalt/posix/sem.c
> The rt_sem_p problem is now solved, the first process is not interrupted anymore.
> 
> I still doesn't see the fuse file system like you do.  I'm looking to other problems (select/connect/send/recv on UNIX domain sockets) so I hope that this is not the cause.
> 
> I found already that 'select' on  socket(PF_UNIX, SOCK_STREAM, 0)  causes Interrupted system call (errno 4).
> If I replace 'select' with '__real_select' the problem seems to be solved, and the select timeout works.
> But the select doesn't seem to react on connect. I'm looking at the problem.
> 
> Maybe I will see more if I build with --enable-debug.
> 
> This is the fuse data of the system :
> 
> $ sudo ./stest  --dump-config|grep REGISTRY
> based on Xenomai/cobalt v3.0-rc6 -- 
> CONFIG_XENO_REGISTRY=1
> CONFIG_XENO_REGISTRY_ROOT="/var/run/xenomai"
> 
> Is this what I'm supposed to see ?
>

Yes.

> I configured CONFIG_FUSE_FS=m in the kernel, module fuse is loaded.
> The fuse packages are installed :
> ii  fuse            2.9.3-15+b1  amd64    Filesystem in Userspace
> ii  gvfs-fuse        1.22.2-1    amd64    userspace virtual filesystem - fuse server
> ii  libfuse-dev      2.9.3-15+b1  amd64    Filesystem in Userspace (development)
> ii  libfuse2:amd64  2.9.3-15+b1  amd64    Filesystem in Userspace (library)
> 
> $ xeno-config --info
> Xenomai version: Xenomai/cobalt v3.0-rc6 -- 
> Linux dev-x10sae 3.18.12-x86-64-xeno-3.0.rc6.1 #1 SMP PREEMPT Thu Jul 30 12:38:10 CEST 2015 x86_64 GNU/Linux
> Kernel parameters: BOOT_IMAGE=/boot/vmlinuz-3.18.12-x86-64-xeno-3.0.rc6.1 root=UUID=fc8ecefa-fc73-487f-a045-cffa99c38a11 ro quiet console=tty0 console=ttyS0,115200n8
> I-pipe release #1 detected
> Cobalt core 3.0-rc6 detected
> Compiler: gcc version 4.9.2 (Debian 4.9.2-10) 
> Build args: --prefix=/usr --includedir=/usr/include/xenomai --mandir=/usr/share/man --with-testdir=/usr/lib/xenomai/testsuite --with-core=cobalt --enable-smp --enable-pshared --enable-registry --build x86_64-linux-gnu build_alias=x86_64-linux-gnu
> 
> 
> If I run the 2 stest processes, this is what I see :
> $ find /var/run/xenomai/
> /var/run/xenomai/
> /var/run/xenomai/root
> /var/run/xenomai/root/foo
> /var/run/xenomai/root/foo/20678
> /var/run/xenomai/root/foo/20667
> /var/run/xenomai/root/foo/system
> 
> $ mount | grep fuse
> fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
> sysregd on /run/xenomai/root/foo/system type fuse.sysregd (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
> stest on /run/xenomai/root/foo/20667 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
> stest on /run/xenomai/root/foo/20678 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)

I suspect a permission issue, since you attempt to traverse the mount
points apparently with regular user privileges. Any luck with "sudo find
..." ?

Alternatively, passing --shared-registry to your app would enable public
access to the registry of your application.

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-30 16:36                       ` Philippe Gerum
@ 2015-07-31 16:04                         ` Frederik Bayart
  0 siblings, 0 replies; 24+ messages in thread
From: Frederik Bayart @ 2015-07-31 16:04 UTC (permalink / raw)
  To: xenomai@xenomai.org

>On Thursday, 30 July 2015, 18:36, Philippe Gerum <rpm@xenomai.org> wrote:
>On 07/30/2015 04:28 PM, Frederik Bayart wrote:
>>> On 07/29/2015 08:27 PM, Philippe Gerum wrote:
>>>>
>>>> Please merge the commit on top of -rc6 I mentioned this morning, which
>>>> fixes the spurious wake up:
>>>>
>>>> http://git.xenomai.org/xenomai-3.git/commit/?h=next&id=081cbb8b150f30a019245dfb0e2f0b92cc7f2dfd
>>>>
>>>
>>> Actually, I did not mention it, that's why we don't seem to be on the
>>> same page, sorry for this. We should resume the discussion from the
>>> situation obtained with this commit on top of -rc6.
>>
>> I have build a new rc6 kernel & libraries with the new kernel/cobalt/posix/sem.c
>> The rt_sem_p problem is now solved, the first process is not interrupted anymore.
>>
>> I still doesn't see the fuse file system like you do.  I'm looking to other problems (select/connect/send/recv on UNIX domain sockets) so I hope that this is not the cause.
>>
>> I found already that 'select' on  socket(PF_UNIX, SOCK_STREAM, 0)  causes Interrupted system call (errno 4).
>> If I replace 'select' with '__real_select' the problem seems to be solved, and the select timeout works.
>> But the select doesn't seem to react on connect. I'm looking at the problem.
>>
>> Maybe I will see more if I build with --enable-debug.
>>
>> This is the fuse data of the system :
>>
>> $ sudo ./stest  --dump-config|grep REGISTRY
>> based on Xenomai/cobalt v3.0-rc6 --
>> CONFIG_XENO_REGISTRY=1
>> CONFIG_XENO_REGISTRY_ROOT="/var/run/xenomai"
>>
>> Is this what I'm supposed to see ?
>>
>
>Yes.
>
>> I configured CONFIG_FUSE_FS=m in the kernel, module fuse is loaded.
>> The fuse packages are installed :
>> ii  fuse            2.9.3-15+b1  amd64    Filesystem in Userspace
>> ii  gvfs-fuse        1.22.2-1    amd64    userspace virtual filesystem - fuse server
>> ii  libfuse-dev      2.9.3-15+b1  amd64    Filesystem in Userspace (development)
>> ii  libfuse2:amd64  2.9.3-15+b1  amd64    Filesystem in Userspace (library)
>>
>> $ xeno-config --info
>> Xenomai version: Xenomai/cobalt v3.0-rc6 --
>> Linux dev-x10sae 3.18.12-x86-64-xeno-3.0.rc6.1 #1 SMP PREEMPT Thu Jul 30 12:38:10 CEST 2015 x86_64 GNU/Linux
>> Kernel parameters: BOOT_IMAGE=/boot/vmlinuz-3.18.12-x86-64-xeno-3.0.rc6.1 root=UUID=fc8ecefa-fc73-487f-a045-cffa99c38a11 ro quiet console=tty0 console=ttyS0,115200n8
>> I-pipe release #1 detected
>> Cobalt core 3.0-rc6 detected
>> Compiler: gcc version 4.9.2 (Debian 4.9.2-10)
>> Build args: --prefix=/usr --includedir=/usr/include/xenomai --mandir=/usr/share/man --with-testdir=/usr/lib/xenomai/testsuite --with-core=cobalt --enable-smp --enable-pshared --enable-registry --build x86_64-linux-gnu build_alias=x86_64-linux-gnu
>>
>>
>> If I run the 2 stest processes, this is what I see :
>> $ find /var/run/xenomai/
>> /var/run/xenomai/
>> /var/run/xenomai/root
>> /var/run/xenomai/root/foo
>> /var/run/xenomai/root/foo/20678
>> /var/run/xenomai/root/foo/20667
>> /var/run/xenomai/root/foo/system
>>
>> $ mount | grep fuse
>> fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
>> sysregd on /run/xenomai/root/foo/system type fuse.sysregd (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
>> stest on /run/xenomai/root/foo/20667 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
>> stest on /run/xenomai/root/foo/20678 type fuse.stest (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
>
>I suspect a permission issue, since you attempt to traverse the mount
>points apparently with regular user privileges. Any luck with "sudo find
>..." ?
>
>Alternatively, passing --shared-registry to your app would enable public
>access to the registry of your application.

This was the cause, thank you !

Frederik
>
>-- 
>Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-30 16:10                         ` Philippe Gerum
@ 2015-07-31 17:54                           ` Frederik Bayart
  2015-08-01  7:59                             ` Philippe Gerum
  2015-08-01  8:43                             ` Philippe Gerum
  0 siblings, 2 replies; 24+ messages in thread
From: Frederik Bayart @ 2015-07-31 17:54 UTC (permalink / raw)
  To: xenomai@xenomai.org

>On Thursday, 30 July 2015, 18:10, Philippe Gerum <rpm@xenomai.org> wrote:
>On 07/30/2015 05:08 PM, Frederik Bayart wrote:
>>> On Thursday, 30 July 2015, 16:28, Frederik Bayart <frederik_bayart@yahoo.co.uk> wrote:
>>>> On 07/29/2015 08:27 PM, Philippe Gerum wrote:
>>>>>
>>>>> Please merge the commit on top of -rc6 I mentioned this morning, which
>>>>> fixes the spurious wake up:
>>>>>
>>>>> http://git.xenomai.org/xenomai-3.git/commit/?h=next&id=081cbb8b150f30a019245dfb0e2f0b92cc7f2dfd
>>>>>
>>>>
>>>> Actually, I did not mention it, that's why we don't seem to be on the
>>>> same page, sorry for this. We should resume the discussion from the
>>>> situation obtained with this commit on top of -rc6.
>>>
>>> I have build a new rc6 kernel & libraries with the new kernel/cobalt/posix/sem.c
>>> The rt_sem_p problem is now solved, the first process is not interrupted anymore.
>>>
>>> I still doesn't see the fuse file system like you do.  I'm looking to other problems (select/connect/send/recv on UNIX domain sockets) so I hope that this is not the cause.
>>>
>>> I found already that 'select' on  socket(PF_UNIX, SOCK_STREAM, 0)  causes Interrupted system call (errno 4).
>>> If I replace 'select' with '__real_select' the problem seems to be solved, and the select timeout works.
>>> But the select doesn't seem to react on connect. I'm looking at the problem.
>>
>>
>> I just notice that the flood of Interrupted system calls is only cause when build with trank. When build with alchemy, Interrupted system call just happens once.
>
>libtrank is just an overlay on top of libalchemy, only consisting of
>fairly simple wrappers. I would suspect a difference in the flags passed
>to xeno-config instead.

I succeeded to start my server using alchemy directly.

Via trank the program generates a flood of error:

$ sudo ./ptest

ptest.c:68 ERROR: select(4): Interrupted system call
ptest.c:68 ERROR: select(4): Interrupted system call
ptest.c:68 ERROR: select(4): Interrupted system call
...

In attachment a test file ptest.c and makefile to reproduce the problem.

My original server uses both native and posix calls, for that I used both native and posix flags.

XENO_CFLAGS = $(shell $(XENOCONFIG) --posix  --compat --native --cflags )
XENO_LDFLAGS = $(shell $(XENOCONFIG) --posix --compat --native --ldflags )

With alchemy directly there is no problem :

XENO_CFLAGS = $(shell $(XENOCONFIG) --alchemy --cflags)
XENO_LDFLAGS = $(shell $(XENOCONFIG) --alchemy --ldflags)


I noticed also that for the documentation of the transition kit at the bottom http://xenomai.org/migrating-from-xenomai-2-x-to-3-x/#Using_the_Transition_Kit :

If I link with xeno-config  --posix --ldflags --compat, I get :

cc -Wl,@/usr/lib/cobalt.wrappers -ltrank   /usr/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/lib/dynlist.ld -L/usr/lib -lcobalt -lpthread -lrt    -lfuse -pthread  -o ptest ptest.o
/usr/lib/libtrank.so: undefined reference to `threadobj_set_schedparam'
/usr/lib/libtrank.so: undefined reference to `__current_rt_alarm_create'
/usr/lib/libtrank.so: undefined reference to `rt_task_self'
/usr/lib/libtrank.so: undefined reference to `rt_task_wait_period'
/usr/lib/libtrank.so: undefined reference to `xnfree'
/usr/lib/libtrank.so: undefined reference to `__current_rt_event_create'
/usr/lib/libtrank.so: undefined reference to `rt_task_start'
/usr/lib/libtrank.so: undefined reference to `rt_task_delete'
/usr/lib/libtrank.so: undefined reference to `rt_task_set_affinity'
/usr/lib/libtrank.so: undefined reference to `rt_task_suspend'
/usr/lib/libtrank.so: undefined reference to `__current_rt_event_clear'
/usr/lib/libtrank.so: undefined reference to `threadobj_irq_prio'
/usr/lib/libtrank.so: undefined reference to `__current_rt_event_signal'
/usr/lib/libtrank.so: undefined reference to `__current_rt_task_create'
/usr/lib/libtrank.so: undefined reference to `__current_rt_task_set_periodic'
/usr/lib/libtrank.so: undefined reference to `__current_rt_pipe_create'
/usr/lib/libtrank.so: undefined reference to `__threadobj_current'
/usr/lib/libtrank.so: undefined reference to `__current_rt_alarm_delete'
/usr/lib/libtrank.so: undefined reference to `xnmalloc'
collect2: error: ld returned 1 exit status
makefile:27: recipe for target 'ptest' failed
make: *** [ptest] Error 1

With the --native flag added, this is solved because  -lalchemy -lcopperplate is then added.

Frederik

>
>
>-- 
>Philippe.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: makefile
Type: application/octet-stream
Size: 773 bytes
Desc: not available
URL: <http://xenomai.org/pipermail/xenomai/attachments/20150731/63e2eefc/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ptest.c
Type: text/x-csrc
Size: 3831 bytes
Desc: not available
URL: <http://xenomai.org/pipermail/xenomai/attachments/20150731/63e2eefc/attachment.c>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-31 17:54                           ` Frederik Bayart
@ 2015-08-01  7:59                             ` Philippe Gerum
  2015-08-01  8:43                             ` Philippe Gerum
  1 sibling, 0 replies; 24+ messages in thread
From: Philippe Gerum @ 2015-08-01  7:59 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/31/2015 07:54 PM, Frederik Bayart wrote:
>> On Thursday, 30 July 2015, 18:10, Philippe Gerum <rpm@xenomai.org> wrote:
>> On 07/30/2015 05:08 PM, Frederik Bayart wrote:
>>>> On Thursday, 30 July 2015, 16:28, Frederik Bayart <frederik_bayart@yahoo.co.uk> wrote:
>>>>> On 07/29/2015 08:27 PM, Philippe Gerum wrote:
>>>>>>
>>>>>> Please merge the commit on top of -rc6 I mentioned this morning, which
>>>>>> fixes the spurious wake up:
>>>>>>
>>>>>> http://git.xenomai.org/xenomai-3.git/commit/?h=next&id=081cbb8b150f30a019245dfb0e2f0b92cc7f2dfd
>>>>>>
>>>>>
>>>>> Actually, I did not mention it, that's why we don't seem to be on the
>>>>> same page, sorry for this. We should resume the discussion from the
>>>>> situation obtained with this commit on top of -rc6.
>>>>
>>>> I have build a new rc6 kernel & libraries with the new kernel/cobalt/posix/sem.c
>>>> The rt_sem_p problem is now solved, the first process is not interrupted anymore.
>>>>
>>>> I still doesn't see the fuse file system like you do.  I'm looking to other problems (select/connect/send/recv on UNIX domain sockets) so I hope that this is not the cause.
>>>>
>>>> I found already that 'select' on  socket(PF_UNIX, SOCK_STREAM, 0)  causes Interrupted system call (errno 4).
>>>> If I replace 'select' with '__real_select' the problem seems to be solved, and the select timeout works.
>>>> But the select doesn't seem to react on connect. I'm looking at the problem.
>>>
>>>
>>> I just notice that the flood of Interrupted system calls is only cause when build with trank. When build with alchemy, Interrupted system call just happens once.
>>
>> libtrank is just an overlay on top of libalchemy, only consisting of
>> fairly simple wrappers. I would suspect a difference in the flags passed
>> to xeno-config instead.
> 
> I succeeded to start my server using alchemy directly.
> 
> Via trank the program generates a flood of error:
> 
> $ sudo ./ptest
> 
> ptest.c:68 ERROR: select(4): Interrupted system call
> ptest.c:68 ERROR: select(4): Interrupted system call
> ptest.c:68 ERROR: select(4): Interrupted system call
> ...
> 
> In attachment a test file ptest.c and makefile to reproduce the problem.
> 

Ok, I'll have a look.

> My original server uses both native and posix calls, for that I used both native and posix flags.
> 
> XENO_CFLAGS = $(shell $(XENOCONFIG) --posix  --compat --native --cflags )
> XENO_LDFLAGS = $(shell $(XENOCONFIG) --posix --compat --native --ldflags )
> 

--compat --native is redundant, --native enables --compat implicitly.
--alchemy does not.

> With alchemy directly there is no problem :
> 
> XENO_CFLAGS = $(shell $(XENOCONFIG) --alchemy --cflags)
> XENO_LDFLAGS = $(shell $(XENOCONFIG) --alchemy --ldflags)
> 
> 
> I noticed also that for the documentation of the transition kit at the bottom http://xenomai.org/migrating-from-xenomai-2-x-to-3-x/#Using_the_Transition_Kit :
> 
> If I link with xeno-config  --posix --ldflags --compat, I get :
> 
> cc -Wl,@/usr/lib/cobalt.wrappers -ltrank   /usr/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/lib/dynlist.ld -L/usr/lib -lcobalt -lpthread -lrt    -lfuse -pthread  -o ptest ptest.o
> /usr/lib/libtrank.so: undefined reference to `threadobj_set_schedparam'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_alarm_create'
> /usr/lib/libtrank.so: undefined reference to `rt_task_self'
> /usr/lib/libtrank.so: undefined reference to `rt_task_wait_period'
> /usr/lib/libtrank.so: undefined reference to `xnfree'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_event_create'
> /usr/lib/libtrank.so: undefined reference to `rt_task_start'
> /usr/lib/libtrank.so: undefined reference to `rt_task_delete'
> /usr/lib/libtrank.so: undefined reference to `rt_task_set_affinity'
> /usr/lib/libtrank.so: undefined reference to `rt_task_suspend'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_event_clear'
> /usr/lib/libtrank.so: undefined reference to `threadobj_irq_prio'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_event_signal'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_task_create'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_task_set_periodic'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_pipe_create'
> /usr/lib/libtrank.so: undefined reference to `__threadobj_current'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_alarm_delete'
> /usr/lib/libtrank.so: undefined reference to `xnmalloc'
> collect2: error: ld returned 1 exit status
> makefile:27: recipe for target 'ptest' failed
> make: *** [ptest] Error 1
> 
> With the --native flag added, this is solved because  -lalchemy -lcopperplate is then added.
> 

This is expected, compat mode is aimed at the legacy native API only.

-- 
Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-07-31 17:54                           ` Frederik Bayart
  2015-08-01  7:59                             ` Philippe Gerum
@ 2015-08-01  8:43                             ` Philippe Gerum
  2015-08-03  9:59                               ` Frederik Bayart
  1 sibling, 1 reply; 24+ messages in thread
From: Philippe Gerum @ 2015-08-01  8:43 UTC (permalink / raw)
  To: Frederik Bayart, xenomai@xenomai.org

On 07/31/2015 07:54 PM, Frederik Bayart wrote:
>> On Thursday, 30 July 2015, 18:10, Philippe Gerum <rpm@xenomai.org> wrote:
>> On 07/30/2015 05:08 PM, Frederik Bayart wrote:
>>>> On Thursday, 30 July 2015, 16:28, Frederik Bayart <frederik_bayart@yahoo.co.uk> wrote:
>>>>> On 07/29/2015 08:27 PM, Philippe Gerum wrote:
>>>>>>
>>>>>> Please merge the commit on top of -rc6 I mentioned this morning, which
>>>>>> fixes the spurious wake up:
>>>>>>
>>>>>> http://git.xenomai.org/xenomai-3.git/commit/?h=next&id=081cbb8b150f30a019245dfb0e2f0b92cc7f2dfd
>>>>>>
>>>>>
>>>>> Actually, I did not mention it, that's why we don't seem to be on the
>>>>> same page, sorry for this. We should resume the discussion from the
>>>>> situation obtained with this commit on top of -rc6.
>>>>
>>>> I have build a new rc6 kernel & libraries with the new kernel/cobalt/posix/sem.c
>>>> The rt_sem_p problem is now solved, the first process is not interrupted anymore.
>>>>
>>>> I still doesn't see the fuse file system like you do.  I'm looking to other problems (select/connect/send/recv on UNIX domain sockets) so I hope that this is not the cause.
>>>>
>>>> I found already that 'select' on  socket(PF_UNIX, SOCK_STREAM, 0)  causes Interrupted system call (errno 4).
>>>> If I replace 'select' with '__real_select' the problem seems to be solved, and the select timeout works.
>>>> But the select doesn't seem to react on connect. I'm looking at the problem.
>>>
>>>
>>> I just notice that the flood of Interrupted system calls is only cause when build with trank. When build with alchemy, Interrupted system call just happens once.
>>
>> libtrank is just an overlay on top of libalchemy, only consisting of
>> fairly simple wrappers. I would suspect a difference in the flags passed
>> to xeno-config instead.
> 
> I succeeded to start my server using alchemy directly.
> 
> Via trank the program generates a flood of error:
> 
> $ sudo ./ptest
> 
> ptest.c:68 ERROR: select(4): Interrupted system call
> ptest.c:68 ERROR: select(4): Interrupted system call
> ptest.c:68 ERROR: select(4): Interrupted system call
> ...
> 
> In attachment a test file ptest.c and makefile to reproduce the problem.
> 
> My original server uses both native and posix calls, for that I used both native and posix flags.
> 
> XENO_CFLAGS = $(shell $(XENOCONFIG) --posix  --compat --native --cflags )
> XENO_LDFLAGS = $(shell $(XENOCONFIG) --posix --compat --native --ldflags )
> 
> With alchemy directly there is no problem :
> 
> XENO_CFLAGS = $(shell $(XENOCONFIG) --alchemy --cflags)
> XENO_LDFLAGS = $(shell $(XENOCONFIG) --alchemy --ldflags)
> 
> 
> I noticed also that for the documentation of the transition kit at the bottom http://xenomai.org/migrating-from-xenomai-2-x-to-3-x/#Using_the_Transition_Kit :
> 
> If I link with xeno-config  --posix --ldflags --compat, I get :
> 
> cc -Wl,@/usr/lib/cobalt.wrappers -ltrank   /usr/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/lib/dynlist.ld -L/usr/lib -lcobalt -lpthread -lrt    -lfuse -pthread  -o ptest ptest.o
> /usr/lib/libtrank.so: undefined reference to `threadobj_set_schedparam'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_alarm_create'
> /usr/lib/libtrank.so: undefined reference to `rt_task_self'
> /usr/lib/libtrank.so: undefined reference to `rt_task_wait_period'
> /usr/lib/libtrank.so: undefined reference to `xnfree'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_event_create'
> /usr/lib/libtrank.so: undefined reference to `rt_task_start'
> /usr/lib/libtrank.so: undefined reference to `rt_task_delete'
> /usr/lib/libtrank.so: undefined reference to `rt_task_set_affinity'
> /usr/lib/libtrank.so: undefined reference to `rt_task_suspend'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_event_clear'
> /usr/lib/libtrank.so: undefined reference to `threadobj_irq_prio'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_event_signal'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_task_create'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_task_set_periodic'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_pipe_create'
> /usr/lib/libtrank.so: undefined reference to `__threadobj_current'
> /usr/lib/libtrank.so: undefined reference to `__current_rt_alarm_delete'
> /usr/lib/libtrank.so: undefined reference to `xnmalloc'
> collect2: error: ld returned 1 exit status
> makefile:27: recipe for target 'ptest' failed
> make: *** [ptest] Error 1
> 
> With the --native flag added, this is solved because  -lalchemy -lcopperplate is then added.

The issue is not between --alchemy and --native, but with --posix being
added or not. I could not reproduce this behavior (x86, ppc or arm)
using your exact test code (I can see timeouts triggering each 5s), but
looking at it, I'm pretty sure this is due to passing regular linux fds
(from socket(AF_UNIX) to RTDM services.

When --posix is given, select(), socket() and friends will be routed to
RTDM _first_, which will check whether the corresponding channels are
connected to a real-time driver. If the fds are not managed by RTDM, the
call will be redirected to the glibc eventually. I don't explain why
your code receives EINTR from RTDM's select() yet, but this is most
likely not related to libtrank. This behavior is unexpected though, so
we have to find why Xenomai's select() behaves like this.

In the meantime, if you want to mix Xenomai/POSIX calls with regular
glibc ones when --posix is in effect, you can alternatively:

- tag all regular POSIX calls for which a Xenomai counterpart exist with
__STD(call(args))
- invoke __real_call(args)

Alternatively, you can drop --posix which will disable the POSIX
wrapping for your code, then invoke __RT(call(args)) explicitly for
Xenomai real-time services.

Philippe.


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process
  2015-08-01  8:43                             ` Philippe Gerum
@ 2015-08-03  9:59                               ` Frederik Bayart
  0 siblings, 0 replies; 24+ messages in thread
From: Frederik Bayart @ 2015-08-03  9:59 UTC (permalink / raw)
  To: xenomai@xenomai.org

Sorry for previous mail with no additional content, yahoo mail client is very sensitive apparently.

> On Saturday, 1 August 2015, 10:43, Philippe Gerum <rpm@xenomai.org> wrote:
>On 07/31/2015 07:54 PM, Frederik Bayart wrote:
>>> On Thursday, 30 July 2015, 18:10, Philippe Gerum <rpm@xenomai.org> wrote:
>>> On 07/30/2015 05:08 PM, Frederik Bayart wrote:
>>>>> On Thursday, 30 July 2015, 16:28, Frederik Bayart <frederik_bayart@yahoo.co.uk> wrote:
>>>>>
>>>>> I found already that 'select' on  socket(PF_UNIX, SOCK_STREAM, 0)  causes Interrupted system call (errno 4).
>>>>> If I replace 'select' with '__real_select' the problem seems to be solved, and the select timeout works.
>>>>> But the select doesn't seem to react on connect. I'm looking at the problem.
>>>>
>>>>
>>>> I just notice that the flood of Interrupted system calls is only cause when build with trank. When build with alchemy, Interrupted system call just happens once.
>>>
>>> libtrank is just an overlay on top of libalchemy, only consisting of
>>> fairly simple wrappers. I would suspect a difference in the flags passed
>>> to xeno-config instead.
>>
>> I succeeded to start my server using alchemy directly.
>>
>> Via trank the program generates a flood of error:
>>
>> $ sudo ./ptest
>>
>> ptest.c:68 ERROR: select(4): Interrupted system call
>> ptest.c:68 ERROR: select(4): Interrupted system call
>> ptest.c:68 ERROR: select(4): Interrupted system call
>> ...
>>
>> In attachment a test file ptest.c and makefile to reproduce the problem.
>>
>> My original server uses both native and posix calls, for that I used both native and posix flags.
>>
>> XENO_CFLAGS = $(shell $(XENOCONFIG) --posix  --compat --native --cflags )
>> XENO_LDFLAGS = $(shell $(XENOCONFIG) --posix --compat --native --ldflags )
>>
>> With alchemy directly there is no problem :
>>
>> XENO_CFLAGS = $(shell $(XENOCONFIG) --alchemy --cflags)
>> XENO_LDFLAGS = $(shell $(XENOCONFIG) --alchemy --ldflags)
>>
>>
>> I noticed also that for the documentation of the transition kit at the bottom http://xenomai.org/migrating-from-xenomai-2-x-to-3-x/#Using_the_Transition_Kit :
>>
>> If I link with xeno-config  --posix --ldflags --compat, I get :
>>
>> cc -Wl,@/usr/lib/cobalt.wrappers -ltrank  /usr/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/lib/dynlist.ld -L/usr/lib -lcobalt -lpthread -lrt    -lfuse -pthread  -o ptest ptest.o
>> /usr/lib/libtrank.so: undefined reference to `threadobj_set_schedparam'
>> /usr/lib/libtrank.so: undefined reference to `__current_rt_alarm_create'
>> /usr/lib/libtrank.so: undefined reference to `rt_task_self'
>...
>> /usr/lib/libtrank.so: undefined reference to `__current_rt_alarm_delete'
>> /usr/lib/libtrank.so: undefined reference to `xnmalloc'
>> collect2: error: ld returned 1 exit status
>> makefile:27: recipe for target 'ptest' failed
>> make: *** [ptest] Error 1
>>
>> With the --native flag added, this is solved because  -lalchemy -lcopperplate is then added.
>
>The issue is not between --alchemy and --native, but with --posix being
>added or not. I could not reproduce this behavior (x86, ppc or arm)
>using your exact test code (I can see timeouts triggering each 5s), but
>looking at it, I'm pretty sure this is due to passing regular linux fds
>(from socket(AF_UNIX) to RTDM services.
>
>When --posix is given, select(), socket() and friends will be routed to
>RTDM _first_, which will check whether the corresponding channels are
>connected to a real-time driver. If the fds are not managed by RTDM, the
>call will be redirected to the glibc eventually. I don't explain why
>your code receives EINTR from RTDM's select() yet, but this is most
>likely not related to libtrank. This behavior is unexpected though, so
>we have to find why Xenomai's select() behaves like this.

If I can help, let me know, then I try to make some time to look at it.
If you can't reproduce the problem, I could always run some test program on my PC.
What is the best way to debug it ?
Just to exclude : could it be an installation issue ?

Have you xenomai installed in /usr/xenomai/... ?
I'm using debian installation so that could be a difference. Any hardcoded library paths ?

Frederik

>
>In the meantime, if you want to mix Xenomai/POSIX calls with regular
>glibc ones when --posix is in effect, you can alternatively:
>
>- tag all regular POSIX calls for which a Xenomai counterpart exist with
>__STD(call(args))
>- invoke __real_call(args)
>
>Alternatively, you can drop --posix which will disable the POSIX
>wrapping for your code, then invoke __RT(call(args)) explicitly for
>Xenomai real-time services.
>
>Philippe.



^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2015-08-03  9:59 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-13 13:37 [Xenomai] xenomai-3.0-rc5 : binding named semaphores from external process Frederik Bayart
2015-07-14  9:53 ` Philippe Gerum
2015-07-15 12:45   ` Frederik Bayart
2015-07-16 15:35     ` Philippe Gerum
2015-07-28 15:19       ` Frederik Bayart
2015-07-29 10:12         ` Philippe Gerum
2015-07-29 11:48           ` Frederik Bayart
2015-07-29 12:20             ` Philippe Gerum
2015-07-29 12:28             ` Philippe Gerum
2015-07-29 12:48             ` Philippe Gerum
2015-07-29 12:56               ` Philippe Gerum
2015-07-29 15:14               ` Frederik Bayart
2015-07-29 18:27                 ` Philippe Gerum
2015-07-29 18:42                   ` Philippe Gerum
2015-07-30 14:28                     ` Frederik Bayart
2015-07-30 15:08                       ` Frederik Bayart
2015-07-30 16:10                         ` Philippe Gerum
2015-07-31 17:54                           ` Frederik Bayart
2015-08-01  7:59                             ` Philippe Gerum
2015-08-01  8:43                             ` Philippe Gerum
2015-08-03  9:59                               ` Frederik Bayart
2015-07-30 15:58                       ` Philippe Gerum
2015-07-30 16:36                       ` Philippe Gerum
2015-07-31 16:04                         ` Frederik Bayart

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.