All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai] xeno-regression-test returns SUCCESS when Xenomai not available
@ 2013-08-20 12:45 Gernot Hillier
  2013-08-20 18:15 ` Gilles Chanteperdrix
  2013-08-20 18:50 ` Gilles Chanteperdrix
  0 siblings, 2 replies; 5+ messages in thread
From: Gernot Hillier @ 2013-08-20 12:45 UTC (permalink / raw)
  To: xenomai

Hi there!

I'm currently working on an automatic test environment for Xenomai
kernels. Sometimes, Xenomai integration into my kernel fails completely 
and I expected this to be detected in a xeno-regression-test run - however:

root@localhost:~# xeno-regression-test && echo Worked.
Started child 28231: /bin/bash 
/usr/lib/xenomai/testsuite/xeno-test-run-wrapper 
/usr/bin/xeno-regression-test
++ echo 0
/usr/bin/xeno-regression-test: line 38: /proc/xenomai/latency: No such 
file or directory
++ :
++ /usr/lib/xenomai/testsuite/arith
Xenomai: /dev/rtheap is missing
(chardev, major=10 minor=254)
Worked.

Looking into xeno-test-run.c, I see that a dead script child is not
causing an error exit of xeno-test-run in handle_script_child().

Is there any special reason for that behaviour or could we just add a
comparable EXIT_FAILURE branch as in handle_checked_child(), something
like

