From 910f378affca272e65cb2a72a82f27b1506fc0ec Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Wed, 24 Aug 2022 15:05:42 -0700 Subject: [PATCH] Merge os-android.h into os-linux.h Reduce code duplication by merging the os-android.h and os-linux.h header files. The only functional change in this patch is that FIO_HAVE_SGIO is now defined in the Android build and hence that the sg I/O engine is enabled for Android. Signed-off-by: Bart Van Assche --- os/os-android.h | 259 ------------------------------------------------ os/os-linux.h | 8 ++ os/os.h | 4 +- 3 files changed, 9 insertions(+), 262 deletions(-) delete mode 100644 os/os-android.h diff --git a/os/os-android.h b/os/os-android.h deleted file mode 100644 index 146f5138..00000000 --- a/os/os-android.h +++ /dev/null @@ -1,259 +0,0 @@ -#ifndef FIO_OS_ANDROID_H -#define FIO_OS_ANDROID_H - -#define FIO_OS os_android - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "./os-linux-syscall.h" -#include "../file.h" - -#ifndef __has_builtin // Optional of course. - #define __has_builtin(x) 0 // Compatibility with non-clang compilers. -#endif - -#define FIO_HAVE_CPU_AFFINITY -#define FIO_HAVE_DISK_UTIL -#define FIO_HAVE_IOSCHED_SWITCH -#define FIO_HAVE_IOPRIO -#define FIO_HAVE_IOPRIO_CLASS -#define FIO_HAVE_ODIRECT -#define FIO_HAVE_HUGETLB -#define FIO_HAVE_BLKTRACE -#define FIO_HAVE_CL_SIZE -#define FIO_HAVE_CGROUPS -#define FIO_HAVE_FS_STAT -#define FIO_HAVE_TRIM -#define FIO_HAVE_GETTID -#define FIO_USE_GENERIC_INIT_RANDOM_STATE -#define FIO_HAVE_E4_ENG -#define FIO_HAVE_BYTEORDER_FUNCS -#define FIO_HAVE_MMAP_HUGE -#define FIO_NO_HAVE_SHM_H - -#define OS_MAP_ANON MAP_ANONYMOUS - -typedef cpu_set_t os_cpu_mask_t; - -#define fio_setaffinity(pid, cpumask) \ - sched_setaffinity((pid), sizeof(cpumask), &(cpumask)) -#define fio_getaffinity(pid, ptr) \ - sched_getaffinity((pid), sizeof(cpu_set_t), (ptr)) - -#ifndef POSIX_MADV_DONTNEED -#define posix_madvise madvise -#define POSIX_MADV_DONTNEED MADV_DONTNEED -#define POSIX_MADV_SEQUENTIAL MADV_SEQUENTIAL -#define POSIX_MADV_RANDOM MADV_RANDOM -#endif - -#ifdef MADV_REMOVE -#define FIO_MADV_FREE MADV_REMOVE -#endif -#ifndef MAP_HUGETLB -#define MAP_HUGETLB 0x40000 /* arch specific */ -#endif - -#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 - -#define fio_cpu_clear(mask, cpu) CPU_CLR((cpu), (mask)) -#define fio_cpu_set(mask, cpu) CPU_SET((cpu), (mask)) -#define fio_cpu_isset(mask, cpu) (CPU_ISSET((cpu), (mask)) != 0) -#define fio_cpu_count(mask) CPU_COUNT((mask)) - -static inline int fio_cpuset_init(os_cpu_mask_t *mask) -{ - CPU_ZERO(mask); - return 0; -} - -static inline int fio_cpuset_exit(os_cpu_mask_t *mask) -{ - return 0; -} - -#define FIO_MAX_CPUS CPU_SETSIZE - -#include "os-ashmem.h" - -#define SPLICE_DEF_SIZE (64*1024) - -enum { - IOPRIO_CLASS_NONE, - IOPRIO_CLASS_RT, - IOPRIO_CLASS_BE, - IOPRIO_CLASS_IDLE, -}; - -enum { - IOPRIO_WHO_PROCESS = 1, - IOPRIO_WHO_PGRP, - IOPRIO_WHO_USER, -}; - -#define IOPRIO_BITS 16 -#define IOPRIO_CLASS_SHIFT 13 - -#define IOPRIO_MIN_PRIO 0 /* highest priority */ -#define IOPRIO_MAX_PRIO 7 /* lowest priority */ - -#define IOPRIO_MIN_PRIO_CLASS 0 -#define IOPRIO_MAX_PRIO_CLASS 3 - -static inline int ioprio_value(int ioprio_class, int ioprio) -{ - /* - * If no class is set, assume BE - */ - if (!ioprio_class) - ioprio_class = IOPRIO_CLASS_BE; - - return (ioprio_class << IOPRIO_CLASS_SHIFT) | ioprio; -} - -static inline bool ioprio_value_is_class_rt(unsigned int priority) -{ - return (priority >> IOPRIO_CLASS_SHIFT) == IOPRIO_CLASS_RT; -} - -static inline int ioprio_set(int which, int who, int ioprio_class, int ioprio) -{ - return syscall(__NR_ioprio_set, which, who, - ioprio_value(ioprio_class, ioprio)); -} - -#ifndef BLKGETSIZE64 -#define BLKGETSIZE64 _IOR(0x12,114,size_t) -#endif - -#ifndef BLKFLSBUF -#define BLKFLSBUF _IO(0x12,97) -#endif - -#ifndef BLKDISCARD -#define BLKDISCARD _IO(0x12,119) -#endif - -static inline int blockdev_invalidate_cache(struct fio_file *f) -{ - return ioctl(f->fd, BLKFLSBUF); -} - -static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes) -{ - if (!ioctl(f->fd, BLKGETSIZE64, bytes)) - return 0; - - return errno; -} - -static inline unsigned long long os_phys_mem(void) -{ - long pagesize, pages; - - pagesize = sysconf(_SC_PAGESIZE); - pages = sysconf(_SC_PHYS_PAGES); - if (pages == -1 || pagesize == -1) - return 0; - - return (unsigned long long) pages * (unsigned long long) pagesize; -} - -#ifdef O_NOATIME -#define FIO_O_NOATIME O_NOATIME -#else -#define FIO_O_NOATIME 0 -#endif - -/* Check for GCC or Clang byte swap intrinsics */ -#if (__has_builtin(__builtin_bswap16) && __has_builtin(__builtin_bswap32) \ - && __has_builtin(__builtin_bswap64)) || (__GNUC__ > 4 \ - || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) /* fio_swapN */ -#define fio_swap16(x) __builtin_bswap16(x) -#define fio_swap32(x) __builtin_bswap32(x) -#define fio_swap64(x) __builtin_bswap64(x) -#else -#include -#define fio_swap16(x) bswap_16(x) -#define fio_swap32(x) bswap_32(x) -#define fio_swap64(x) bswap_64(x) -#endif /* fio_swapN */ - -#define CACHE_LINE_FILE \ - "/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size" - -static inline int arch_cache_line_size(void) -{ - char size[32]; - int fd, ret; - - fd = open(CACHE_LINE_FILE, O_RDONLY); - if (fd < 0) - return -1; - - ret = read(fd, size, sizeof(size)); - - close(fd); - - if (ret <= 0) - return -1; - else - return atoi(size); -} - -static inline unsigned long long get_fs_free_size(const char *path) -{ - unsigned long long ret; - struct statfs s; - - if (statfs(path, &s) < 0) - return -1ULL; - - ret = s.f_bsize; - ret *= (unsigned long long) s.f_bfree; - return ret; -} - -static inline int os_trim(struct fio_file *f, unsigned long long start, - unsigned long long len) -{ - uint64_t range[2]; - - range[0] = start; - range[1] = len; - - if (!ioctl(f->fd, BLKDISCARD, range)) - return 0; - - return errno; -} - -#ifdef CONFIG_SCHED_IDLE -static inline int fio_set_sched_idle(void) -{ - struct sched_param p = { .sched_priority = 0, }; - return sched_setscheduler(gettid(), SCHED_IDLE, &p); -} -#endif - -#ifndef RWF_UNCACHED -#define RWF_UNCACHED 0x00000040 -#endif - -#endif diff --git a/os/os-linux.h b/os/os-linux.h index 84d1e331..831f0ad0 100644 --- a/os/os-linux.h +++ b/os/os-linux.h @@ -1,7 +1,11 @@ #ifndef FIO_OS_LINUX_H #define FIO_OS_LINUX_H +#ifdef __ANDROID__ +#define FIO_OS os_android +#else #define FIO_OS os_linux +#endif #include #include @@ -18,6 +22,10 @@ #include #include #include +#ifdef __ANDROID__ +#include "os-ashmem.h" +#define FIO_NO_HAVE_SHM_H +#endif #ifdef ARCH_HAVE_CRC_CRYPTO #include diff --git a/os/os.h b/os/os.h index 810e6166..aba6813f 100644 --- a/os/os.h +++ b/os/os.h @@ -33,9 +33,7 @@ typedef enum { } cpu_features; /* IWYU pragma: begin_exports */ -#if defined(__ANDROID__) -#include "os-android.h" -#elif defined(__linux__) +#if defined(__linux__) #include "os-linux.h" #elif defined(__FreeBSD__) #include "os-freebsd.h" -- 2.25.1