Add Solaris helper object
[fio.git] / os / os-solaris.h
CommitLineData
2c0ecd28
JA
1#ifndef FIO_OS_SOLARIS_H
2#define FIO_OS_SOLARIS_H
3
690dec6e 4#include <errno.h>
f8ed6d89 5#include <malloc.h>
e116f2b9
JA
6#include <sys/types.h>
7#include <sys/fcntl.h>
6f7024e4 8#include <sys/pset.h>
e116f2b9 9
2c0ecd28 10#define FIO_HAVE_POSIXAIO
417f0068 11#define FIO_HAVE_SOLARISAIO
fffca02d 12#define FIO_HAVE_FALLOCATE
207cb0f0 13#define FIO_HAVE_POSIXAIO_FSYNC
6f7024e4 14#define FIO_HAVE_CPU_AFFINITY
f356d01d 15#define FIO_HAVE_PSHARED_MUTEX
792d5517 16#define FIO_USE_GENERIC_BDEV_SIZE
2c0ecd28 17
dc873b6f
JA
18#define OS_MAP_ANON MAP_ANON
19#define OS_RAND_MAX 2147483648UL
2c0ecd28 20
f022ddb7
JA
21struct solaris_rand_seed {
22 unsigned short r[3];
23};
24
6f7024e4 25typedef psetid_t os_cpu_mask_t;
f022ddb7 26typedef struct solaris_rand_seed os_random_state_t;
2c0ecd28 27
e5b401d4
JA
28static inline int blockdev_invalidate_cache(int fd)
29{
30 return EINVAL;
2c0ecd28
JA
31}
32
33static inline unsigned long long os_phys_mem(void)
34{
2c0ecd28 35 return 0;
2c0ecd28
JA
36}
37
38static inline void os_random_seed(unsigned long seed, os_random_state_t *rs)
39{
f022ddb7
JA
40 rs->r[0] = seed & 0xffff;
41 seed >>= 16;
42 rs->r[1] = seed & 0xffff;
43 seed >>= 16;
44 rs->r[2] = seed & 0xffff;
45 seed48(rs->r);
2c0ecd28
JA
46}
47
48static inline long os_random_long(os_random_state_t *rs)
49{
f022ddb7 50 return nrand48(rs->r);
2c0ecd28
JA
51}
52
e116f2b9
JA
53#define FIO_OS_DIRECTIO
54extern int directio(int, int);
55static inline int fio_set_odirect(int fd)
56{
57 if (directio(fd, DIRECTIO_ON) < 0)
58 return errno;
59
60 return 0;
61}
62
6f7024e4
JA
63/*
64 * pset binding hooks for fio
65 */
e8462bd8 66#define fio_setaffinity(pid, cpumask) \
f2b7ce1c 67 pset_bind((cpumask), P_PID, (pid), NULL)
39555d03 68#define fio_getaffinity(pid, ptr) ({ 0; })
6f7024e4 69
39555d03
JA
70#define fio_cpu_clear(mask, cpu) pset_assign(PS_NONE, (cpu), NULL)
71#define fio_cpu_set(mask, cpu) pset_assign(*(mask), (cpu), NULL)
d2ce18b5
JA
72
73static inline int fio_cpuset_init(os_cpu_mask_t *mask)
74{
75 int ret;
76
77 if (pset_create(mask) < 0) {
78 ret = errno;
79 return -1;
80 }
81
82 return 0;
83}
84
85static inline int fio_cpuset_exit(os_cpu_mask_t *mask)
86{
87 int ret;
88
89 if (pset_destroy(*mask) < 0) {
90 ret = errno;
91 return -1;
92 }
93
94 return 0;
95}
6f7024e4
JA
96
97/*
98 * Should be enough, not aware of what (if any) restrictions Solaris has
99 */
100#define FIO_MAX_CPUS 16384
101
a1c58075
JA
102#ifdef MADV_FREE
103#define FIO_MADV_FREE MADV_FREE
104#endif
105
2c0ecd28 106#endif