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