os-linux.h revision d09913c248f04ab33a7e7bbfb2227e9db8b9f4a2
1ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#ifndef FIO_OS_LINUX_H 2ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_OS_LINUX_H 3ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 4ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#include <sys/ioctl.h> 58756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe#include <sys/uio.h> 63c39a379542fd819dbc5cf6daf59380911c39141Jens Axboe#include <sys/syscall.h> 73c39a379542fd819dbc5cf6daf59380911c39141Jens Axboe#include <unistd.h> 897fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe#include <fcntl.h> 93c2d93ede7d03b3a6923edb55c7737fe014794cbJens Axboe#include <errno.h> 10d09913c248f04ab33a7e7bbfb2227e9db8b9f4a2Jens Axboe#include <sched.h> 11ea421790658582e392c5bb562ff461f8f5c71844Jens Axboe#include <linux/unistd.h> 1207e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe#include <linux/raw.h> 1307e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe#include <linux/major.h> 14ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 15f3de88a7a8806016ebb27af3f4be1fced172122eJens Axboe#include "indirect.h" 16f3de88a7a8806016ebb27af3f4be1fced172122eJens Axboe 17ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_LIBAIO 18ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_POSIXAIO 19ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_FADVISE 20ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_CPU_AFFINITY 21ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_DISK_UTIL 22ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_HAVE_SGIO 23ba4f8923a7d7b02e69f6daee8dee5ed6e44722ceJens Axboe#define FIO_HAVE_IOPRIO 248756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe#define FIO_HAVE_SPLICE 2522f78b320a8d2ffa32b5736fe754c108a8d21525Jens Axboe#define FIO_HAVE_IOSCHED_SWITCH 262c0ecd28459b6a1b236c865defb5ef76ce8bfa02Jens Axboe#define FIO_HAVE_ODIRECT 2774b025b071b5bfbffa7ad7682b66b749e8d1f955Jens Axboe#define FIO_HAVE_HUGETLB 2807e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe#define FIO_HAVE_RAWBIND 295e62c22a669c7a8c03b7871852cf85ad6d355980Jens Axboe#define FIO_HAVE_BLKTRACE 305921e80c5dfc9f96d2f21da6ae58f2b5d3a0b373Jens Axboe#define FIO_HAVE_STRSEP 31fffca02dfd1b700903ba23b67fab7b59bf460ec2Jens Axboe#define FIO_HAVE_FALLOCATE 32207cb0f05e689a50ffb960830f52169a1342aba7Jens Axboe#define FIO_HAVE_POSIXAIO_FSYNC 33f356d01d0cf8fec2ee58f66a9b5c00c93defbc47Jens Axboe#define FIO_HAVE_PSHARED_MUTEX 34eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe#define FIO_HAVE_CL_SIZE 35a696fa2a9c2e21a1c88813235d6fc39d267f6155Jens Axboe#define FIO_HAVE_CGROUPS 36b6959b55efa7f464dbb7e7f2021dd67d297219bdJens Axboe 37dc873b6f4a536c332b72cce268d5a7ccd356a891Jens Axboe#define OS_MAP_ANON MAP_ANONYMOUS 38ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 394d8947de2b50578a4f6290be567cb5de5bf46776Shawn Lewis#ifndef CLOCK_MONOTONIC 404d8947de2b50578a4f6290be567cb5de5bf46776Shawn Lewis#define CLOCK_MONOTONIC 1 414d8947de2b50578a4f6290be567cb5de5bf46776Shawn Lewis#endif 424d8947de2b50578a4f6290be567cb5de5bf46776Shawn Lewis 43ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboetypedef cpu_set_t os_cpu_mask_t; 444e78e405a12b31291aa88fffc1da2cf43b782ef5Jens Axboe 456dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboetypedef struct drand48_data os_random_state_t; 46ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 47ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe/* 48ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe * we want fadvise64 really, but it's so tangled... later 49ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe */ 504d8947de2b50578a4f6290be567cb5de5bf46776Shawn Lewis#ifdef FIO_HAVE_FADVISE 51ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define fadvise(fd, off, len, advice) \ 52ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe posix_fadvise((fd), (off_t)(off), (len), (advice)) 534d8947de2b50578a4f6290be567cb5de5bf46776Shawn Lewis#endif 54ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 55c8f025f8a33e05b10fe928d5899ac4e948847eb6Jens Axboe/* 56c8f025f8a33e05b10fe928d5899ac4e948847eb6Jens Axboe * If you are on an ancient glibc (2.3.2), then define GLIBC_2_3_2 if you want 57c8f025f8a33e05b10fe928d5899ac4e948847eb6Jens Axboe * the affinity helpers to work. 58c8f025f8a33e05b10fe928d5899ac4e948847eb6Jens Axboe */ 59c8f025f8a33e05b10fe928d5899ac4e948847eb6Jens Axboe#ifndef GLIBC_2_3_2 60e8462bd8250cf3ff2d41f17e1a4d4cefc70b6b37Jens Axboe#define fio_setaffinity(pid, cpumask) \ 61e8462bd8250cf3ff2d41f17e1a4d4cefc70b6b37Jens Axboe sched_setaffinity((pid), sizeof(cpumask), &(cpumask)) 62ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define fio_getaffinity(pid, ptr) \ 63ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe sched_getaffinity((pid), sizeof(cpu_set_t), (ptr)) 64c8f025f8a33e05b10fe928d5899ac4e948847eb6Jens Axboe#else 65e8462bd8250cf3ff2d41f17e1a4d4cefc70b6b37Jens Axboe#define fio_setaffinity(pid, cpumask) \ 66e8462bd8250cf3ff2d41f17e1a4d4cefc70b6b37Jens Axboe sched_setaffinity((pid), &(cpumask)) 67c8f025f8a33e05b10fe928d5899ac4e948847eb6Jens Axboe#define fio_getaffinity(pid, ptr) \ 68c8f025f8a33e05b10fe928d5899ac4e948847eb6Jens Axboe sched_getaffinity((pid), (ptr)) 69c8f025f8a33e05b10fe928d5899ac4e948847eb6Jens Axboe#endif 70be4ecfdf6c8daa75c4df8ac875c9a87da80d81a0Jens Axboe 71be4ecfdf6c8daa75c4df8ac875c9a87da80d81a0Jens Axboe#define fio_cpu_clear(mask, cpu) CPU_CLR((cpu), (mask)) 726d459ee7e90393af490a64709aec206d8a585ebdJens Axboe#define fio_cpu_set(mask, cpu) CPU_SET((cpu), (mask)) 73d2ce18b5dfdc1736a99b4e2d731119cc4880e197Jens Axboe 74d2ce18b5dfdc1736a99b4e2d731119cc4880e197Jens Axboestatic inline int fio_cpuset_init(os_cpu_mask_t *mask) 75d2ce18b5dfdc1736a99b4e2d731119cc4880e197Jens Axboe{ 76d2ce18b5dfdc1736a99b4e2d731119cc4880e197Jens Axboe CPU_ZERO(mask); 77d2ce18b5dfdc1736a99b4e2d731119cc4880e197Jens Axboe return 0; 78d2ce18b5dfdc1736a99b4e2d731119cc4880e197Jens Axboe} 79d2ce18b5dfdc1736a99b4e2d731119cc4880e197Jens Axboe 80d2ce18b5dfdc1736a99b4e2d731119cc4880e197Jens Axboestatic inline int fio_cpuset_exit(os_cpu_mask_t *mask) 81d2ce18b5dfdc1736a99b4e2d731119cc4880e197Jens Axboe{ 82d2ce18b5dfdc1736a99b4e2d731119cc4880e197Jens Axboe return 0; 83d2ce18b5dfdc1736a99b4e2d731119cc4880e197Jens Axboe} 846d459ee7e90393af490a64709aec206d8a585ebdJens Axboe 856d459ee7e90393af490a64709aec206d8a585ebdJens Axboe#define FIO_MAX_CPUS CPU_SETSIZE 864d8947de2b50578a4f6290be567cb5de5bf46776Shawn Lewis 87ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboestatic inline int ioprio_set(int which, int who, int ioprio) 88ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe{ 89ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe return syscall(__NR_ioprio_set, which, who, ioprio); 90ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe} 91ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 9297fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe/* 9397fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe * Just check for SPLICE_F_MOVE, if that isn't there, assume the others 9497fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe * aren't either. 9597fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe */ 9697fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe#ifndef SPLICE_F_MOVE 9797fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe#define SPLICE_F_MOVE (0x01) /* move pages instead of copying */ 9897fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe#define SPLICE_F_NONBLOCK (0x02) /* don't block on the pipe splicing (but */ 9997fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe /* we may still block on the fd we splice */ 10097fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe /* from/to, of course */ 10197fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe#define SPLICE_F_MORE (0x04) /* expect more data */ 10297fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe#define SPLICE_F_GIFT (0x08) /* pages passed in are a gift */ 1038756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe 1048756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboestatic inline int splice(int fdin, loff_t *off_in, int fdout, loff_t *off_out, 105495ee9b632c5629e79a46d1074cacf4eda965e13Jens Axboe size_t len, unsigned int flags) 1068756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe{ 10797fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe return syscall(__NR_sys_splice, fdin, off_in, fdout, off_out, len, flags); 1088756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe} 1098756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe 1108756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboestatic inline int tee(int fdin, int fdout, size_t len, unsigned int flags) 1118756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe{ 11297fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe return syscall(__NR_sys_tee, fdin, fdout, len, flags); 1138756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe} 1148756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe 1158756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboestatic inline int vmsplice(int fd, const struct iovec *iov, 1168756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe unsigned long nr_segs, unsigned int flags) 1178756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe{ 11897fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe return syscall(__NR_sys_vmsplice, fd, iov, nr_segs, flags); 1198756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe} 12097fbdfa1a48a6b535d420e3f53bcb62ed4eff3f1Jens Axboe#endif 1218756e4d421722eaeb089067aeaaf317d05d53a57Jens Axboe 1223feedc608f168479bde2f2e079cedd6852cb3b3bJens Axboe#define SPLICE_DEF_SIZE (64*1024) 1233feedc608f168479bde2f2e079cedd6852cb3b3bJens Axboe 124b6959b55efa7f464dbb7e7f2021dd67d297219bdJens Axboe#ifdef FIO_HAVE_SYSLET 125bf0dc8fae8b21c666a0a927c1d473ad59101e7fdIngo Molnar 126bf0dc8fae8b21c666a0a927c1d473ad59101e7fdIngo Molnarstruct syslet_uatom; 127bf0dc8fae8b21c666a0a927c1d473ad59101e7fdIngo Molnarstruct async_head_user; 128bf0dc8fae8b21c666a0a927c1d473ad59101e7fdIngo Molnar 129a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe/* 130a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe * syslet stuff 131a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe */ 132bf0dc8fae8b21c666a0a927c1d473ad59101e7fdIngo Molnarstatic inline struct syslet_uatom * 133bf0dc8fae8b21c666a0a927c1d473ad59101e7fdIngo Molnarasync_exec(struct syslet_uatom *atom, struct async_head_user *ahu) 134a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe{ 1352b52511f3f595e0932e7f9c55bed243e8fe0f4f8Daniel Rall return (struct syslet_uatom *) syscall(__NR_async_exec, atom, ahu); 136a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe} 137a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe 138bf0dc8fae8b21c666a0a927c1d473ad59101e7fdIngo Molnarstatic inline long 139bf0dc8fae8b21c666a0a927c1d473ad59101e7fdIngo Molnarasync_wait(unsigned long min_wait_events, unsigned long user_ring_idx, 140bf0dc8fae8b21c666a0a927c1d473ad59101e7fdIngo Molnar struct async_head_user *ahu) 141a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe{ 142bf0dc8fae8b21c666a0a927c1d473ad59101e7fdIngo Molnar return syscall(__NR_async_wait, min_wait_events, 143bf0dc8fae8b21c666a0a927c1d473ad59101e7fdIngo Molnar user_ring_idx, ahu); 144a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe} 145a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe 1467756b0d046ef74c32df134c8b716237cc5e16badJens Axboestatic inline long async_thread(void *event, struct async_head_user *ahu) 147a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe{ 1487756b0d046ef74c32df134c8b716237cc5e16badJens Axboe return syscall(__NR_async_thread, event, ahu); 149a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe} 150a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe 151a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboestatic inline long umem_add(unsigned long *uptr, unsigned long inc) 152a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe{ 153a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe return syscall(__NR_umem_add, uptr, inc); 154a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe} 155b6959b55efa7f464dbb7e7f2021dd67d297219bdJens Axboe#endif /* FIO_HAVE_SYSLET */ 156a4f4fdd7c9e46a50bc33ecef44d9f06036580ad4Jens Axboe 157ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboeenum { 1586cefbe338b159edc9417da5840383765acbd92c7Jens Axboe IOPRIO_CLASS_NONE, 1596cefbe338b159edc9417da5840383765acbd92c7Jens Axboe IOPRIO_CLASS_RT, 1606cefbe338b159edc9417da5840383765acbd92c7Jens Axboe IOPRIO_CLASS_BE, 1616cefbe338b159edc9417da5840383765acbd92c7Jens Axboe IOPRIO_CLASS_IDLE, 1626cefbe338b159edc9417da5840383765acbd92c7Jens Axboe}; 1636cefbe338b159edc9417da5840383765acbd92c7Jens Axboe 1646cefbe338b159edc9417da5840383765acbd92c7Jens Axboeenum { 165ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe IOPRIO_WHO_PROCESS = 1, 166ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe IOPRIO_WHO_PGRP, 167ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe IOPRIO_WHO_USER, 168ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe}; 169ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 1706cefbe338b159edc9417da5840383765acbd92c7Jens Axboe#define IOPRIO_BITS 16 171ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define IOPRIO_CLASS_SHIFT 13 172ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 173ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#ifndef BLKGETSIZE64 174ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define BLKGETSIZE64 _IOR(0x12,114,size_t) 175ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#endif 176ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 177e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboe#ifndef BLKFLSBUF 178e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboe#define BLKFLSBUF _IO(0x12,97) 179e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboe#endif 180e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboe 181e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboestatic inline int blockdev_invalidate_cache(int fd) 182e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboe{ 183a16211bb932067978f74606eb5d3f92e5227eee2Jens Axboe return ioctl(fd, BLKFLSBUF); 184e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboe} 185e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboe 1869104f874d726e84739d3b4008eee0f6ddfe96714Jens Axboestatic inline int blockdev_size(int fd, unsigned long long *bytes) 187ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe{ 188ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe if (!ioctl(fd, BLKGETSIZE64, bytes)) 189ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe return 0; 190ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 191ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe return errno; 192ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe} 193ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 19432cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboestatic inline unsigned long long os_phys_mem(void) 19532cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe{ 19632cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe long pagesize, pages; 19732cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe 19832cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe pagesize = sysconf(_SC_PAGESIZE); 19932cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe pages = sysconf(_SC_PHYS_PAGES); 20032cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe if (pages == -1 || pagesize == -1) 20132cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe return 0; 20232cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe 20332cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe return (unsigned long long) pages * (unsigned long long) pagesize; 20432cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe} 20532cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe 2066dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboestatic inline void os_random_seed(unsigned long seed, os_random_state_t *rs) 2076dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboe{ 2086dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboe srand48_r(seed, rs); 2096dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboe} 2106dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboe 2116dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboestatic inline long os_random_long(os_random_state_t *rs) 2126dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboe{ 2136dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboe long val; 2146dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboe 2156dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboe lrand48_r(rs, &val); 2166dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboe return val; 2176dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboe} 2186dfd46b99af38cc1e5f702f53c59212129fe615eJens Axboe 2198cc7afa91ddc5a0980b9d2dbfdd66e1511a0d4b1Jens Axboestatic inline int fio_lookup_raw(dev_t dev, int *majdev, int *mindev) 22007e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe{ 22107e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe struct raw_config_request rq; 22207e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe int fd; 22307e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe 22407e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe if (major(dev) != RAW_MAJOR) 2258cc7afa91ddc5a0980b9d2dbfdd66e1511a0d4b1Jens Axboe return 1; 22607e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe 22707e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe /* 22807e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe * we should be able to find /dev/rawctl or /dev/raw/rawctl 22907e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe */ 23007e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe fd = open("/dev/rawctl", O_RDONLY); 23107e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe if (fd < 0) { 23207e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe fd = open("/dev/raw/rawctl", O_RDONLY); 23307e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe if (fd < 0) 2348cc7afa91ddc5a0980b9d2dbfdd66e1511a0d4b1Jens Axboe return 1; 23507e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe } 23607e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe 23707e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe rq.raw_minor = minor(dev); 23807e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe if (ioctl(fd, RAW_GETBIND, &rq) < 0) { 23907e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe close(fd); 2408cc7afa91ddc5a0980b9d2dbfdd66e1511a0d4b1Jens Axboe return 1; 24107e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe } 24207e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe 24307e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe close(fd); 24407e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe *majdev = rq.block_major; 24507e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe *mindev = rq.block_minor; 2468cc7afa91ddc5a0980b9d2dbfdd66e1511a0d4b1Jens Axboe return 0; 24707e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe} 24807e5b2646f673a56c05a53c6a84bf5d0c949d290Jens Axboe 2495b6f5c6609c530943310754028d2628d984b6595Jens Axboe#ifdef O_NOATIME 2505921e80c5dfc9f96d2f21da6ae58f2b5d3a0b373Jens Axboe#define FIO_O_NOATIME O_NOATIME 2515b6f5c6609c530943310754028d2628d984b6595Jens Axboe#else 2525b6f5c6609c530943310754028d2628d984b6595Jens Axboe#define FIO_O_NOATIME 0 2535b6f5c6609c530943310754028d2628d984b6595Jens Axboe#endif 2545921e80c5dfc9f96d2f21da6ae58f2b5d3a0b373Jens Axboe 255a1c58075279454a91ec43366846b93e8dcf9753cJens Axboe#ifdef MADV_REMOVE 256a1c58075279454a91ec43366846b93e8dcf9753cJens Axboe#define FIO_MADV_FREE MADV_REMOVE 257a1c58075279454a91ec43366846b93e8dcf9753cJens Axboe#endif 258a1c58075279454a91ec43366846b93e8dcf9753cJens Axboe 259eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe#define CACHE_LINE_FILE \ 260eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe "/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size" 261eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe 262eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboestatic inline int arch_cache_line_size(void) 263eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe{ 264eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe char size[32]; 265eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe int fd, ret; 266eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe 267eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe fd = open(CACHE_LINE_FILE, O_RDONLY); 268eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe if (fd < 0) 269eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe return -1; 270eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe 271eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe ret = read(fd, size, sizeof(size)); 272ec76f15a4ae995c06db6c6dda6a6fa41b189f613Jens Axboe 273ec76f15a4ae995c06db6c6dda6a6fa41b189f613Jens Axboe close(fd); 274ec76f15a4ae995c06db6c6dda6a6fa41b189f613Jens Axboe 275eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe if (ret <= 0) 276eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe return -1; 277ec76f15a4ae995c06db6c6dda6a6fa41b189f613Jens Axboe else 278ec76f15a4ae995c06db6c6dda6a6fa41b189f613Jens Axboe return atoi(size); 279eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe} 280eb7ccf38bf2e9208b593d021c50e9ad2ec0781eaJens Axboe 281ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#endif 282