summaryrefslogtreecommitdiff
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
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>
-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)
{