make mt-sosd use the newly added dispatch reason
[archipelago] / xseg / sys / kernel / segtest.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/mman.h>
4 #include <sys/ioctl.h>
5 #include <sys/types.h>
6 #include <sys/stat.h>
7 #include <fcntl.h>
8 #include <unistd.h>
9
10 #include "segdev.h"
11
12 int fail(const char *msg)
13 {
14         perror(msg);
15         return 1;
16 }
17
18 int main(int argc, char **argv)
19 {
20         int fd;
21         char *segment;
22         unsigned long i;
23         long segsize, oldsize;
24
25         if (argc < 2) {
26                 printf("Usage: ./segtest <segsize in kB>\n");
27                 return 1;
28         }
29
30         segsize = atol(argv[1]) * 1024;
31         if (segsize < 0)
32                 segsize = -segsize;
33
34         fd = open("/dev/segdev", O_RDWR);
35         if (fd < 0)
36                 return fail("/dev/segdev");
37
38         oldsize = ioctl(fd, SEGDEV_IOC_SEGSIZE, 0);
39         if (oldsize < 0) {
40
41                 printf("No segment found. Creating...\n");
42         
43                 if (ioctl(fd, SEGDEV_IOC_CREATESEG, segsize))
44                         return fail("CREATESEG");
45
46         } else if (segsize != oldsize) {
47
48                 printf("Destroying old segment...\n");
49
50                 if (ioctl(fd, SEGDEV_IOC_DESTROYSEG, 0))
51                         return fail("DESTROYSEG");
52
53                 if (ioctl(fd, SEGDEV_IOC_CREATESEG, segsize))
54                         return fail("CREATESEG");
55         }
56
57         segment = mmap( NULL, segsize,
58                         PROT_READ | PROT_WRITE,
59                         MAP_SHARED, fd, 0 );
60         close(fd);
61
62         if (segment == MAP_FAILED)
63                 return fail("mmap");
64
65         for (i = 0; i < segsize; i++)
66                 segment[i] = (char)(i & 0xff);
67
68         for (i = 0; i < segsize; i++)
69                 if (segment[i] != (char)(i & 0xff))
70                         printf("%lu: %d vs %ld\n", i, segment[i], (i & 0xff));
71         return 0;
72 }
73