All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP]  rt_sigtimedwait01 failed in armv7l
@ 2016-12-13  9:09 Cui Bixuan
  2016-12-13 10:43 ` Cyril Hrubis
  0 siblings, 1 reply; 5+ messages in thread
From: Cui Bixuan @ 2016-12-13  9:09 UTC (permalink / raw)
  To: ltp

Hi, These is a fail about rt_sigtimedwait01(armv7l GNU/Linux and linux 3.10):
root@arma9el:/tmp# ./rt_sigtimedwait01
rt_sigtimedwait01    0  TINFO  :  0x9fd0, 10
rt_sigtimedwait01    1  TPASS  :  Test passed
rt_sigtimedwait01    0  TINFO  :  0x9fd0, 10
rt_sigtimedwait01    2  TPASS  :  Test passed
...
rt_sigtimedwait01    0  TINFO  :  0x9fd0, 12
rt_sigtimedwait01   11  TPASS  :  Test passed
rt_sigtimedwait01    0  TINFO  :  0x9fd0, 15
rt_sigtimedwait01   12  TPASS  :  Test passed
rt_sigtimedwait01   12  TPASS  :  sigwaitinfo restored the original mask
rt_sigtimedwait01    0  TINFO  :  0x9fd0, -1

rt_sigtimedwait01   13  TFAIL  :  /home/cuibixuan/ltp/testcases/kernel/syscalls/rt_sigtimedwait/../sigwaitinfo/sigwaitinfo01.c:56:
test_masked_matching_rt (/home/cuibixuan/ltp/testcases/kernel/syscalls/rt_sigtimedwait/../sigwaitinfo/sigwaitinfo01.c: 274): Unexpected return value; expected 35, got 36
rt_sigtimedwait01   13  TFAIL  :  /home/cuibixuan/ltp/testcases/kernel/syscalls/rt_sigtimedwait/../sigwaitinfo/sigwaitinfo01.c:56:
test_masked_matching_rt (/home/cuibixuan/ltp/testcases/kernel/syscalls/rt_sigtimedwait/../sigwaitinfo/sigwaitinfo01.c: 282): Unexpected return value; expected 36, got 35
rt_sigtimedwait01   13  TPASS  :  sigwaitinfo restored the original mask


I add 'sleep(1)' into test_masked_matching_rt() of ltp/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c:268

void test_masked_matching_rt(swi_func sigwaitinfo, int signo)
...
/* Run a child that will wake us up */
        child[0] = create_sig_proc(0, signo, 1);
+       sleep(1);
        child[1] = create_sig_proc(0, signo + 1, 1);

Then the case pass:
rt_sigtimedwait01   13  TPASS  :  Test passed
rt_sigtimedwait01   13  TPASS  :  Test passed
rt_sigtimedwait01   13  TPASS  :  sigwaitinfo restored the original mask

Or run it by 'chrt 10 ./rt_sigtimedwait01' then pass.

Why? Can someone give me a hand.

Thanks,
Cui Bixuan





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

* [LTP] rt_sigtimedwait01 failed in armv7l
  2016-12-13  9:09 [LTP] rt_sigtimedwait01 failed in armv7l Cui Bixuan
@ 2016-12-13 10:43 ` Cyril Hrubis
  2016-12-15  2:37   ` Cui Bixuan
  0 siblings, 1 reply; 5+ messages in thread
From: Cyril Hrubis @ 2016-12-13 10:43 UTC (permalink / raw)
  To: ltp

Hi!
> Hi, These is a fail about rt_sigtimedwait01(armv7l GNU/Linux and linux 3.10):
> root@arma9el:/tmp# ./rt_sigtimedwait01
> rt_sigtimedwait01    0  TINFO  :  0x9fd0, 10
> rt_sigtimedwait01    1  TPASS  :  Test passed
> rt_sigtimedwait01    0  TINFO  :  0x9fd0, 10
> rt_sigtimedwait01    2  TPASS  :  Test passed
> ...
> rt_sigtimedwait01    0  TINFO  :  0x9fd0, 12
> rt_sigtimedwait01   11  TPASS  :  Test passed
> rt_sigtimedwait01    0  TINFO  :  0x9fd0, 15
> rt_sigtimedwait01   12  TPASS  :  Test passed
> rt_sigtimedwait01   12  TPASS  :  sigwaitinfo restored the original mask
> rt_sigtimedwait01    0  TINFO  :  0x9fd0, -1
> 
> rt_sigtimedwait01   13  TFAIL  :  /home/cuibixuan/ltp/testcases/kernel/syscalls/rt_sigtimedwait/../sigwaitinfo/sigwaitinfo01.c:56:
> test_masked_matching_rt (/home/cuibixuan/ltp/testcases/kernel/syscalls/rt_sigtimedwait/../sigwaitinfo/sigwaitinfo01.c: 274): Unexpected return value; expected 35, got 36
> rt_sigtimedwait01   13  TFAIL  :  /home/cuibixuan/ltp/testcases/kernel/syscalls/rt_sigtimedwait/../sigwaitinfo/sigwaitinfo01.c:56:
> test_masked_matching_rt (/home/cuibixuan/ltp/testcases/kernel/syscalls/rt_sigtimedwait/../sigwaitinfo/sigwaitinfo01.c: 282): Unexpected return value; expected 36, got 35
> rt_sigtimedwait01   13  TPASS  :  sigwaitinfo restored the original mask
> 
> 
> I add 'sleep(1)' into test_masked_matching_rt() of ltp/testcases/kernel/syscalls/sigwaitinfo/sigwaitinfo01.c:268
> 
> void test_masked_matching_rt(swi_func sigwaitinfo, int signo)
> ...
> /* Run a child that will wake us up */
>         child[0] = create_sig_proc(0, signo, 1);
> +       sleep(1);
>         child[1] = create_sig_proc(0, signo + 1, 1);
> 
> Then the case pass:
> rt_sigtimedwait01   13  TPASS  :  Test passed
> rt_sigtimedwait01   13  TPASS  :  Test passed
> rt_sigtimedwait01   13  TPASS  :  sigwaitinfo restored the original mask
> 
> Or run it by 'chrt 10 ./rt_sigtimedwait01' then pass.
> 
> Why? Can someone give me a hand.

I guess that the problem here is that the order in which the test
children and parent are executed is undefined.

The signals should be delivered starting from lowest numbered but that
applies only when both signals are pending at the point we call
sigwaitinfo(). If, by a chance, the first child haven't had chance to
finish until we get to the sigwaitinfo() call we will get the signo+1
signal first, since that is the only one pending at that point.

So the fix here would be making sure that both children are finished
before we call the sigwaitinfo(). Quite possibly doing waitpid() for
both of them will suffice.

-- 
Cyril Hrubis
chrubis@suse.cz

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

* [LTP] rt_sigtimedwait01 failed in armv7l
  2016-12-13 10:43 ` Cyril Hrubis
