X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=os%2Fos-mac.h;h=0903a6fec5c4cd508ff5fefeca69a7e0b9652063;hp=aec30f962e5ccf403edb5d69692253f2bb550071;hb=25f8227d25a77d3bc41a2044d2e662e635fa32cd;hpb=0c4ce7ce9ce7fa0d644020816feefdf9c3a64a4e diff --git a/os/os-mac.h b/os/os-mac.h index aec30f96..0903a6fe 100644 --- a/os/os-mac.h +++ b/os/os-mac.h @@ -16,30 +16,13 @@ #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 -#if defined(__LITTLE_ENDIAN__) -#define FIO_LITTLE_ENDIAN -#elif defined(__BIG_ENDIAN__) -#define FIO_BIG_ENDIAN -#else -#error "Undefined byte order" -#endif - #define fio_swap16(x) OSSwapInt16(x) #define fio_swap32(x) OSSwapInt32(x) #define fio_swap64(x) OSSwapInt64(x) @@ -52,76 +35,9 @@ typedef off_t off64_t; -/* OS X as of 10.6 doesn't have the timer_* functions. - * Emulate the functionality using setitimer and sigaction here - */ - -#define MAX_TIMERS 64 - +#ifndef CONFIG_CLOCKID_T typedef unsigned int clockid_t; -typedef unsigned int timer_t; - -struct itimerspec { - struct timespec it_value; - struct timespec it_interval; -}; - -static struct sigevent fio_timers[MAX_TIMERS]; -static unsigned int num_timers = 0; - -static void sig_alrm(int signum) -{ - union sigval sv; - - for (int i = 0; i < num_timers; i++) { - if (fio_timers[i].sigev_notify_function == NULL) - continue; - - if (fio_timers[i].sigev_notify == SIGEV_THREAD) - fio_timers[i].sigev_notify_function(sv); - else if (fio_timers[i].sigev_notify == SIGEV_SIGNAL) - kill(getpid(), fio_timers[i].sigev_signo); - } -} - -static inline int timer_settime(timer_t timerid, int flags, - const struct itimerspec *value, - struct itimerspec *ovalue) -{ - struct sigaction sa; - struct itimerval tv; - struct itimerval tv_out; - int rc; - - tv.it_interval.tv_sec = value->it_interval.tv_sec; - tv.it_interval.tv_usec = value->it_interval.tv_nsec / 1000; - - tv.it_value.tv_sec = value->it_value.tv_sec; - tv.it_value.tv_usec = value->it_value.tv_nsec / 1000; - - sa.sa_handler = sig_alrm; - sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; - - rc = sigaction(SIGALRM, &sa, NULL); - - if (!rc) - rc = setitimer(ITIMER_REAL, &tv, &tv_out); - - if (!rc && ovalue != NULL) { - ovalue->it_interval.tv_sec = tv_out.it_interval.tv_sec; - ovalue->it_interval.tv_nsec = tv_out.it_interval.tv_usec * 1000; - ovalue->it_value.tv_sec = tv_out.it_value.tv_sec; - ovalue->it_value.tv_nsec = tv_out.it_value.tv_usec * 1000; - } - - return rc; -} - -static inline int timer_delete(timer_t timer) -{ - return 0; -} +#endif #define FIO_OS_DIRECTIO static inline int fio_set_odirect(int fd) @@ -178,4 +94,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