--- src/testsuite/xeno-test/xeno-test-run.c.orig        2013-08-20 
10:10:04.452067093 +0200
+++ src/testsuite/xeno-test/xeno-test-run.c     2013-08-20 
13:10:12.739924212 +0200
@@ -420,7 +418,14 @@ void handle_script_child(struct child *c
         int rc;

         if (child->dead) {
+               int status = child->exit_status;
                 child_cleanup(child);
+               if (WIFEXITED(status)) {
+                       fail_fprintf(stderr,
+                                  "child %d exited with status %d\n",
+                                  child->pid, WEXITSTATUS(status));
+                       exit(EXIT_FAILURE);
+               }
                 return;
         }

However, as I didn't really get the concept yet how script and checked
clients work together, I'm not sure whether this is the right way to 
fix(?) that behaviour.

-- 
With kind regards,
Gernot Hillier

Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux


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

* Re: [Xenomai] xeno-regression-test returns SUCCESS when Xenomai not available
  2013-08-20 12:45 [Xenomai] xeno-regression-test returns SUCCESS when Xenomai not available Gernot Hillier
@ 2013-08-20 18:15 ` Gilles Chanteperdrix
  2013-08-20 21:49   ` Gilles Chanteperdrix
  2013-08-20 18:50 ` Gilles Chanteperdrix
  1 sibling, 1 reply; 5+ messages in thread
From: Gilles Chanteperdrix @ 2013-08-20 18:15 UTC (permalink / raw)
  To: Gernot Hillier; +Cc: xenomai

On 08/20/2013 02:45 PM, Gernot Hillier wrote:
> Hi there!
> 
> I'm currently working on an automatic test environment for Xenomai
> kernels. Sometimes, Xenomai integration into my kernel fails completely 
> and I expected this to be detected in a xeno-regression-test run - however:
> 
> root@localhost:~# xeno-regression-test && echo Worked.
> Started child 28231: /bin/bash 
> /usr/lib/xenomai/testsuite/xeno-test-run-wrapper 
> /usr/bin/xeno-regression-test
> ++ echo 0
> /usr/bin/xeno-regression-test: line 38: /proc/xenomai/latency: No such 
> file or directory
> ++ :
> ++ /usr/lib/xenomai/testsuite/arith
> Xenomai: /dev/rtheap is missing
> (chardev, major=10 minor=254)
> Worked.
> 
> Looking into xeno-test-run.c, I see that a dead script child is not
> causing an error exit of xeno-test-run in handle_script_child().
> 
> Is there any special reason for that behaviour or could we just add a
> comparable EXIT_FAILURE branch as in handle_checked_child(), something
> like

No, some piece is missing, but we can not exit right away, we have to
send a SIGTERM to all children, then return to the main loop which will
wait a bit, then send a SIGKILL if children are not answering, then
finally exit. And we have to take note somewhere of the child exit
status to call exit with the same exit status. Will send a patch shortly.


-- 
                                                                Gilles.


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

* Re: [Xenomai] xeno-regression-test returns SUCCESS when Xenomai not available
  2013-08-20 12:45 [Xenomai] xeno-regression-test returns SUCCESS when Xenomai not available Gernot Hillier
  2013-08-20 18:15 ` Gilles Chanteperdrix
@ 2013-08-20 18:50 ` Gilles Chanteperdrix
  1 sibling, 0 replies; 5+ messages in thread
From: Gilles Chanteperdrix @ 2013-08-20 18:50 UTC (permalink / raw)
  To: Gernot Hillier; +Cc: xenomai

On 08/20/2013 02:45 PM, Gernot Hillier wrote:
> Hi there!
> 
> I'm currently working on an automatic test environment for Xenomai
> kernels. Sometimes, Xenomai integration into my kernel fails completely 
> and I expected this to be detected in a xeno-regression-test run - however:

You might want to use:
http://git.xenomai.org/?p=mkrootfs.git;a=summary

Which verifies at compilation time that the kernel has Xenomai enabled
if the Xenomai user-space package is enabled. I use this tool to build
rootfses for Xenomai system on ARM and x86 systems and I believe
Philippe uses it also. It is not as feature-rich or package-rich as
alternatives such as buildroot, ptxdist, openembedded, but it has some
unique features which are more adapted to a (Xenomai ?) developer usage.

-- 
                                                                Gilles.


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

* Re: [Xenomai] xeno-regression-test returns SUCCESS when Xenomai not available
  2013-08-20 18:15 ` Gilles Chanteperdrix
@ 2013-08-20 21:49   ` Gilles Chanteperdrix
  2013-08-22  9:01     ` Gernot Hillier
  0 siblings, 1 reply; 5+ messages in thread
From: Gilles Chanteperdrix @ 2013-08-20 21:49 UTC (permalink / raw)
  To: Gernot Hillier; +Cc: xenomai

On 08/20/2013 08:15 PM, Gilles Chanteperdrix wrote:
> On 08/20/2013 02:45 PM, Gernot Hillier wrote:
>> Hi there!
>>
>> I'm currently working on an automatic test environment for Xenomai
>> kernels. Sometimes, Xenomai integration into my kernel fails completely 
>> and I expected this to be detected in a xeno-regression-test run - however:
>>
>> root@localhost:~# xeno-regression-test && echo Worked.
>> Started child 28231: /bin/bash 
>> /usr/lib/xenomai/testsuite/xeno-test-run-wrapper 
>> /usr/bin/xeno-regression-test
>> ++ echo 0
>> /usr/bin/xeno-regression-test: line 38: /proc/xenomai/latency: No such 
>> file or directory
>> ++ :
>> ++ /usr/lib/xenomai/testsuite/arith
>> Xenomai: /dev/rtheap is missing
>> (chardev, major=10 minor=254)
>> Worked.
>>
>> Looking into xeno-test-run.c, I see that a dead script child is not
>> causing an error exit of xeno-test-run in handle_script_child().
>>
>> Is there any special reason for that behaviour or could we just add a
>> comparable EXIT_FAILURE branch as in handle_checked_child(), something
>> like
> 
> No, some piece is missing, but we can not exit right away, we have to
> send a SIGTERM to all children, then return to the main loop which will
> wait a bit, then send a SIGKILL if children are not answering, then
> finally exit. And we have to take note somewhere of the child exit
> status to call exit with the same exit status. Will send a patch shortly.
> 
> 

Please try the following patch:

diff --git a/src/testsuite/xeno-test/xeno-test-run.c b/src/testsuite/xeno-test/xeno-test-run.c
index 12d3df4..ce02284 100644
--- a/src/testsuite/xeno-test/xeno-test-run.c
+++ b/src/testsuite/xeno-test/xeno-test-run.c
@@ -46,6 +46,7 @@ static char default_loadcmd[] = "dohell 900";
 static char *loadcmd = default_loadcmd;
 static fd_set inputs;
 static struct child script, load;
+static int script_exit_status = EXIT_SUCCESS;
 
 void handle_checked_child(struct child *child, fd_set *fds);
 void handle_script_child(struct child *child, fd_set *fds);
@@ -417,7 +418,13 @@ void handle_script_child(struct child *child, fd_set *fds)
 	int rc;
 
 	if (child->dead) {
+		int status = child->exit_status;
 		child_cleanup(child);
+		if (WIFEXITED(status)) {
+			script_exit_status = WEXITSTATUS(status);
+			children_kill(CHILD_ANY, SIGTERM);
+			sigexit_start = termload_start = mono_time();
+		}
 		return;
 	}
 
@@ -664,5 +671,5 @@ int main(int argc, char *argv[])
 		signal(sigexit, SIG_DFL);
 		raise(sigexit);
 	}