@ 2016-12-15  2:37   ` Cui Bixuan
  2016-12-28 12:14     ` [LTP] [PATCH] rt_sigtimedwait01: fix probability of failure Cui Bixuan
  0 siblings, 1 reply; 5+ messages in thread
From: Cui Bixuan @ 2016-12-15  2:37 UTC (permalink / raw)
  To: ltp

On 2016/12/13 18:43, Cyril Hrubis wrote:
> I guess that the problem here is that the order in which the test
> children and parent are executed is undefined.
> 
> The signals should be delivered starting from lowest numbered but that
> applies only when both signals are pending at the point we call
> sigwaitinfo(). If, by a chance, the first child haven't had chance to
> finish until we get to the sigwaitinfo() call we will get the signo+1
> signal first, since that is the only one pending at that point.
> 
> So the fix here would be making sure that both children are finished
> before we call the sigwaitinfo(). Quite possibly doing waitpid() for
> both of them will suffice.
Thank you. I will try to fix it.

Thanks,
Cui Bixuan

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

* [LTP]  [PATCH] rt_sigtimedwait01: fix probability of failure
  2016-12-15  2:37   ` Cui Bixuan
@ 2016-12-28 12:14     ` Cui Bixuan
  2017-01-16 13:33       ` Cyril Hrubis
  0 siblings, 1 reply; 5+ messages in thread
From: Cui Bixuan @ 2016-12-28 12:14 UTC (permalink / raw)
  To: ltp

If child[0] of test_masked_matching_rt() haven't had chance to
finish until we get to the sigwaitinfo() call, the case will fail.

So we should add waitpid() to make sure that both children are finished.

Signed-off-by: Cui Bixuan <cuibixuan@huawei.com>
---
 testcases/kernel/syscalls/utils/common_j_h.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/testcases/kernel/syscalls/utils/common_j_h.c b/testcases/kernel/syscalls/utils/common_j_h.c
index 43165ca..784ca04 100644
--- a/testcases/kernel/syscalls/utils/common_j_h.c
+++ b/testcases/kernel/syscalls/utils/common_j_h.c
@@ -119,6 +119,7 @@ static void sigterm_handler(int sig)
 pid_t create_sig_proc(unsigned long usec, int sig, unsigned count)
 {
 	pid_t pid, cpid;
+	int status;

 	pid = getpid();
 	WITH_SIGNALS_BLOCKED(if ((cpid = fork()) == 0) {
@@ -138,6 +139,8 @@ pid_t create_sig_proc(unsigned long usec, int sig, unsigned count)
 		EPRINTF("fork failed.\n");
 		return cpid;
 	default:
+		/* wait cpid finish */
+		waitpid(cpid, &status, 0);
 		return cpid;
 	}
 }
-- 
1.8.3.4



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

* [LTP] [PATCH] rt_sigtimedwait01: fix probability of failure
  2016-12-28 12:14     ` [LTP] [PATCH] rt_sigtimedwait01: fix probability of failure Cui Bixuan
@ 2017-01-16 13:33       ` Cyril Hrubis
  0 siblings, 0 replies; 5+ messages in thread
From: Cyril Hrubis @ 2017-01-16 13:33 UTC (permalink / raw)
  To: ltp

Hi!
>  	pid = getpid();
>  	WITH_SIGNALS_BLOCKED(if ((cpid = fork()) == 0) {
> @@ -138,6 +139,8 @@ pid_t create_sig_proc(unsigned long usec, int sig, unsigned count)
>  		EPRINTF("fork failed.\n");
>  		return cpid;
>  	default:
> +		/* wait cpid finish */

The comment here is redundant and useless.

> +		waitpid(cpid, &status, 0);
>  		return cpid;
>  	}
>  }
> -- 
> 1.8.3.4
> 
> 

-- 
Cyril Hrubis
chrubis@suse.cz

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

end of thread, other threads:[~2017-01-16 13:33 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-12-13  9:09 [LTP] rt_sigtimedwait01 failed in armv7l Cui Bixuan
2016-12-13 10:43 ` Cyril Hrubis
2016-12-15  2:37   ` Cui Bixuan
2016-12-28 12:14     ` [LTP] [PATCH] rt_sigtimedwait01: fix probability of failure Cui Bixuan
2017-01-16 13:33       ` Cyril Hrubis

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.