Add strong madvise() hint for cache pruning
[fio.git] / os / os-freebsd.h
1 #ifndef FIO_OS_FREEBSD_H
2 #define FIO_OS_FREEBSD_H
3
4 #include <errno.h>
5 #include <sys/sysctl.h>
6
7 #define FIO_HAVE_POSIXAIO
8 #define FIO_HAVE_ODIRECT
9
10 #define OS_MAP_ANON             MAP_ANON
11
12 typedef unsigned long os_cpu_mask_t;
13 typedef unsigned int os_random_state_t;
14
15 static inline int blockdev_size(int fd, unsigned long long *bytes)
16 {
17         off_t end = lseek(fd, 0, SEEK_END);
18
19         if (end < 0)
20                 return errno;
21
22         *bytes = end;
23         return 0;
24 }
25
26 static inline int blockdev_invalidate_cache(int fd)
27 {
28         return EINVAL;
29 }
30
31 static inline unsigned long long os_phys_mem(void)
32 {
33         int mib[2] = { CTL_HW, HW_PHYSMEM };
34         unsigned long long mem;
35         size_t len = sizeof(mem);
36
37         sysctl(mib, 2, &mem, &len, NULL, 0);
38         return mem;
39 }
40
41 static inline void os_random_seed(unsigned long seed, os_random_state_t *rs)
42 {
43         srand(seed);
44 }
45
46 static inline long os_random_long(os_random_state_t *rs)
47 {
48         long val;
49
50         val = rand_r(rs);
51         return val;
52 }
53
54 #ifdef MADV_FREE
55 #define FIO_MADV_FREE   MADV_FREE
56 #endif
57
58 #endif