1ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#ifndef FIO_OS_FREEBSD_H 2ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#define FIO_OS_FREEBSD_H 3ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 4cca84643cc10cd72b0b453ff92ccb8643ba51493Jens Axboe#define FIO_OS os_freebsd 5cca84643cc10cd72b0b453ff92ccb8643ba51493Jens Axboe 6690dec6e4ec7297a477b809fa24ee23dc02348c9Jens Axboe#include <errno.h> 75c4e1dbc4ec6ee963220c5f4e64a04cd6130dc81Jens Axboe#include <sys/sysctl.h> 8aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe#include <sys/disk.h> 9b939683e7b997653a35bd7d55f733fc96030b246Jens Axboe#include <sys/thr.h> 10f1415a9fa9c892b6aa146ef87ca78471bcb57bdbBruce Cran#include <sys/socket.h> 11638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran#include <sys/param.h> 12638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran#include <sys/cpuset.h> 135c4e1dbc4ec6ee963220c5f4e64a04cd6130dc81Jens Axboe 14e2e58886427019b525d2a234c5404a38ec0c7ebfJens Axboe#include "../file.h" 15e2e58886427019b525d2a234c5404a38ec0c7ebfJens Axboe 162c0ecd28459b6a1b236c865defb5ef76ce8bfa02Jens Axboe#define FIO_HAVE_ODIRECT 17535313705d69dc16f27ca38acf2f9bf7205e410dJens Axboe#define FIO_USE_GENERIC_RAND 1893bcfd20e37cef8cec350fe06d3a086724c9f257Bruce Cran#define FIO_USE_GENERIC_INIT_RANDOM_STATE 194ccdccd149d82c94ec6ccdb4118d9e27479b8516Jens Axboe#define FIO_HAVE_CHARDEV_SIZE 20e8d588e4d31f9d1e93b14499d23760d1d3d2db6bJens Axboe#define FIO_HAVE_GETTID 21638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran#define FIO_HAVE_CPU_AFFINITY 22ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 23dc873b6f4a536c332b72cce268d5a7ccd356a891Jens Axboe#define OS_MAP_ANON MAP_ANON 24ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 25232f9b73353e0322fe135d3029beecedaed7a17bJens Axboe#define fio_swap16(x) bswap16(x) 26232f9b73353e0322fe135d3029beecedaed7a17bJens Axboe#define fio_swap32(x) bswap32(x) 27232f9b73353e0322fe135d3029beecedaed7a17bJens Axboe#define fio_swap64(x) bswap64(x) 28232f9b73353e0322fe135d3029beecedaed7a17bJens Axboe 29907249cffbdfa26de688c127abb5483154a4eae6Jens Axboetypedef off_t off64_t; 30907249cffbdfa26de688c127abb5483154a4eae6Jens Axboe 31638204956e6ef8f79033163667bdda94aaf9e949Bruce Crantypedef cpuset_t os_cpu_mask_t; 32638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran 33638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran#define fio_cpu_clear(mask, cpu) (void) CPU_CLR((cpu), (mask)) 34638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran#define fio_cpu_set(mask, cpu) (void) CPU_SET((cpu), (mask)) 3550b5860bcdc7dfb448c98c913203184e339756d7Jens Axboe#define fio_cpu_isset(mask, cpu) CPU_ISSET((cpu), (mask)) 36d004a209eee0a8db603c2d7ca6dc5fb6c367aa5aJens Axboe#define fio_cpu_count(mask) CPU_COUNT((mask)) 37638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran 38638204956e6ef8f79033163667bdda94aaf9e949Bruce Cranstatic inline int fio_cpuset_init(os_cpu_mask_t *mask) 39638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran{ 40638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran CPU_ZERO(mask); 41638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran return 0; 42638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran} 43638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran 44638204956e6ef8f79033163667bdda94aaf9e949Bruce Cranstatic inline int fio_cpuset_exit(os_cpu_mask_t *mask) 45638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran{ 46638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran return 0; 47638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran} 48638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran 49638204956e6ef8f79033163667bdda94aaf9e949Bruce Cranstatic inline int fio_setaffinity(int pid, os_cpu_mask_t cpumask) 50638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran{ 51638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran return cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TID, pid, sizeof(cpumask), &cpumask); 52638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran} 53638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran 54638204956e6ef8f79033163667bdda94aaf9e949Bruce Cranstatic inline int fio_getaffinity(int pid, os_cpu_mask_t *cpumask) 55638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran{ 56638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran return cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, pid, sizeof(cpumask), cpumask); 57638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran} 58638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran 59638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran#define FIO_MAX_CPUS CPU_SETSIZE 60638204956e6ef8f79033163667bdda94aaf9e949Bruce Cran 61ecc314ba7c5f02b7e90ac1dfbce1a74cd4e6d6feBruce Cranstatic inline int blockdev_size(struct fio_file *f, unsigned long long *bytes) 62aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe{ 63aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe off_t size; 64aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe 65ecc314ba7c5f02b7e90ac1dfbce1a74cd4e6d6feBruce Cran if (!ioctl(f->fd, DIOCGMEDIASIZE, &size)) { 66aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe *bytes = size; 67aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe return 0; 68aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe } 69aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe 702fa55e93d8895e0645df3e50baae82d15d9beea4Jens Axboe *bytes = 0; 71aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe return errno; 72aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe} 73aa5e69b26d16ae4c1680d05b25149f3198036714Jens Axboe 74ecc314ba7c5f02b7e90ac1dfbce1a74cd4e6d6feBruce Cranstatic inline int chardev_size(struct fio_file *f, unsigned long long *bytes) 754ccdccd149d82c94ec6ccdb4118d9e27479b8516Jens Axboe{ 769b8365618309572d8fd2579c8ea3132db89f843fBruce Cran return blockdev_size(f, bytes); 774ccdccd149d82c94ec6ccdb4118d9e27479b8516Jens Axboe} 784ccdccd149d82c94ec6ccdb4118d9e27479b8516Jens Axboe 79ecc314ba7c5f02b7e90ac1dfbce1a74cd4e6d6feBruce Cranstatic inline int blockdev_invalidate_cache(struct fio_file *f) 80e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboe{ 81e5b401d4bf67a1704f28872d3abe09eaf65cdabeJens Axboe return EINVAL; 82ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe} 83ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe 8432cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboestatic inline unsigned long long os_phys_mem(void) 8532cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe{ 8632cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe int mib[2] = { CTL_HW, HW_PHYSMEM }; 8732cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe unsigned long long mem; 8832cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe size_t len = sizeof(mem); 8932cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe 9032cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe sysctl(mib, 2, &mem, &len, NULL, 0); 9132cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe return mem; 9232cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe} 9332cd46a085ac60f4f8b085e2d65ebfc6100bb8c5Jens Axboe 94e8d588e4d31f9d1e93b14499d23760d1d3d2db6bJens Axboestatic inline int gettid(void) 95e8d588e4d31f9d1e93b14499d23760d1d3d2db6bJens Axboe{ 96e8d588e4d31f9d1e93b14499d23760d1d3d2db6bJens Axboe long lwpid; 97e8d588e4d31f9d1e93b14499d23760d1d3d2db6bJens Axboe 98e8d588e4d31f9d1e93b14499d23760d1d3d2db6bJens Axboe thr_self(&lwpid); 99e8d588e4d31f9d1e93b14499d23760d1d3d2db6bJens Axboe return (int) lwpid; 100e8d588e4d31f9d1e93b14499d23760d1d3d2db6bJens Axboe} 101e8d588e4d31f9d1e93b14499d23760d1d3d2db6bJens Axboe 102a1c58075279454a91ec43366846b93e8dcf9753cJens Axboe#ifdef MADV_FREE 103a1c58075279454a91ec43366846b93e8dcf9753cJens Axboe#define FIO_MADV_FREE MADV_FREE 104a1c58075279454a91ec43366846b93e8dcf9753cJens Axboe#endif 105a1c58075279454a91ec43366846b93e8dcf9753cJens Axboe 106ebac4655dd3624f3296ff83be48e0cdc02852f1Jens Axboe#endif 107