diff --git a/configure b/configure index 3eef022b9..f3cb18a0c 100755 --- a/configure +++ b/configure @@ -366,6 +366,8 @@ elif check_define __sun__ ; then CFLAGS="$CFLAGS -D_REENTRANT" elif check_define _WIN32 ; then targetos='CYGWIN' +elif check_define __QNX__ ; then + targetos='QNX' else targetos=`uname -s` fi @@ -466,6 +468,9 @@ CYGWIN*) pthread_condattr_setclock="no" pthread_affinity="no" ;; +QNX) + LIBS="-lsocket" + ;; esac # Now we know the target platform we can have another guess at the preferred @@ -1090,6 +1095,7 @@ if test "$have_vasprintf" != "yes" ; then fi cat > $TMPC << EOF #include +#include int main(int argc, char **argv) { diff --git a/engines/e4defrag.c b/engines/e4defrag.c index 37cc2ada8..65ef0da70 100644 --- a/engines/e4defrag.c +++ b/engines/e4defrag.c @@ -11,6 +11,7 @@ #include #include #include +#include #include "../fio.h" #include "../optgroup.h" diff --git a/os/os-qnx.h b/os/os-qnx.h new file mode 100755 index 000000000..2fbd2d9fb --- /dev/null +++ b/os/os-qnx.h @@ -0,0 +1,102 @@ +#ifndef FIO_OS_QNX_H +#define FIO_OS_QNX_H + +#define FIO_OS os_qnx +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* XXX hack to avoid conflicts between rbtree.h and */ +#undef RB_BLACK +#undef RB_RED +#undef RB_ROOT + +#include "../file.h" + +/* QNX is not supporting SA_RESTART. Use SA_NOCLDSTOP instead of it */ +#ifndef SA_RESTART +#define SA_RESTART SA_NOCLDSTOP +#endif + +#define FIO_NO_HAVE_SHM_H + +typedef uint64_t __u64; +typedef unsigned int __u32; + +#define FIO_USE_GENERIC_INIT_RANDOM_STATE +#define FIO_HAVE_FS_STAT +#define FIO_HAVE_GETTID + +#define OS_MAP_ANON MAP_ANON + +#ifndef PTHREAD_STACK_MIN +#define PTHREAD_STACK_MIN 4096 +#endif + +#define fio_swap16(x) swap16(x) +#define fio_swap32(x) swap32(x) +#define fio_swap64(x) swap64(x) + +#ifdef CONFIG_PTHREAD_GETAFFINITY +#define FIO_HAVE_GET_THREAD_AFFINITY +#define fio_get_thread_affinity(mask) \ + pthread_getaffinity_np(pthread_self(), sizeof(mask), &(mask)) +#endif + +static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes) +{ + + struct stat statbuf, *pstat; + pstat = &statbuf; + if ( fstat(f->fd, pstat ) == -1 ) { + perror( "fstat" ); + } else { + *bytes = (unsigned long long)(pstat->st_blocksize * pstat->st_nblocks); + return 0; + } + + *bytes = 0; + return errno; +} + +static inline int blockdev_invalidate_cache(struct fio_file *f) +{ + return ENOTSUP; +} + +static inline unsigned long long os_phys_mem(void) +{ + int mib[2] = { CTL_HW, HW_PHYSMEM64 }; + uint64_t mem; + size_t len = sizeof(mem); + + sysctl(mib, 2, &mem, &len, NULL, 0); + return mem; +} + +static inline unsigned long long get_fs_free_size(const char *path) +{ + unsigned long long ret; + struct statvfs s; + + if (statvfs(path, &s) < 0) + return -1ULL; + + ret = s.f_frsize; + ret *= (unsigned long long) s.f_bfree; + return ret; +} + +#ifdef MADV_FREE +#define FIO_MADV_FREE MADV_FREE +#endif + +#endif diff --git a/os/os.h b/os/os.h index 0f1823240..d54e7c0dd 100644 --- a/os/os.h +++ b/os/os.h @@ -24,6 +24,7 @@ enum { os_windows, os_android, os_dragonfly, + os_qnx, os_nr, }; @@ -39,6 +40,8 @@ typedef enum { #include "os-freebsd.h" #elif defined(__OpenBSD__) #include "os-openbsd.h" +#elif defined(__QNX__) +#include "os-qnx.h" #elif defined(__NetBSD__) #include "os-netbsd.h" #elif defined(__sun__) diff --git a/oslib/inet_aton.h b/oslib/inet_aton.h index c93c87f86..512c392fa 100644 --- a/oslib/inet_aton.h +++ b/oslib/inet_aton.h @@ -2,6 +2,9 @@ #define FIO_INET_ATON_LIB_H #include +#if defined(__QNX__) +#include +#endif int inet_aton(const char *cp, struct in_addr *inp);