blob: a14c48578fc7774e998a0587525975dc1d28c3b8 [file] [log] [blame]
Jens Axboeebac4652005-12-08 15:25:21 +01001#ifndef FIO_OS_H
2#define FIO_OS_H
3
4#if defined(__linux__)
5#include "os-linux.h"
6#elif defined(__FreeBSD__)
7#include "os-freebsd.h"
Jens Axboe2c0ecd22006-06-08 13:25:41 +02008#elif defined(__sun__)
9#include "os-solaris.h"
Jens Axboe2afd8262009-12-14 23:08:42 +010010#elif defined(__APPLE__)
11#include "os-mac.h"
Jens Axboeebac4652005-12-08 15:25:21 +010012#else
13#error "unsupported os"
14#endif
15
16#ifdef FIO_HAVE_LIBAIO
17#include <libaio.h>
18#endif
19
20#ifdef FIO_HAVE_POSIXAIO
21#include <aio.h>
22#endif
23
24#ifdef FIO_HAVE_SGIO
25#include <linux/fs.h>
26#include <scsi/sg.h>
27#endif
28
Jens Axboe5921e802008-05-30 15:02:38 +020029#ifndef FIO_HAVE_STRSEP
Jens Axboe00fb3c82008-05-30 22:17:45 +020030#include "../lib/strsep.h"
Jens Axboe5921e802008-05-30 15:02:38 +020031#endif
32
Jens Axboeebac4652005-12-08 15:25:21 +010033#ifndef FIO_HAVE_FADVISE
34#define fadvise(fd, off, len, advice) (0)
35
Shawn Lewis4d8947d2007-07-25 07:51:58 +020036#ifndef POSIX_FADV_DONTNEED
Jens Axboeebac4652005-12-08 15:25:21 +010037#define POSIX_FADV_DONTNEED (0)
38#define POSIX_FADV_SEQUENTIAL (0)
39#define POSIX_FADV_RANDOM (0)
Shawn Lewis4d8947d2007-07-25 07:51:58 +020040#endif
Jens Axboeebac4652005-12-08 15:25:21 +010041#endif /* FIO_HAVE_FADVISE */
42
43#ifndef FIO_HAVE_CPU_AFFINITY
Jens Axboee8462bd2009-07-06 12:59:04 +020044#define fio_setaffinity(pid, mask) (0)
Jens Axboebe4ecfd2008-12-08 14:10:52 +010045#define fio_getaffinity(pid, mask) do { } while (0)
46#define fio_cpu_clear(mask, cpu) do { } while (0)
Jens Axboe85daf2c2009-01-05 09:40:13 +010047#define fio_cpuset_exit(mask) (-1)
Jens Axboeebac4652005-12-08 15:25:21 +010048#endif
49
50#ifndef FIO_HAVE_IOPRIO
51#define ioprio_set(which, who, prio) (0)
52#endif
53
Jens Axboe2c0ecd22006-06-08 13:25:41 +020054#ifndef FIO_HAVE_ODIRECT
Jens Axboe7d424762006-06-08 13:26:31 +020055#define OS_O_DIRECT 0
56#else
57#define OS_O_DIRECT O_DIRECT
Jens Axboe2c0ecd22006-06-08 13:25:41 +020058#endif
59
Jens Axboe74b025b2006-12-19 15:18:14 +010060#ifndef FIO_HAVE_HUGETLB
61#define SHM_HUGETLB 0
Shawn Lewis4d8947d2007-07-25 07:51:58 +020062#ifndef FIO_HUGE_PAGE
Jens Axboe74b025b2006-12-19 15:18:14 +010063#define FIO_HUGE_PAGE 0
Shawn Lewis4d8947d2007-07-25 07:51:58 +020064#endif
Jens Axboe74b025b2006-12-19 15:18:14 +010065#else
Jens Axboecb25df62007-03-23 08:23:30 +010066#ifndef FIO_HUGE_PAGE
Jens Axboeee0e0a72007-03-19 10:50:47 +010067#define FIO_HUGE_PAGE 4194304
Jens Axboe74b025b2006-12-19 15:18:14 +010068#endif
Jens Axboecb25df62007-03-23 08:23:30 +010069#endif
Jens Axboe74b025b2006-12-19 15:18:14 +010070
Jens Axboe5921e802008-05-30 15:02:38 +020071#ifndef FIO_O_NOATIME
72#define FIO_O_NOATIME 0
73#endif
74
Jens Axboedc873b62008-06-04 20:13:04 +020075#ifndef OS_RAND_MAX
76#define OS_RAND_MAX RAND_MAX
77#endif
78
Jens Axboe07e5b262007-04-02 14:46:07 +020079#ifndef FIO_HAVE_RAWBIND
Jens Axboe8cc7afa2007-04-17 09:06:43 +020080#define fio_lookup_raw(dev, majdev, mindev) 1
Jens Axboe07e5b262007-04-02 14:46:07 +020081#endif
82
Jens Axboe5e62c222007-05-22 13:27:30 +020083#ifndef FIO_HAVE_BLKTRACE
84static inline int is_blktrace(const char *fname)
85{
86 return 0;
87}
Jens Axboe5921e802008-05-30 15:02:38 +020088struct thread_data;
Jens Axboe5e62c222007-05-22 13:27:30 +020089static inline int load_blktrace(struct thread_data *td, const char *fname)
90{
91 return 1;
92}
93#endif
94
Jens Axboeeb7ccf32009-04-29 09:48:04 +020095#define FIO_DEF_CL_SIZE 128
96
97static inline int os_cache_line_size(void)
98{
99#ifdef FIO_HAVE_CL_SIZE
100 int ret = arch_cache_line_size();
101
102 if (ret <= 0)
103 return FIO_DEF_CL_SIZE;
104
105 return ret;
106#else
107 return FIO_DEF_CL_SIZE;
108#endif
109}
110
Jens Axboe792d5512009-09-22 17:12:29 +0200111#ifdef FIO_USE_GENERIC_BDEV_SIZE
112static inline int blockdev_size(int fd, unsigned long long *bytes)
113{
Jens Axboe3b2e1462009-12-15 08:58:10 +0100114 off_t end;
Jens Axboe792d5512009-09-22 17:12:29 +0200115
Jens Axboe3b2e1462009-12-15 08:58:10 +0100116 *bytes = 0;
117
118 end = lseek(fd, 0, SEEK_END);
Jens Axboe792d5512009-09-22 17:12:29 +0200119 if (end < 0)
120 return errno;
121
122 *bytes = end;
123 return 0;
124}
125#endif
126
Jens Axboeebac4652005-12-08 15:25:21 +0100127#endif