* [LTP] [PATCH] syscalls: add rt_tgsigqueueinfo() test-case
@ 2019-02-25 12:32 Sumit Garg
2019-03-04 19:35 ` Steve Muckle
0 siblings, 1 reply; 4+ messages in thread
From: Sumit Garg @ 2019-02-25 12:32 UTC (permalink / raw)
To: ltp
This tests the rt_tgsigqueueinfo() syscall used to queue a signal and
data to the single thread specified by the combination of tgid, a thread
group ID, and tid, a thread in that thread group.
Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
---
runtest/syscalls | 1 +
.../kernel/syscalls/rt_tgsigqueueinfo/.gitignore | 1 +
.../kernel/syscalls/rt_tgsigqueueinfo/Makefile | 10 ++++
.../rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c | 53 ++++++++++++++++++++++
4 files changed, 65 insertions(+)
create mode 100644 testcases/kernel/syscalls/rt_tgsigqueueinfo/.gitignore
create mode 100644 testcases/kernel/syscalls/rt_tgsigqueueinfo/Makefile
create mode 100644 testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c
diff --git a/runtest/syscalls b/runtest/syscalls
index 70d3561..861c0a6 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -996,6 +996,7 @@ rt_sigprocmask01 rt_sigprocmask01
rt_sigprocmask02 rt_sigprocmask02
rt_sigqueueinfo01 rt_sigqueueinfo01
rt_sigsuspend01 rt_sigsuspend01
+rt_tgsigqueueinfo01 rt_tgsigqueueinfo01
sbrk01 sbrk01
sbrk02 sbrk02
diff --git a/testcases/kernel/syscalls/rt_tgsigqueueinfo/.gitignore b/testcases/kernel/syscalls/rt_tgsigqueueinfo/.gitignore
new file mode 100644
index 0000000..f9ffa58
--- /dev/null
+++ b/testcases/kernel/syscalls/rt_tgsigqueueinfo/.gitignore
@@ -0,0 +1 @@
+rt_tgsigqueueinfo01
diff --git a/testcases/kernel/syscalls/rt_tgsigqueueinfo/Makefile b/testcases/kernel/syscalls/rt_tgsigqueueinfo/Makefile
new file mode 100644
index 0000000..035ca64
--- /dev/null
+++ b/testcases/kernel/syscalls/rt_tgsigqueueinfo/Makefile
@@ -0,0 +1,10 @@
+# Copyright (c) 2019 - Linaro Limited. All rights reserved.
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+top_srcdir ?= ../../../..
+
+rt_tgsigqueueinfo01: CFLAGS+=-pthread
+
+include $(top_srcdir)/include/mk/testcases.mk
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c b/testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c
new file mode 100644
index 0000000..336b968
--- /dev/null
+++ b/testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2019 Linaro Limited. All rights reserved.
+ * Author: Sumit Garg <sumit.garg@linaro.org>
+ */
+
+/*
+ * Test rt_tgsigqueueinfo
+ *
+ * This tests the rt_tgsigqueueinfo() syscall. It sends the signal and data
+ * to the single thread specified by the combination of tgid, a thread group
+ * ID, and tid, a thread in that thread group.
+ */
+
+#define _GNU_SOURCE
+#include <err.h>
+#include <pthread.h>
+#include "tst_test.h"
+#include "lapi/syscalls.h"
+
+void *tfunc(void *arg LTP_ATTRIBUTE_UNUSED)
+{
+ siginfo_t uinfo;
+
+ uinfo.si_errno = 0;
+ uinfo.si_code = SI_QUEUE;
+
+ TEST(tst_syscall(__NR_rt_tgsigqueueinfo, getpid(),
+ syscall(__NR_gettid), SIGCHLD, &uinfo));
+ if (TST_RET)
+ tst_res(TFAIL, "Test Failed");
+ else
+ tst_res(TPASS, "Test Succeeded");
+
+ return NULL;
+}
+
+static void verify_rt_tgsigqueueinfo(void)
+{
+ pthread_t pt;
+
+ TEST(pthread_create(&pt, NULL, tfunc, NULL));
+ if (TST_RET)
+ tst_brk(TFAIL | TTERRNO, "pthread_create failed");
+
+ TEST(pthread_join(pt, NULL));
+ if (TST_RET)
+ tst_brk(TFAIL | TTERRNO, "pthread_join failed");
+}
+
+static struct tst_test test = {
+ .test_all = verify_rt_tgsigqueueinfo,
+};
--
2.7.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [LTP] [PATCH] syscalls: add rt_tgsigqueueinfo() test-case
2019-02-25 12:32 [LTP] [PATCH] syscalls: add rt_tgsigqueueinfo() test-case Sumit Garg
@ 2019-03-04 19:35 ` Steve Muckle
2019-03-05 10:33 ` Sumit Garg
2019-03-05 13:29 ` Cyril Hrubis
0 siblings, 2 replies; 4+ messages in thread
From: Steve Muckle @ 2019-03-04 19:35 UTC (permalink / raw)
To: ltp
Hi Sumit,
On 02/25/2019 04:32 AM, Sumit Garg wrote:
> This tests the rt_tgsigqueueinfo() syscall used to queue a signal and
> data to the single thread specified by the combination of tgid, a thread
> group ID, and tid, a thread in that thread group.
>
> Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
> ---
> runtest/syscalls | 1 +
> .../kernel/syscalls/rt_tgsigqueueinfo/.gitignore | 1 +
> .../kernel/syscalls/rt_tgsigqueueinfo/Makefile | 10 ++++
> .../rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c | 53 ++++++++++++++++++++++
> 4 files changed, 65 insertions(+)
> create mode 100644 testcases/kernel/syscalls/rt_tgsigqueueinfo/.gitignore
> create mode 100644 testcases/kernel/syscalls/rt_tgsigqueueinfo/Makefile
> create mode 100644 testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c
>
> diff --git a/runtest/syscalls b/runtest/syscalls
> index 70d3561..861c0a6 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -996,6 +996,7 @@ rt_sigprocmask01 rt_sigprocmask01
> rt_sigprocmask02 rt_sigprocmask02
> rt_sigqueueinfo01 rt_sigqueueinfo01
> rt_sigsuspend01 rt_sigsuspend01
> +rt_tgsigqueueinfo01 rt_tgsigqueueinfo01
>
> sbrk01 sbrk01
> sbrk02 sbrk02
> diff --git a/testcases/kernel/syscalls/rt_tgsigqueueinfo/.gitignore b/testcases/kernel/syscalls/rt_tgsigqueueinfo/.gitignore
> new file mode 100644
> index 0000000..f9ffa58
> --- /dev/null
> +++ b/testcases/kernel/syscalls/rt_tgsigqueueinfo/.gitignore
> @@ -0,0 +1 @@
> +rt_tgsigqueueinfo01
> diff --git a/testcases/kernel/syscalls/rt_tgsigqueueinfo/Makefile b/testcases/kernel/syscalls/rt_tgsigqueueinfo/Makefile
> new file mode 100644
> index 0000000..035ca64
> --- /dev/null
> +++ b/testcases/kernel/syscalls/rt_tgsigqueueinfo/Makefile
> @@ -0,0 +1,10 @@
> +# Copyright (c) 2019 - Linaro Limited. All rights reserved.
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +
> +top_srcdir ?= ../../../..
> +
> +rt_tgsigqueueinfo01: CFLAGS+=-pthread
> +
> +include $(top_srcdir)/include/mk/testcases.mk
> +
> +include $(top_srcdir)/include/mk/generic_leaf_target.mk
> diff --git a/testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c b/testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c
> new file mode 100644
> index 0000000..336b968
> --- /dev/null
> +++ b/testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c
> @@ -0,0 +1,53 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2019 Linaro Limited. All rights reserved.
> + * Author: Sumit Garg <sumit.garg@linaro.org>
> + */
> +
> +/*
> + * Test rt_tgsigqueueinfo
> + *
> + * This tests the rt_tgsigqueueinfo() syscall. It sends the signal and data
> + * to the single thread specified by the combination of tgid, a thread group
> + * ID, and tid, a thread in that thread group.
> + */
> +
> +#define _GNU_SOURCE
> +#include <err.h>
> +#include <pthread.h>
> +#include "tst_test.h"
> +#include "lapi/syscalls.h"
> +
> +void *tfunc(void *arg LTP_ATTRIBUTE_UNUSED)
> +{
> + siginfo_t uinfo;
> +
> + uinfo.si_errno = 0;
> + uinfo.si_code = SI_QUEUE;
> +
> + TEST(tst_syscall(__NR_rt_tgsigqueueinfo, getpid(),
> + syscall(__NR_gettid), SIGCHLD, &uinfo));
It looks like the pthread here is sending the signal to itself which
seems like a special case. Not that it isn't worth testing but I'd think
there should be a test which sends the signal to a different thread.
This (the self-send case) could be an additional test.
> + if (TST_RET)
> + tst_res(TFAIL, "Test Failed");
> + else
> + tst_res(TPASS, "Test Succeeded");
I recommend verifying the signal and its data (si_value) are delivered
successfully prior to test completion.
> +
> + return NULL;
> +}
> +
> +static void verify_rt_tgsigqueueinfo(void)
> +{
> + pthread_t pt;
> +
> + TEST(pthread_create(&pt, NULL, tfunc, NULL));
> + if (TST_RET)
> + tst_brk(TFAIL | TTERRNO, "pthread_create failed");
> +
> + TEST(pthread_join(pt, NULL));
> + if (TST_RET)
> + tst_brk(TFAIL | TTERRNO, "pthread_join failed");
> +}
> +
> +static struct tst_test test = {
> + .test_all = verify_rt_tgsigqueueinfo,
> +};
>
thanks,
steve
^ permalink raw reply [flat|nested] 4+ messages in thread
* [LTP] [PATCH] syscalls: add rt_tgsigqueueinfo() test-case
2019-03-04 19:35 ` Steve Muckle
@ 2019-03-05 10:33 ` Sumit Garg
2019-03-05 13:29 ` Cyril Hrubis
1 sibling, 0 replies; 4+ messages in thread
From: Sumit Garg @ 2019-03-05 10:33 UTC (permalink / raw)
To: ltp
Thanks Steve for the review.
On Tue, 5 Mar 2019 at 01:06, Steve Muckle <smuckle@google.com> wrote:
>
> Hi Sumit,
>
> On 02/25/2019 04:32 AM, Sumit Garg wrote:
> > This tests the rt_tgsigqueueinfo() syscall used to queue a signal and
> > data to the single thread specified by the combination of tgid, a thread
> > group ID, and tid, a thread in that thread group.
> >
> > Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
> > ---
> > runtest/syscalls | 1 +
> > .../kernel/syscalls/rt_tgsigqueueinfo/.gitignore | 1 +
> > .../kernel/syscalls/rt_tgsigqueueinfo/Makefile | 10 ++++
> > .../rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c | 53 ++++++++++++++++++++++
> > 4 files changed, 65 insertions(+)
> > create mode 100644 testcases/kernel/syscalls/rt_tgsigqueueinfo/.gitignore
> > create mode 100644 testcases/kernel/syscalls/rt_tgsigqueueinfo/Makefile
> > create mode 100644 testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c
> >
> > diff --git a/runtest/syscalls b/runtest/syscalls
> > index 70d3561..861c0a6 100644
> > --- a/runtest/syscalls
> > +++ b/runtest/syscalls
> > @@ -996,6 +996,7 @@ rt_sigprocmask01 rt_sigprocmask01
> > rt_sigprocmask02 rt_sigprocmask02
> > rt_sigqueueinfo01 rt_sigqueueinfo01
> > rt_sigsuspend01 rt_sigsuspend01
> > +rt_tgsigqueueinfo01 rt_tgsigqueueinfo01
> >
> > sbrk01 sbrk01
> > sbrk02 sbrk02
> > diff --git a/testcases/kernel/syscalls/rt_tgsigqueueinfo/.gitignore b/testcases/kernel/syscalls/rt_tgsigqueueinfo/.gitignore
> > new file mode 100644
> > index 0000000..f9ffa58
> > --- /dev/null
> > +++ b/testcases/kernel/syscalls/rt_tgsigqueueinfo/.gitignore
> > @@ -0,0 +1 @@
> > +rt_tgsigqueueinfo01
> > diff --git a/testcases/kernel/syscalls/rt_tgsigqueueinfo/Makefile b/testcases/kernel/syscalls/rt_tgsigqueueinfo/Makefile
> > new file mode 100644
> > index 0000000..035ca64
> > --- /dev/null
> > +++ b/testcases/kernel/syscalls/rt_tgsigqueueinfo/Makefile
> > @@ -0,0 +1,10 @@
> > +# Copyright (c) 2019 - Linaro Limited. All rights reserved.
> > +# SPDX-License-Identifier: GPL-2.0-or-later
> > +
> > +top_srcdir ?= ../../../..
> > +
> > +rt_tgsigqueueinfo01: CFLAGS+=-pthread
> > +
> > +include $(top_srcdir)/include/mk/testcases.mk
> > +
> > +include $(top_srcdir)/include/mk/generic_leaf_target.mk
> > diff --git a/testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c b/testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c
> > new file mode 100644
> > index 0000000..336b968
> > --- /dev/null
> > +++ b/testcases/kernel/syscalls/rt_tgsigqueueinfo/rt_tgsigqueueinfo01.c
> > @@ -0,0 +1,53 @@
> > +// SPDX-License-Identifier: GPL-2.0-or-later
> > +/*
> > + * Copyright (c) 2019 Linaro Limited. All rights reserved.
> > + * Author: Sumit Garg <sumit.garg@linaro.org>
> > + */
> > +
> > +/*
> > + * Test rt_tgsigqueueinfo
> > + *
> > + * This tests the rt_tgsigqueueinfo() syscall. It sends the signal and data
> > + * to the single thread specified by the combination of tgid, a thread group
> > + * ID, and tid, a thread in that thread group.
> > + */
> > +
> > +#define _GNU_SOURCE
> > +#include <err.h>
> > +#include <pthread.h>
> > +#include "tst_test.h"
> > +#include "lapi/syscalls.h"
> > +
> > +void *tfunc(void *arg LTP_ATTRIBUTE_UNUSED)
> > +{
> > + siginfo_t uinfo;
> > +
> > + uinfo.si_errno = 0;
> > + uinfo.si_code = SI_QUEUE;
> > +
> > + TEST(tst_syscall(__NR_rt_tgsigqueueinfo, getpid(),
> > + syscall(__NR_gettid), SIGCHLD, &uinfo));
>
> It looks like the pthread here is sending the signal to itself which
> seems like a special case. Not that it isn't worth testing but I'd think
> there should be a test which sends the signal to a different thread.
> This (the self-send case) could be an additional test.
>
Hmm. So do you suggest to add following cases?
1. parent -> thread
2. thread1 -> thread2
BTW, in above cases I think we need to communicate "tid" obtained via
gettid() to parent and other thread to queue signal which could be
done via "arg" parameter in pthread_create().
> > + if (TST_RET)
> > + tst_res(TFAIL, "Test Failed");
> > + else
> > + tst_res(TPASS, "Test Succeeded");
>
> I recommend verifying the signal and its data (si_value) are delivered
> successfully prior to test completion.
>
Ok, will add this verification via signal handler.
-Sumit
> > +
> > + return NULL;
> > +}
> > +
> > +static void verify_rt_tgsigqueueinfo(void)
> > +{
> > + pthread_t pt;
> > +
> > + TEST(pthread_create(&pt, NULL, tfunc, NULL));
> > + if (TST_RET)
> > + tst_brk(TFAIL | TTERRNO, "pthread_create failed");
> > +
> > + TEST(pthread_join(pt, NULL));
> > + if (TST_RET)
> > + tst_brk(TFAIL | TTERRNO, "pthread_join failed");
> > +}
> > +
> > +static struct tst_test test = {
> > + .test_all = verify_rt_tgsigqueueinfo,
> > +};
> >
>
> thanks,
> steve
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [LTP] [PATCH] syscalls: add rt_tgsigqueueinfo() test-case
2019-03-04 19:35 ` Steve Muckle
2019-03-05 10:33 ` Sumit Garg
@ 2019-03-05 13:29 ` Cyril Hrubis
1 sibling, 0 replies; 4+ messages in thread
From: Cyril Hrubis @ 2019-03-05 13:29 UTC (permalink / raw)
To: ltp
Hi!
> It looks like the pthread here is sending the signal to itself which
> seems like a special case. Not that it isn't worth testing but I'd think
> there should be a test which sends the signal to a different thread.
> This (the self-send case) could be an additional test.
>
> > + if (TST_RET)
> > + tst_res(TFAIL, "Test Failed");
> > + else
> > + tst_res(TPASS, "Test Succeeded");
>
> I recommend verifying the signal and its data (si_value) are delivered
> successfully prior to test completion.
Agreed.
Also we do have rt_sigqueueinfo01.c tests that lacks these checks as
well, it may be a good idea to rewrite that test as well, quite possibly
some code could be shared between these two as well.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-03-05 13:29 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-25 12:32 [LTP] [PATCH] syscalls: add rt_tgsigqueueinfo() test-case Sumit Garg
2019-03-04 19:35 ` Steve Muckle
2019-03-05 10:33 ` Sumit Garg
2019-03-05 13:29 ` 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.