X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=os%2Fos-mac.h;h=d202e99dd60a93bc3c11dd0088456bbc1a731adf;hb=bd6019dadb8dfeafeb6ae317d8ffe5697759c3a7;hp=eb55cd7742fa4a7dee86e5122273f2a33362608c;hpb=b42ffd195f4f4263cef197a0c3d22e6937c7580f;p=fio.git diff --git a/os/os-mac.h b/os/os-mac.h index eb55cd77..d202e99d 100644 --- a/os/os-mac.h +++ b/os/os-mac.h @@ -1,6 +1,8 @@ #ifndef FIO_OS_APPLE_H #define FIO_OS_APPLE_H +#define FIO_OS os_mac + #include #include #include @@ -9,25 +11,22 @@ #include #include #include +#include +#include #include "../file.h" -#ifndef CLOCK_MONOTONIC -#define CLOCK_MONOTONIC 1 -#endif - -#ifndef CLOCK_REALTIME -#define CLOCK_REALTIME 1 -#endif - -#define FIO_HAVE_POSIXAIO -#define FIO_HAVE_CLOCK_MONOTONIC #define FIO_USE_GENERIC_RAND +#define FIO_USE_GENERIC_INIT_RANDOM_STATE #define FIO_HAVE_GETTID #define FIO_HAVE_CHARDEV_SIZE #define OS_MAP_ANON MAP_ANON +#define fio_swap16(x) OSSwapInt16(x) +#define fio_swap32(x) OSSwapInt32(x) +#define fio_swap64(x) OSSwapInt64(x) + /* * OSX has a pitifully small shared memory segment by default, * so default to a lower number of max jobs supported @@ -53,17 +52,6 @@ struct itimerspec { static struct sigevent fio_timers[MAX_TIMERS]; static unsigned int num_timers = 0; -static inline int timer_create(clockid_t clockid, struct sigevent *restrict evp, - timer_t *restrict timerid) -{ - int current_timer = num_timers; - fio_timers[current_timer] = *evp; - num_timers++; - - *timerid = current_timer; - return 0; -} - static void sig_alrm(int signum) { union sigval sv; @@ -80,7 +68,8 @@ static void sig_alrm(int signum) } static inline int timer_settime(timer_t timerid, int flags, - const struct itimerspec *value, struct itimerspec *ovalue) + const struct itimerspec *value, + struct itimerspec *ovalue) { struct sigaction sa; struct itimerval tv; @@ -127,13 +116,17 @@ static inline int fio_set_odirect(int fd) static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes) { - uint64_t temp = 1; - if (ioctl(f->fd, DKIOCGETBLOCKCOUNT, bytes) == -1) + uint32_t block_size; + uint64_t block_count; + + if (ioctl(f->fd, DKIOCGETBLOCKCOUNT, &block_count) == -1) return errno; - if (ioctl(f->fd, DKIOCGETBLOCKSIZE, &temp) == -1) + if (ioctl(f->fd, DKIOCGETBLOCKSIZE, &block_size) == -1) return errno; - (*bytes) *= temp; - return 0; + + *bytes = block_size; + *bytes *= block_count; + return 0; } static inline int chardev_size(struct fio_file *f, unsigned long long *bytes) @@ -168,4 +161,11 @@ static inline int gettid(void) { return mach_thread_self(); } + +/* + * For some reason, there's no header definition for fdatasync(), even + * if it exists. + */ +extern int fdatasync(int fd); + #endif