t/zbd: avoid test case 31 failure with small devices
[fio.git] / os / os-linux.h
index 3001140ca486630d6bb60a2958c01d824fbd7fc8..c5cd6515813146d4f63e0d17427a1b8ee2d9efe1 100644 (file)
@@ -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 <sys/ioctl.h>
 #include <sys/uio.h>
 #include <linux/major.h>
 #include <linux/fs.h>
 #include <scsi/sg.h>
+#include <asm/byteorder.h>
+#ifdef __ANDROID__
+#include "os-ashmem.h"
+#define FIO_NO_HAVE_SHM_H
+#endif
 
 #ifdef ARCH_HAVE_CRC_CRYPTO
 #include <sys/auxv.h>
@@ -50,6 +59,7 @@
 #define FIO_HAVE_TRIM
 #define FIO_HAVE_GETTID
 #define FIO_USE_GENERIC_INIT_RANDOM_STATE
+#define FIO_HAVE_BYTEORDER_FUNCS
 #define FIO_HAVE_PWRITEV2
 #define FIO_HAVE_SHM_ATTACH_REMOVED
 
@@ -81,8 +91,8 @@ typedef cpu_set_t os_cpu_mask_t;
        pthread_getaffinity_np(pthread_self(), sizeof(mask), &(mask))
 #endif
 
-#define fio_cpu_clear(mask, cpu)       (void) CPU_CLR((cpu), (mask))
-#define fio_cpu_set(mask, cpu)         (void) CPU_SET((cpu), (mask))
+#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))
 
@@ -115,13 +125,24 @@ enum {
 #define IOPRIO_BITS            16
 #define IOPRIO_CLASS_SHIFT     13
 
+#define IOPRIO_HINT_BITS       10
+#define IOPRIO_HINT_SHIFT      3
+
 #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)
+#define IOPRIO_MIN_PRIO_HINT   0
+#define IOPRIO_MAX_PRIO_HINT   ((1 << IOPRIO_HINT_BITS) - 1)
+
+#define ioprio_class(ioprio)   ((ioprio) >> IOPRIO_CLASS_SHIFT)
+#define ioprio(ioprio)         ((ioprio) & IOPRIO_MAX_PRIO)
+#define ioprio_hint(ioprio)    \
+       (((ioprio) >> IOPRIO_HINT_SHIFT) & IOPRIO_MAX_PRIO_HINT)
+
+static inline int ioprio_value(int ioprio_class, int ioprio, int ioprio_hint)
 {
        /*
         * If no class is set, assume BE
@@ -129,18 +150,21 @@ static inline int ioprio_value(int ioprio_class, int ioprio)
         if (!ioprio_class)
                 ioprio_class = IOPRIO_CLASS_BE;
 
-       return (ioprio_class << IOPRIO_CLASS_SHIFT) | ioprio;
+       return (ioprio_class << IOPRIO_CLASS_SHIFT) |
+               (ioprio_hint << IOPRIO_HINT_SHIFT) |
+               ioprio;
 }
 
 static inline bool ioprio_value_is_class_rt(unsigned int priority)
 {
-       return (priority >> IOPRIO_CLASS_SHIFT) == IOPRIO_CLASS_RT;
+       return ioprio_class(priority) == IOPRIO_CLASS_RT;
 }
 
-static inline int ioprio_set(int which, int who, int ioprio_class, int ioprio)
+static inline int ioprio_set(int which, int who, int ioprio_class, int ioprio,
+                            int ioprio_hint)
 {
        return syscall(__NR_ioprio_set, which, who,
-                      ioprio_value(ioprio_class, ioprio));
+                      ioprio_value(ioprio_class, ioprio, ioprio_hint));
 }
 
 #ifndef CONFIG_HAVE_GETTID
@@ -195,12 +219,6 @@ static inline unsigned long long os_phys_mem(void)
 #define FIO_O_NOATIME  0
 #endif
 
-#ifdef O_ATOMIC
-#define OS_O_ATOMIC    O_ATOMIC
-#else
-#define OS_O_ATOMIC    040000000
-#endif
-
 #ifdef MADV_REMOVE
 #define FIO_MADV_FREE  MADV_REMOVE
 #endif
@@ -241,14 +259,6 @@ static inline int arch_cache_line_size(void)
                return atoi(size);
 }
 
-#ifdef __powerpc64__
-#define FIO_HAVE_CPU_ONLINE_SYSCONF
-static inline unsigned int cpus_online(void)
-{
-        return sysconf(_SC_NPROCESSORS_CONF);
-}
-#endif
-
 static inline unsigned long long get_fs_free_size(const char *path)
 {
        unsigned long long ret;