configure: add gettid() test
[fio.git] / os / os-openbsd.h
index 47005721abba67b2f5bb12c760cf9ec144fa7b25..43a649d447bcaeaa3d72f6cdd4dcd58194bd4393 100644 (file)
@@ -9,24 +9,21 @@
 #include <sys/ioctl.h>
 #include <sys/dkio.h>
 #include <sys/disklabel.h>
-/* XXX hack to avoid conflicts between rbtree.h and <sys/tree.h> */
+#include <sys/endian.h>
+#include <sys/utsname.h>
 #include <sys/sysctl.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"
 
-#undef  FIO_HAVE_ODIRECT
-#define FIO_USE_GENERIC_RAND
 #define FIO_USE_GENERIC_INIT_RANDOM_STATE
 #define FIO_HAVE_FS_STAT
 #define FIO_HAVE_GETTID
-
-#undef FIO_HAVE_CPU_AFFINITY   /* XXX notyet */
-
-/* Only OpenBSD 5.1 and above have attach-to-open-removed semantics */
-#undef  FIO_HAVE_SHM_ATTACH_REMOVED
+#define FIO_HAVE_SHM_ATTACH_REMOVED
 
 #define OS_MAP_ANON            MAP_ANON
 
@@ -55,7 +52,7 @@ static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes)
 
 static inline int blockdev_invalidate_cache(struct fio_file *f)
 {
-       return EINVAL;
+       return ENOTSUP;
 }
 
 static inline unsigned long long os_phys_mem(void)
@@ -68,10 +65,12 @@ static inline unsigned long long os_phys_mem(void)
        return mem;
 }
 
+#ifndef CONFIG_HAVE_GETTID
 static inline int gettid(void)
 {
-       return (int) pthread_self();
+       return (int)(intptr_t) pthread_self();
 }
+#endif
 
 static inline unsigned long long get_fs_free_size(const char *path)
 {
@@ -90,4 +89,34 @@ static inline unsigned long long get_fs_free_size(const char *path)
 #define FIO_MADV_FREE  MADV_FREE
 #endif
 
+static inline int shm_attach_to_open_removed(void)
+{
+       struct utsname uts;
+       int major, minor;
+
+       if (uname(&uts) == -1)
+               return 0;
+
+       /*
+        * Return 1 if >= OpenBSD 5.1 according to 97900ebf,
+        * assuming both major/minor versions are < 10.
+        */
+       if (uts.release[0] > '9' || uts.release[0] < '0')
+               return 0;
+       if (uts.release[1] != '.')
+               return 0;
+       if (uts.release[2] > '9' || uts.release[2] < '0')
+               return 0;
+
+       major = uts.release[0] - '0';
+       minor = uts.release[2] - '0';
+
+       if (major > 5)
+               return 1;
+       if (major == 5 && minor >= 1)
+               return 1;
+
+       return 0;
+}
+
 #endif