-	exit(EXIT_SUCCESS);
+	exit(script_exit_status);
 }




-- 
                                                                Gilles.


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

* Re: [Xenomai] xeno-regression-test returns SUCCESS when Xenomai not available
  2013-08-20 21:49   ` Gilles Chanteperdrix
@ 2013-08-22  9:01     ` Gernot Hillier
  0 siblings, 0 replies; 5+ messages in thread
From: Gernot Hillier @ 2013-08-22  9:01 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai

Hi!

Am 20.08.2013 23:49, schrieb Gilles Chanteperdrix:
> On 08/20/2013 08:15 PM, Gilles Chanteperdrix wrote:
>> On 08/20/2013 02:45 PM, Gernot Hillier wrote:
>>> Hi there!
>>>
>>> I'm currently working on an automatic test environment for Xenomai
>>> kernels. Sometimes, Xenomai integration into my kernel fails completely
>>> and I expected this to be detected in a xeno-regression-test run - however:
>>>
>>> root@localhost:~# xeno-regression-test && echo Worked.
>>> Started child 28231: /bin/bash
>>> /usr/lib/xenomai/testsuite/xeno-test-run-wrapper
>>> /usr/bin/xeno-regression-test
>>> ++ echo 0
>>> /usr/bin/xeno-regression-test: line 38: /proc/xenomai/latency: No such
>>> file or directory
>>> ++ :
>>> ++ /usr/lib/xenomai/testsuite/arith
>>> Xenomai: /dev/rtheap is missing
>>> (chardev, major=10 minor=254)
>>> Worked.
>>>
>>> Looking into xeno-test-run.c, I see that a dead script child is not
>>> causing an error exit of xeno-test-run in handle_script_child().
>>>
>>> Is there any special reason for that behaviour or could we just add a
>>> comparable EXIT_FAILURE branch as in handle_checked_child(), something
>>> like
>>
>> No, some piece is missing, but we can not exit right away, we have to
>> send a SIGTERM to all children, then return to the main loop which will
>> wait a bit, then send a SIGKILL if children are not answering, then
>> finally exit. And we have to take note somewhere of the child exit
>> status to call exit with the same exit status. Will send a patch shortly.
>>
>>
>
> Please try the following patch:

[...]

Seems to work perfectly for my use case. Thanks!!

-- 
Regards,
Gernot Hillier

Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux



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

end of thread, other threads:[~2013-08-22  9:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-20 12:45 [Xenomai] xeno-regression-test returns SUCCESS when Xenomai not available Gernot Hillier
2013-08-20 18:15 ` Gilles Chanteperdrix
2013-08-20 21:49   ` Gilles Chanteperdrix
2013-08-22  9:01     ` Gernot Hillier
2013-08-20 18:50 ` Gilles Chanteperdrix

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.