Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support QNX OS platform #1788

Merged
merged 1 commit into from
Jul 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -1090,6 +1095,7 @@ if test "$have_vasprintf" != "yes" ; then
fi
cat > $TMPC << EOF
#include <stdio.h>
#include <stdarg.h>
int main(int argc, char **argv)
{
Expand Down
1 change: 1 addition & 0 deletions engines/e4defrag.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <stdint.h>

#include "../fio.h"
#include "../optgroup.h"
Expand Down
100 changes: 100 additions & 0 deletions os/os-qnx.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
#ifndef FIO_OS_QNX_H
#define FIO_OS_QNX_H

#define FIO_OS os_qnx
#include <stdint.h>
#include <stdio.h>
#include <errno.h>
#include <sys/param.h>
#include <sys/statvfs.h>
#include <sys/ioctl.h>
#include <sys/utsname.h>
#include <sys/sysctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/dcmd_cam.h>

/* XXX hack to avoid conflicts between rbtree.h and <sys/tree.h> */
#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;
if (fstat(f->fd, &statbuf) == -1) {
perror("fstat");
} else {
*bytes = (unsigned long long)(statbuf.st_blocksize * statbuf.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
3 changes: 3 additions & 0 deletions os/os.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ enum {
os_windows,
os_android,
os_dragonfly,
os_qnx,

huangweiliang marked this conversation as resolved.
Show resolved Hide resolved
os_nr,
};
Expand All @@ -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__)
Expand Down