]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tools/test/stress2/misc/inversion.sh
Update DTS files from Linux v5.10
[FreeBSD/FreeBSD.git] / tools / test / stress2 / misc / inversion.sh
1 #!/bin/sh
2
3 #
4 # Copyright (c) 2008 Peter Holm <pho@FreeBSD.org>
5 # All rights reserved.
6 #
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
9 # are met:
10 # 1. Redistributions of source code must retain the above copyright
11 #    notice, this list of conditions and the following disclaimer.
12 # 2. Redistributions in binary form must reproduce the above copyright
13 #    notice, this list of conditions and the following disclaimer in the
14 #    documentation and/or other materials provided with the distribution.
15 #
16 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 # SUCH DAMAGE.
27 #
28
29 # Provokes a deadlock by lower priority process holding a lock and
30 # never beeing run
31
32 . ../default.cfg
33
34 dir=$RUNDIR
35 N=5     # Number of CPUs + 1
36 M=25    # Number of lower priority jobs
37
38 odir=`pwd`
39 mkdir -p $dir || exit 1
40 cd $dir
41 sed '1,/^EOF/d' < $odir/$0 > $dir/inversion.c
42 mycc -o inversion -Wall inversion.c
43 rm -f inversion.c
44
45 mp=`df $dir | tail -1 | awk '{print $NF}'`
46 mp=`mount | grep "on $mp "`
47 if echo $mp | grep -wq nfs; then
48         pgrep -q lockd || { echo "lockd not running"; exit 0; }
49 fi
50
51 for i in `jot $N`; do
52         ./inversion 600 &
53 done
54
55 while pgrep inversion > /dev/null; do
56         (
57                 for i in `jot $M`; do
58                         nice -n 20 lockf -s -t 0 .lock pwd > /dev/null &
59                 done
60                 for i in `jot $M`; do
61                         wait
62                 done
63         )
64 done
65
66 for i in `jot $N`; do
67         wait
68 done
69 rm -f inversion
70 exit
71
72 EOF
73 #include <signal.h>
74 #include <stdlib.h>
75 #include <unistd.h>
76
77 void
78 handler(int i)
79 {
80         exit(0);
81 }
82
83 int
84 main(int argc, char **argv)
85 {
86
87         int t;
88         if (argc == 2)
89                 t = atoi(argv[1]);
90         else
91                 t = 60;
92         signal(SIGALRM, handler);
93         alarm(t);
94         for (;;)
95                 ;
96         return (0);
97 }