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