xref: /netbsd-src/tests/rump/rumpkern/t_workqueue.c (revision 53a88a4133055a17724bc5e8dcf823eba35bc708)
1*53a88a41Sriastradh /*	$NetBSD: t_workqueue.c,v 1.4 2023/08/09 08:23:13 riastradh Exp $	*/
2aef814ffSmaya 
3aef814ffSmaya /*-
4aef814ffSmaya  * Copyright (c) 2017 The NetBSD Foundation, Inc.
5aef814ffSmaya  * All rights reserved.
6aef814ffSmaya  *
7aef814ffSmaya  * Redistribution and use in source and binary forms, with or without
8aef814ffSmaya  * modification, are permitted provided that the following conditions
9aef814ffSmaya  * are met:
10aef814ffSmaya  * 1. Redistributions of source code must retain the above copyright
11aef814ffSmaya  *    notice, this list of conditions and the following disclaimer.
12aef814ffSmaya  * 2. Redistributions in binary form must reproduce the above copyright
13aef814ffSmaya  *    notice, this list of conditions and the following disclaimer in the
14aef814ffSmaya  *    documentation and/or other materials provided with the distribution.
15aef814ffSmaya  *
16aef814ffSmaya  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17aef814ffSmaya  * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18aef814ffSmaya  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19aef814ffSmaya  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20aef814ffSmaya  * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21aef814ffSmaya  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22aef814ffSmaya  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23aef814ffSmaya  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24aef814ffSmaya  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25aef814ffSmaya  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26aef814ffSmaya  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27aef814ffSmaya  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28aef814ffSmaya  */
29aef814ffSmaya 
30aef814ffSmaya #include <sys/types.h>
31aef814ffSmaya #include <sys/mount.h>
32aef814ffSmaya #include <sys/sysctl.h>
33aef814ffSmaya 
34aef814ffSmaya #include <rump/rump.h>
35aef814ffSmaya 
36aef814ffSmaya #include <atf-c.h>
37aef814ffSmaya 
38aef814ffSmaya #include "h_macros.h"
39aef814ffSmaya #include "../kernspace/kernspace.h"
40aef814ffSmaya 
41aef814ffSmaya ATF_TC(workqueue1);
ATF_TC_HEAD(workqueue1,tc)42aef814ffSmaya ATF_TC_HEAD(workqueue1, tc)
43aef814ffSmaya {
44aef814ffSmaya 
45aef814ffSmaya 	atf_tc_set_md_var(tc, "descr", "Checks workqueue basics");
46aef814ffSmaya }
47aef814ffSmaya 
ATF_TC_BODY(workqueue1,tc)48aef814ffSmaya ATF_TC_BODY(workqueue1, tc)
49aef814ffSmaya {
50aef814ffSmaya 
51aef814ffSmaya 	rump_init();
52aef814ffSmaya 
53aef814ffSmaya 	rump_schedule();
54aef814ffSmaya 	rumptest_workqueue1(); /* panics if fails */
55aef814ffSmaya 	rump_unschedule();
56aef814ffSmaya }
57aef814ffSmaya 
5861673e6eSozaki-r ATF_TC(workqueue_wait);
ATF_TC_HEAD(workqueue_wait,tc)5961673e6eSozaki-r ATF_TC_HEAD(workqueue_wait, tc)
6061673e6eSozaki-r {
6161673e6eSozaki-r 
6261673e6eSozaki-r 	atf_tc_set_md_var(tc, "descr", "Checks workqueue_wait");
6361673e6eSozaki-r }
6461673e6eSozaki-r 
ATF_TC_BODY(workqueue_wait,tc)6561673e6eSozaki-r ATF_TC_BODY(workqueue_wait, tc)
6661673e6eSozaki-r {
6761673e6eSozaki-r 
6861673e6eSozaki-r 	rump_init();
6961673e6eSozaki-r 
7061673e6eSozaki-r 	rump_schedule();
7161673e6eSozaki-r 	rumptest_workqueue_wait(); /* panics if fails */
7261673e6eSozaki-r 	rump_unschedule();
7361673e6eSozaki-r }
7461673e6eSozaki-r 
75f8e8b7bfSriastradh static void
sigsegv(int signo)76f8e8b7bfSriastradh sigsegv(int signo)
77f8e8b7bfSriastradh {
78f8e8b7bfSriastradh 	atf_tc_fail("SIGSEGV");
79f8e8b7bfSriastradh }
80f8e8b7bfSriastradh 
81f8e8b7bfSriastradh ATF_TC(workqueue_wait_pause);
ATF_TC_HEAD(workqueue_wait_pause,tc)82f8e8b7bfSriastradh ATF_TC_HEAD(workqueue_wait_pause, tc)
83f8e8b7bfSriastradh {
84f8e8b7bfSriastradh 
85f8e8b7bfSriastradh 	atf_tc_set_md_var(tc, "descr", "Checks workqueue_wait with pause");
86f8e8b7bfSriastradh }
87f8e8b7bfSriastradh 
ATF_TC_BODY(workqueue_wait_pause,tc)88f8e8b7bfSriastradh ATF_TC_BODY(workqueue_wait_pause, tc)
89f8e8b7bfSriastradh {
90f8e8b7bfSriastradh 
91f8e8b7bfSriastradh 	REQUIRE_LIBC(signal(SIGSEGV, &sigsegv), SIG_ERR);
92f8e8b7bfSriastradh 
93f8e8b7bfSriastradh 	rump_init();
94f8e8b7bfSriastradh 
95f8e8b7bfSriastradh 	rump_schedule();
96f8e8b7bfSriastradh 	rumptest_workqueue_wait_pause(); /* panics or SIGSEGVs if fails */
97f8e8b7bfSriastradh 	rump_unschedule();
98f8e8b7bfSriastradh }
99f8e8b7bfSriastradh 
ATF_TP_ADD_TCS(tp)100aef814ffSmaya ATF_TP_ADD_TCS(tp)
101aef814ffSmaya {
102aef814ffSmaya 	ATF_TP_ADD_TC(tp, workqueue1);
10361673e6eSozaki-r 	ATF_TP_ADD_TC(tp, workqueue_wait);
104f8e8b7bfSriastradh 	ATF_TP_ADD_TC(tp, workqueue_wait_pause);
105aef814ffSmaya 
106aef814ffSmaya 	return atf_no_error();
107aef814ffSmaya }
108