summaryrefslogtreecommitdiff
path: root/os/os-android.h
diff options
context:
space:
mode:
authorDevriesL <therkduan@gmail.com>2021-05-25 23:45:11 +0800
committerDevriesL <therkduan@gmail.com>2021-05-26 06:52:05 +0800
commitd7e3adb683f85e49e078599a08aec7cd7c32d977 (patch)
tree5569031974e74ce5ab270479eec9d5fceace520c /os/os-android.h
parentb54e0d80c52e626021aacd0ae4d9875940cff9aa (diff)
downloadfio-d7e3adb683f85e49e078599a08aec7cd7c32d977.tar.gz
fio-d7e3adb683f85e49e078599a08aec7cd7c32d977.tar.bz2
android: add support for NDK sharedmem
Android add support for NDK sharedmem since API level 26 and prohibit the directly use of ashmem since API level 29, so we can use sharedmem if targeting API level is higher than 26. Signed-off-by: DevriesL <therkduan@gmail.com>
Diffstat (limited to 'os/os-android.h')
-rw-r--r--os/os-android.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/os/os-android.h b/os/os-android.h
index 3f1aa9d3..a81cd815 100644
--- a/os/os-android.h
+++ b/os/os-android.h
@@ -71,11 +71,15 @@
#include <stdio.h>
#include <linux/ashmem.h>
#include <linux/shm.h>
+#include <android/api-level.h>
+#if __ANDROID_API__ >= __ANDROID_API_O__
+#include <android/sharedmem.h>
+#else
+#define ASHMEM_DEVICE "/dev/ashmem"
+#endif
#define shmid_ds shmid64_ds
#define SHM_HUGETLB 04000
-#define ASHMEM_DEVICE "/dev/ashmem"
-
static inline int shmctl(int __shmid, int __cmd, struct shmid_ds *__buf)
{
int ret=0;
@@ -89,6 +93,16 @@ static inline int shmctl(int __shmid, int __cmd, struct shmid_ds *__buf)
return ret;
}
+#if __ANDROID_API__ >= __ANDROID_API_O__
+static inline int shmget(key_t __key, size_t __size, int __shmflg)
+{
+ char keybuf[11];
+
+ sprintf(keybuf, "%d", __key);
+
+ return ASharedMemory_create(keybuf, __size + sizeof(uint64_t));
+}
+#else
static inline int shmget(key_t __key, size_t __size, int __shmflg)
{
int fd,ret;
@@ -114,6 +128,7 @@ error:
close(fd);
return ret;
}
+#endif
static inline void *shmat(int __shmid, const void *__shmaddr, int __shmflg)
{