------------------------------
On Fri, Jul 26, 2013 9:59 AM PDT Philippe Gerum wrote:

>On 07/26/2013 06:33 PM, Philippe Gerum wrote:
>> On 07/26/2013 02:18 PM, GP Orcullo wrote:
>>
>> ------------------------------
>> On Fri, Jul 26, 2013 5:09 AM PDT GP Orcullo wrote:
>>
>>> ----- Original Message -----
>>>
>>> From: Gilles Chanteperdrix <[email protected]>
>>> To: GP Orcullo <[email protected]>
>>> Cc: "[email protected]" <[email protected]>
>>> Sent: Friday, July 26, 2013 4:26 AM
>>> Subject: Re: [Xenomai] XDDP test failure on Raspberry Pi, 3.8.13 kernel
>>>
>>> On 07/24/2013 02:12 PM, GP Orcullo wrote:
>>>
>>> Hi,
>>>
>>> Raspberry Pi on Xenomai v2.6.2.1 passes all the regression tests
>>> except for the xddp_test.  The test fails with "FAILURE bind: Address
>>> already in use".
>>>
>>> How do I resolve this issue?
>>>
>>>
>>> Hi,
>>>
>>> do you have the same issue with Xenomai from git repository?
>>>
>>>
>>> -- 
>>>                                                                   
>>> Gilles.
>>>
>>>
>>> Hello Gilles,
>>>
>>> I have restarted from scratch and the issue seemed to have resolved 
>>> itself. I have no clue why it initially failed.
>>>
>>> Thanks!
>>>
>>> GP Orcullo
>>
>> I have found the cause.
>>
>> If the module xeno_klat is loaded, xddp_test fails.
>>
>> 
>> It looks like both the kernel latency and xddp tests do not cope well 
>> together, with respect to the message pipe number they want to use. The 
>> patch below works around the issue, but xddp_test should rather be fixed 
>> to use the XDDP port auto-selection, like klat already does.
>> 
>
>Something like this would do:
>
>commit 3a61082756c097ba60a87ee8f9f185ad9f8d4686
>Author: Philippe Gerum <[email protected]>
>Date:   Fri Jul 26 18:56:49 2013 +0200
>
>    testsuite/regression: xddp_test: use port auto-selection
>    
>    Let the XDDP driver pick an idle port for communication, so that we
>    won't conflict with other message pipe users (e.g. xeno_klat).
>
>diff --git a/src/testsuite/regression/posix/xddp_test.c 
>b/src/testsuite/regression/posix/xddp_test.c
>index 194584e..e10a09a 100644
>--- a/src/testsuite/regression/posix/xddp_test.c
>+++ b/src/testsuite/regression/posix/xddp_test.c
>@@ -22,14 +22,14 @@
> 
> static pthread_t rt, nrt;
> static sem_t opened;
>-
>-#define XDDP_PORT 0/* [0..CONFIG-XENO_OPT_PIPE_NRDEV - 1] */
>+static int xddp_port = -1;/* First pass uses auto-selection */
> 
> static void *realtime_thread(void *arg)
> {
> unsigned long count = (unsigned long)arg;
> struct sockaddr_ipc saddr;
> struct timespec ts;
>+socklen_t addrlen;
> size_t poolsz;
> int ret, s;
> 
>@@ -57,7 +57,7 @@ static void *realtime_thread(void *arg)
>  */
> memset(&saddr, 0, sizeof(saddr));
> saddr.sipc_family = AF_RTIPC;
>-saddr.sipc_port = XDDP_PORT;
>+saddr.sipc_port = xddp_port;
> ret = bind(s, (struct sockaddr *)&saddr, sizeof(saddr));
> if (count == 1) {
> if (ret < 0 && errno == EADDRINUSE) {
>@@ -69,6 +69,10 @@ static void *realtime_thread(void *arg)
> exit(EXIT_FAILURE);
> }
> fprintf(stderr, "FAILURE: bind returned %d\n", ret);
>+} else {
>+addrlen = sizeof(saddr);
>+check_unix(getsockname(s, (struct sockaddr *)&saddr, &addrlen));
>+xddp_port = saddr.sipc_port;
> }
> if (ret < 0) {
> fprintf(stderr, "FAILURE bind: %m\n");
>@@ -91,7 +95,7 @@ static void *regular_thread(void *arg)
> char buf[128], *devname;
> int fd;
> 
>-check_unix(asprintf(&devname, "/dev/rtp%d", XDDP_PORT));
>+check_unix(asprintf(&devname, "/dev/rtp%d", xddp_port));
> 
> fd = check_unix(open(devname, O_RDWR));
> free(devname);
>-- 
>Philippe.

This patch works as intended.


Thanks! 


_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to