* [PATCH liburing v5 00/10] aarch64 support
@ 2022-07-05 7:43 Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 01/10] CHANGELOG: Fixup missing space Ammar Faizi
` (10 more replies)
0 siblings, 11 replies; 12+ messages in thread
From: Ammar Faizi @ 2022-07-05 7:43 UTC (permalink / raw)
To: Jens Axboe
Cc: Ammar Faizi, Alviro Iskandar Setiawan, Fernanda Ma'rouf,
Hao Xu, Pavel Begunkov, io-uring Mailing List,
GNU/Weeb Mailing List
From: Ammar Faizi <[email protected]>
Hi Jens,
This is v5 revision of aarch64 support.
This series contains nolibc support for aarch64 and one extra irrelevant
cleanup (patch #1). The missing bit from aarch64 is get_page_size()
which is a bit complicated to implement without libc.
aarch64 supports three values of page size: 4K, 16K, and 64K which are
selected at kernel compilation time. Therefore, we can't hard code the
page size for this arch. In this series we utilize open(), read() and
close() syscall to find the page size from /proc/self/auxv.
The auxiliary vector contains information about the page size, it is
located at `AT_PAGESZ` keyval pair.
For more details about the auxv data structure, check the link below.
Link: https://github.com/torvalds/linux/blob/v5.19-rc4/fs/binfmt_elf.c#L260
Link: https://lwn.net/Articles/631631/
There are 10 patches in this series. Summary:
- Patch 1 is just a trivial changelog fix.
- Patch 2 and 3 are to add open() and read() syscall.
- Patch 4 is to remove __INTERNAL__LIBURING_SYSCALL_H checks.
- Patch 5 is to add get_page_size() function.
- Patch 6 is just a trivial style fixup for #ifdef and friends.
- Patch 7 is to enable the nolibc support for aarch64.
- Patch 8 is to add nolibc test.
- Patch 9 is for GitHub bot build.
- Patch 10 is to update the CHANGELOG to note aarch64 nolibc support.
I have built it with GitHub bot and it compiles just fine. But I don't
have an aarch64 machine to run the tests. Since you are using aarch64,
I can rely on you to test it.
How to test this?
make clean;
./configure --nolibc;
make -j8;
ldd src/liburing.so.2.3;
# Make sure you don't see libc.so from the `ldd` command.
make runtests;
Please give it a test, thanks!
## Changelog
v4 -> v5:
- Fixup commit message in patch #2.
- Massage commit message in patch #8.
- Append Reviewed-by tags from Alviro Iskandar Setiawan.
v3 -> v4:
- Simplify __get_page_size() function.
- Change __sys_read() return type from int to ssize_t.
- Append Reviewed-by tags from Alviro Iskandar Setiawan.
- Fix git am complain: space before tab in indent.
v2 -> v3:
- No need to init the static var to zero.
- Split style fixup into a separate patch.
- Add nolibc test to test get_page_size() function.
- Use __NR_openat when __NR_open is not defined on the arch.
- Split open/read/close in get_page_size() into a new function.
- Cache the get_page_size() fallback value when we fail on the
syscalls.
v1 -> v2:
- Drop aarch64 renaming directory patch.
- Fallback the page size to 4K if we fail to get it.
- Cache the page size after we read it from /proc/self/auxv.
- Massage commit messages.
- Note aarch64 nolibc support in CHANGELOG.
Signed-off-by: Ammar Faizi <[email protected]>
---
Ammar Faizi (10):
CHANGELOG: Fixup missing space
arch: syscall: Add `__sys_open()` syscall
arch: syscall: Add `__sys_read()` syscall
arch: Remove `__INTERNAL__LIBURING_LIB_H` checks
arch/aarch64: lib: Add `get_page_size()` function
lib: Style fixup for #if / #elif / #else / #endif
lib: Enable nolibc support for aarch64
test: Add nolibc test
.github: Enable aarch64 nolibc build for GitHub bot
CHANGELOG: Note about aarch64 support
.github/workflows/build.yml | 2 +-
CHANGELOG | 7 ++++-
src/arch/aarch64/lib.h | 48 +++++++++++++++++++++++++++++
src/arch/aarch64/syscall.h | 4 ---
src/arch/generic/lib.h | 4 ---
src/arch/generic/syscall.h | 20 ++++++++++---
src/arch/syscall-defs.h | 19 ++++++++++++
src/arch/x86/lib.h | 4 ---
src/arch/x86/syscall.h | 4 ---
src/lib.h | 32 ++++++++++----------
src/syscall.h | 2 --
test/Makefile | 1 +
test/nolibc.c | 60 +++++++++++++++++++++++++++++++++++++
13 files changed, 167 insertions(+), 40 deletions(-)
create mode 100644 src/arch/aarch64/lib.h
create mode 100644 test/nolibc.c
base-commit: f8eb5f804288e10ae7ef442ef482e4dd8b18fee7
--
Ammar Faizi
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH liburing v5 01/10] CHANGELOG: Fixup missing space
2022-07-05 7:43 [PATCH liburing v5 00/10] aarch64 support Ammar Faizi
@ 2022-07-05 7:43 ` Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 02/10] arch: syscall: Add `__sys_open()` syscall Ammar Faizi
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Ammar Faizi @ 2022-07-05 7:43 UTC (permalink / raw)
To: Jens Axboe
Cc: Ammar Faizi, Alviro Iskandar Setiawan, Fernanda Ma'rouf,
Hao Xu, Pavel Begunkov, io-uring Mailing List,
GNU/Weeb Mailing List
From: Ammar Faizi <[email protected]>
s/reducingthe/reducing the/
Signed-off-by: Ammar Faizi <[email protected]>
---
CHANGELOG | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG b/CHANGELOG
index 01cb677..efb3ff3 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -6,7 +6,7 @@ liburing-2.2 release
- Add support for multishot accept.
- io_uring_register_files() will set RLIMIT_NOFILE if necessary.
- Add support for registered ring fds, io_uring_register_ring_fd(),
- reducingthe overhead of an io_uring_enter() system call.
+ reducing the overhead of an io_uring_enter() system call.
- Add support for the message ring opcode.
- Add support for newer request cancelation features.
- Add support for IORING_SETUP_COOP_TASKRUN, which can help reduce the
--
Ammar Faizi
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH liburing v5 02/10] arch: syscall: Add `__sys_open()` syscall
2022-07-05 7:43 [PATCH liburing v5 00/10] aarch64 support Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 01/10] CHANGELOG: Fixup missing space Ammar Faizi
@ 2022-07-05 7:43 ` Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 03/10] arch: syscall: Add `__sys_read()` syscall Ammar Faizi
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Ammar Faizi @ 2022-07-05 7:43 UTC (permalink / raw)
To: Jens Axboe
Cc: Ammar Faizi, Alviro Iskandar Setiawan, Fernanda Ma'rouf,
Hao Xu, Pavel Begunkov, io-uring Mailing List,
GNU/Weeb Mailing List
From: Ammar Faizi <[email protected]>
A prep patch to support aarch64 nolibc. We will use this to get the
page size by reading /proc/self/auxv.
Reviewed-by: Alviro Iskandar Setiawan <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---
src/arch/generic/syscall.h | 9 +++++++++
src/arch/syscall-defs.h | 14 ++++++++++++++
2 files changed, 23 insertions(+)
diff --git a/src/arch/generic/syscall.h b/src/arch/generic/syscall.h
index fa93064..71b2234 100644
--- a/src/arch/generic/syscall.h
+++ b/src/arch/generic/syscall.h
@@ -7,6 +7,8 @@
#ifndef LIBURING_ARCH_GENERIC_SYSCALL_H
#define LIBURING_ARCH_GENERIC_SYSCALL_H
+#include <fcntl.h>
+
static inline int ____sys_io_uring_register(int fd, unsigned opcode,
const void *arg, unsigned nr_args)
{
@@ -41,6 +43,13 @@ static inline int ____sys_io_uring_enter(int fd, unsigned to_submit,
_NSIG / 8);
}
+static inline int __sys_open(const char *pathname, int flags, mode_t mode)
+{
+ int ret;
+ ret = open(pathname, flags, mode);
+ return (ret < 0) ? -errno : ret;
+}
+
static inline void *__sys_mmap(void *addr, size_t length, int prot, int flags,
int fd, off_t offset)
{
diff --git a/src/arch/syscall-defs.h b/src/arch/syscall-defs.h
index 1e8ae1b..d38b5f3 100644
--- a/src/arch/syscall-defs.h
+++ b/src/arch/syscall-defs.h
@@ -3,6 +3,20 @@
#ifndef LIBURING_ARCH_SYSCALL_DEFS_H
#define LIBURING_ARCH_SYSCALL_DEFS_H
+#include <fcntl.h>
+
+static inline int __sys_open(const char *pathname, int flags, mode_t mode)
+{
+ /*
+ * Some architectures don't have __NR_open, but __NR_openat.
+ */
+#ifdef __NR_open
+ return __do_syscall3(__NR_open, pathname, flags, mode);
+#else
+ return __do_syscall4(__NR_openat, AT_FDCWD, pathname, flags, mode);
+#endif
+}
+
static inline void *__sys_mmap(void *addr, size_t length, int prot, int flags,
int fd, off_t offset)
{
--
Ammar Faizi
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH liburing v5 03/10] arch: syscall: Add `__sys_read()` syscall
2022-07-05 7:43 [PATCH liburing v5 00/10] aarch64 support Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 01/10] CHANGELOG: Fixup missing space Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 02/10] arch: syscall: Add `__sys_open()` syscall Ammar Faizi
@ 2022-07-05 7:43 ` Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 04/10] arch: Remove `__INTERNAL__LIBURING_LIB_H` checks Ammar Faizi
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Ammar Faizi @ 2022-07-05 7:43 UTC (permalink / raw)
To: Jens Axboe
Cc: Ammar Faizi, Alviro Iskandar Setiawan, Fernanda Ma'rouf,
Hao Xu, Pavel Begunkov, io-uring Mailing List,
GNU/Weeb Mailing List
From: Ammar Faizi <[email protected]>
A prep patch to support aarch64 nolibc. We will use this to get the
page size by reading /proc/self/auxv.
Reviewed-by: Alviro Iskandar Setiawan <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---
src/arch/generic/syscall.h | 7 +++++++
src/arch/syscall-defs.h | 5 +++++
2 files changed, 12 insertions(+)
diff --git a/src/arch/generic/syscall.h b/src/arch/generic/syscall.h
index 71b2234..22252a1 100644
--- a/src/arch/generic/syscall.h
+++ b/src/arch/generic/syscall.h
@@ -50,6 +50,13 @@ static inline int __sys_open(const char *pathname, int flags, mode_t mode)
return (ret < 0) ? -errno : ret;
}
+static inline ssize_t __sys_read(int fd, void *buffer, size_t size)
+{
+ ssize_t ret;
+ ret = read(fd, buffer, size);
+ return (ret < 0) ? -errno : ret;
+}
+
static inline void *__sys_mmap(void *addr, size_t length, int prot, int flags,
int fd, off_t offset)
{
diff --git a/src/arch/syscall-defs.h b/src/arch/syscall-defs.h
index d38b5f3..df90e0d 100644
--- a/src/arch/syscall-defs.h
+++ b/src/arch/syscall-defs.h
@@ -17,6 +17,11 @@ static inline int __sys_open(const char *pathname, int flags, mode_t mode)
#endif
}
+static inline ssize_t __sys_read(int fd, void *buffer, size_t size)
+{
+ return (ssize_t) __do_syscall3(__NR_read, fd, buffer, size);
+}
+
static inline void *__sys_mmap(void *addr, size_t length, int prot, int flags,
int fd, off_t offset)
{
--
Ammar Faizi
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH liburing v5 04/10] arch: Remove `__INTERNAL__LIBURING_LIB_H` checks
2022-07-05 7:43 [PATCH liburing v5 00/10] aarch64 support Ammar Faizi
` (2 preceding siblings ...)
2022-07-05 7:43 ` [PATCH liburing v5 03/10] arch: syscall: Add `__sys_read()` syscall Ammar Faizi
@ 2022-07-05 7:43 ` Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 05/10] arch/aarch64: lib: Add `get_page_size()` function Ammar Faizi
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Ammar Faizi @ 2022-07-05 7:43 UTC (permalink / raw)
To: Jens Axboe
Cc: Ammar Faizi, Alviro Iskandar Setiawan, Fernanda Ma'rouf,
Hao Xu, Pavel Begunkov, io-uring Mailing List,
GNU/Weeb Mailing List
From: Ammar Faizi <[email protected]>
We will include the syscall.h from another place as well. This check
was added by me when adding the x86 syscalls. For aarch64 we will
include this header from lib.h but we are restricted by this check.
Let's just remove it for all archs. User shouldn't touch this code
directly anyway.
Reviewed-by: Alviro Iskandar Setiawan <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---
src/arch/aarch64/syscall.h | 4 ----
src/arch/generic/lib.h | 4 ----
src/arch/generic/syscall.h | 4 ----
src/arch/x86/lib.h | 4 ----
src/arch/x86/syscall.h | 4 ----
src/lib.h | 2 --
src/syscall.h | 2 --
7 files changed, 24 deletions(-)
diff --git a/src/arch/aarch64/syscall.h b/src/arch/aarch64/syscall.h
index c0ab7e2..b00e90b 100644
--- a/src/arch/aarch64/syscall.h
+++ b/src/arch/aarch64/syscall.h
@@ -1,9 +1,5 @@
/* SPDX-License-Identifier: MIT */
-#ifndef __INTERNAL__LIBURING_SYSCALL_H
- #error "This file should be included from src/syscall.h (liburing)"
-#endif
-
#ifndef LIBURING_ARCH_AARCH64_SYSCALL_H
#define LIBURING_ARCH_AARCH64_SYSCALL_H
diff --git a/src/arch/generic/lib.h b/src/arch/generic/lib.h
index 737e795..6b006c6 100644
--- a/src/arch/generic/lib.h
+++ b/src/arch/generic/lib.h
@@ -1,9 +1,5 @@
/* SPDX-License-Identifier: MIT */
-#ifndef __INTERNAL__LIBURING_LIB_H
- #error "This file should be included from src/lib.h (liburing)"
-#endif
-
#ifndef LIBURING_ARCH_GENERIC_LIB_H
#define LIBURING_ARCH_GENERIC_LIB_H
diff --git a/src/arch/generic/syscall.h b/src/arch/generic/syscall.h
index 22252a1..e637890 100644
--- a/src/arch/generic/syscall.h
+++ b/src/arch/generic/syscall.h
@@ -1,9 +1,5 @@
/* SPDX-License-Identifier: MIT */
-#ifndef __INTERNAL__LIBURING_SYSCALL_H
- #error "This file should be included from src/syscall.h (liburing)"
-#endif
-
#ifndef LIBURING_ARCH_GENERIC_SYSCALL_H
#define LIBURING_ARCH_GENERIC_SYSCALL_H
diff --git a/src/arch/x86/lib.h b/src/arch/x86/lib.h
index e6a74f3..6ece2d4 100644
--- a/src/arch/x86/lib.h
+++ b/src/arch/x86/lib.h
@@ -1,9 +1,5 @@
/* SPDX-License-Identifier: MIT */
-#ifndef __INTERNAL__LIBURING_LIB_H
- #error "This file should be included from src/lib.h (liburing)"
-#endif
-
#ifndef LIBURING_ARCH_X86_LIB_H
#define LIBURING_ARCH_X86_LIB_H
diff --git a/src/arch/x86/syscall.h b/src/arch/x86/syscall.h
index 43c576b..cb8fb91 100644
--- a/src/arch/x86/syscall.h
+++ b/src/arch/x86/syscall.h
@@ -1,9 +1,5 @@
/* SPDX-License-Identifier: MIT */
-#ifndef __INTERNAL__LIBURING_SYSCALL_H
- #error "This file should be included from src/syscall.h (liburing)"
-#endif
-
#ifndef LIBURING_ARCH_X86_SYSCALL_H
#define LIBURING_ARCH_X86_SYSCALL_H
diff --git a/src/lib.h b/src/lib.h
index 89a40f2..7bbacb9 100644
--- a/src/lib.h
+++ b/src/lib.h
@@ -6,7 +6,6 @@
#include <string.h>
#include <unistd.h>
-#define __INTERNAL__LIBURING_LIB_H
#if defined(__x86_64__) || defined(__i386__)
#include "arch/x86/lib.h"
#else
@@ -19,7 +18,6 @@
/* libc wrappers. */
#include "arch/generic/lib.h"
#endif
-#undef __INTERNAL__LIBURING_LIB_H
#ifndef offsetof
diff --git a/src/syscall.h b/src/syscall.h
index 214789d..73b04b4 100644
--- a/src/syscall.h
+++ b/src/syscall.h
@@ -70,7 +70,6 @@ static inline bool IS_ERR(const void *ptr)
return uring_unlikely((uintptr_t) ptr >= (uintptr_t) -4095UL);
}
-#define __INTERNAL__LIBURING_SYSCALL_H
#if defined(__x86_64__) || defined(__i386__)
#include "arch/x86/syscall.h"
#elif defined(__aarch64__)
@@ -86,7 +85,6 @@ static inline bool IS_ERR(const void *ptr)
/* libc syscall wrappers. */
#include "arch/generic/syscall.h"
#endif
-#undef __INTERNAL__LIBURING_SYSCALL_H
/*
* For backward compatibility.
--
Ammar Faizi
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH liburing v5 05/10] arch/aarch64: lib: Add `get_page_size()` function
2022-07-05 7:43 [PATCH liburing v5 00/10] aarch64 support Ammar Faizi
` (3 preceding siblings ...)
2022-07-05 7:43 ` [PATCH liburing v5 04/10] arch: Remove `__INTERNAL__LIBURING_LIB_H` checks Ammar Faizi
@ 2022-07-05 7:43 ` Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 06/10] lib: Style fixup for #if / #elif / #else / #endif Ammar Faizi
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Ammar Faizi @ 2022-07-05 7:43 UTC (permalink / raw)
To: Jens Axboe
Cc: Ammar Faizi, Alviro Iskandar Setiawan, Fernanda Ma'rouf,
Hao Xu, Pavel Begunkov, io-uring Mailing List,
GNU/Weeb Mailing List
From: Ammar Faizi <[email protected]>
A prep patch to add aarch64 nolibc support.
aarch64 supports three values of page size: 4K, 16K, and 64K which are
selected at kernel compilation time. Therefore, we can't hard code the
page size for this arch. Utilize open(), read() and close() syscall to
find the page size from /proc/self/auxv. For more details about the
auxv data structure, check the link below [1].
v4:
- Simplify __get_page_size() function (review from Alviro).
v3:
- Split open/read/close in get_page_size() into a new function.
- Cache the fallback value when we fail on the syscalls.
- No need to init the static var to zero.
v2:
- Fallback to 4K if the syscall fails.
- Cache the page size after read as suggested by Jens.
Link: https://github.com/torvalds/linux/blob/v5.19-rc4/fs/binfmt_elf.c#L260 [1]
Link: https://lore.kernel.org/io-uring/[email protected]
Link: https://lore.kernel.org/io-uring/[email protected]
Link: https://lore.kernel.org/io-uring/[email protected]
Suggested-by: Jens Axboe <[email protected]>
Reviewed-by: Alviro Iskandar Setiawan <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---
src/arch/aarch64/lib.h | 48 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
create mode 100644 src/arch/aarch64/lib.h
diff --git a/src/arch/aarch64/lib.h b/src/arch/aarch64/lib.h
new file mode 100644
index 0000000..5a75c1a
--- /dev/null
+++ b/src/arch/aarch64/lib.h
@@ -0,0 +1,48 @@
+/* SPDX-License-Identifier: MIT */
+
+#ifndef LIBURING_ARCH_AARCH64_LIB_H
+#define LIBURING_ARCH_AARCH64_LIB_H
+
+#include <elf.h>
+#include <sys/auxv.h>
+#include "../../syscall.h"
+
+static inline long __get_page_size(void)
+{
+ Elf64_Off buf[2];
+ long ret = 4096;
+ int fd;
+
+ fd = __sys_open("/proc/self/auxv", O_RDONLY, 0);
+ if (fd < 0)
+ return ret;
+
+ while (1) {
+ ssize_t x;
+
+ x = __sys_read(fd, buf, sizeof(buf));
+ if (x < sizeof(buf))
+ break;
+
+ if (buf[0] == AT_PAGESZ) {
+ ret = buf[1];
+ break;
+ }
+ }
+
+ __sys_close(fd);
+ return ret;
+}
+
+static inline long get_page_size(void)
+{
+ static long cache_val;
+
+ if (cache_val)
+ return cache_val;
+
+ cache_val = __get_page_size();
+ return cache_val;
+}
+
+#endif /* #ifndef LIBURING_ARCH_AARCH64_LIB_H */
--
Ammar Faizi
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH liburing v5 06/10] lib: Style fixup for #if / #elif / #else / #endif
2022-07-05 7:43 [PATCH liburing v5 00/10] aarch64 support Ammar Faizi
` (4 preceding siblings ...)
2022-07-05 7:43 ` [PATCH liburing v5 05/10] arch/aarch64: lib: Add `get_page_size()` function Ammar Faizi
@ 2022-07-05 7:43 ` Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 07/10] lib: Enable nolibc support for aarch64 Ammar Faizi
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Ammar Faizi @ 2022-07-05 7:43 UTC (permalink / raw)
To: Jens Axboe
Cc: Ammar Faizi, Alviro Iskandar Setiawan, Fernanda Ma'rouf,
Hao Xu, Pavel Begunkov, io-uring Mailing List,
GNU/Weeb Mailing List
From: Ammar Faizi <[email protected]>
Don't indent the block inside #if / #elif / #else / #endif.
Signed-off-by: Ammar Faizi <[email protected]>
---
src/lib.h | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/src/lib.h b/src/lib.h
index 7bbacb9..a966c77 100644
--- a/src/lib.h
+++ b/src/lib.h
@@ -7,28 +7,28 @@
#include <unistd.h>
#if defined(__x86_64__) || defined(__i386__)
- #include "arch/x86/lib.h"
+#include "arch/x86/lib.h"
#else
- /*
- * We don't have nolibc support for this arch. Must use libc!
- */
- #ifdef CONFIG_NOLIBC
- #error "This arch doesn't support building liburing without libc"
- #endif
- /* libc wrappers. */
- #include "arch/generic/lib.h"
+/*
+ * We don't have nolibc support for this arch. Must use libc!
+ */
+#ifdef CONFIG_NOLIBC
+#error "This arch doesn't support building liburing without libc"
+#endif
+/* libc wrappers. */
+#include "arch/generic/lib.h"
#endif
#ifndef offsetof
- #define offsetof(TYPE, FIELD) ((size_t) &((TYPE *)0)->FIELD)
+#define offsetof(TYPE, FIELD) ((size_t) &((TYPE *)0)->FIELD)
#endif
#ifndef container_of
- #define container_of(PTR, TYPE, FIELD) ({ \
- __typeof__(((TYPE *)0)->FIELD) *__FIELD_PTR = (PTR); \
- (TYPE *)((char *) __FIELD_PTR - offsetof(TYPE, FIELD)); \
- })
+#define container_of(PTR, TYPE, FIELD) ({ \
+ __typeof__(((TYPE *)0)->FIELD) *__FIELD_PTR = (PTR); \
+ (TYPE *)((char *) __FIELD_PTR - offsetof(TYPE, FIELD)); \
+})
#endif
#define __maybe_unused __attribute__((__unused__))
--
Ammar Faizi
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH liburing v5 07/10] lib: Enable nolibc support for aarch64
2022-07-05 7:43 [PATCH liburing v5 00/10] aarch64 support Ammar Faizi
` (5 preceding siblings ...)
2022-07-05 7:43 ` [PATCH liburing v5 06/10] lib: Style fixup for #if / #elif / #else / #endif Ammar Faizi
@ 2022-07-05 7:43 ` Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 08/10] test: Add nolibc test Ammar Faizi
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Ammar Faizi @ 2022-07-05 7:43 UTC (permalink / raw)
To: Jens Axboe
Cc: Ammar Faizi, Alviro Iskandar Setiawan, Fernanda Ma'rouf,
Hao Xu, Pavel Begunkov, io-uring Mailing List,
GNU/Weeb Mailing List
From: Ammar Faizi <[email protected]>
A previous patch adds get_page_size() function which is the missing bit
for aarch64 nolibc support. Now we have a full set of functions to
enable nolibc build support for aarch64.
Signed-off-by: Ammar Faizi <[email protected]>
---
src/lib.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/lib.h b/src/lib.h
index a966c77..f347191 100644
--- a/src/lib.h
+++ b/src/lib.h
@@ -8,6 +8,8 @@
#if defined(__x86_64__) || defined(__i386__)
#include "arch/x86/lib.h"
+#elif defined(__aarch64__)
+#include "arch/aarch64/lib.h"
#else
/*
* We don't have nolibc support for this arch. Must use libc!
--
Ammar Faizi
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH liburing v5 08/10] test: Add nolibc test
2022-07-05 7:43 [PATCH liburing v5 00/10] aarch64 support Ammar Faizi
` (6 preceding siblings ...)
2022-07-05 7:43 ` [PATCH liburing v5 07/10] lib: Enable nolibc support for aarch64 Ammar Faizi
@ 2022-07-05 7:43 ` Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 09/10] .github: Enable aarch64 nolibc build for GitHub bot Ammar Faizi
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Ammar Faizi @ 2022-07-05 7:43 UTC (permalink / raw)
To: Jens Axboe
Cc: Ammar Faizi, Alviro Iskandar Setiawan, Fernanda Ma'rouf,
Hao Xu, Pavel Begunkov, io-uring Mailing List,
GNU/Weeb Mailing List
From: Ammar Faizi <[email protected]>
Test liburing nolibc functionality. The first use case of this test is
to test get_page_size() function as we don't seem to have a test that
tests this path. This is especially important for aarch64 because we
rely on reading /proc/self/auxv rather than hard coding it like what we
do for x86 and x86-64. We may add more nolibc tests in this file in the
future.
Reviewed-by: Alviro Iskandar Setiawan <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---
test/Makefile | 1 +
test/nolibc.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+)
create mode 100644 test/nolibc.c
diff --git a/test/Makefile b/test/Makefile
index 9590e1e..45674c3 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -101,6 +101,7 @@ test_srcs := \
mkdir.c \
msg-ring.c \
multicqes_drain.c \
+ nolibc.c \
nop-all-sizes.c \
nop.c \
openat2.c \
diff --git a/test/nolibc.c b/test/nolibc.c
new file mode 100644
index 0000000..e996f40
--- /dev/null
+++ b/test/nolibc.c
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Test liburing nolibc functionality.
+ *
+ * Currently, supported architectures are:
+ * 1) x86
+ * 2) x86-64
+ * 3) aarch64
+ *
+ */
+#include "helpers.h"
+
+#if !defined(__x86_64__) && !defined(__i386__) && !defined(__aarch64__)
+
+/*
+ * This arch doesn't support nolibc.
+ */
+int main(void)
+{
+ return T_EXIT_SKIP;
+}
+
+#else /* #if !defined(__x86_64__) && !defined(__i386__) && !defined(__aarch64__) */
+
+#ifndef CONFIG_NOLIBC
+#define CONFIG_NOLIBC
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+#include "../src/lib.h"
+
+static int test_get_page_size(void)
+{
+ long a, b;
+
+ a = sysconf(_SC_PAGESIZE);
+ b = get_page_size();
+ if (a != b) {
+ fprintf(stderr, "get_page_size() fails, %ld != %ld", a, b);
+ return -1;
+ }
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ int ret;
+
+ if (argc > 1)
+ return T_EXIT_SKIP;
+
+ ret = test_get_page_size();
+ if (ret)
+ return T_EXIT_FAIL;
+
+ return T_EXIT_PASS;
+}
+
+#endif /* #if !defined(__x86_64__) && !defined(__i386__) && !defined(__aarch64__) */
--
Ammar Faizi
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH liburing v5 09/10] .github: Enable aarch64 nolibc build for GitHub bot
2022-07-05 7:43 [PATCH liburing v5 00/10] aarch64 support Ammar Faizi
` (7 preceding siblings ...)
2022-07-05 7:43 ` [PATCH liburing v5 08/10] test: Add nolibc test Ammar Faizi
@ 2022-07-05 7:43 ` Ammar Faizi
2022-07-05 7:44 ` [PATCH liburing v5 10/10] CHANGELOG: Note about aarch64 support Ammar Faizi
2022-07-05 14:26 ` [PATCH liburing v5 00/10] " Jens Axboe
10 siblings, 0 replies; 12+ messages in thread
From: Ammar Faizi @ 2022-07-05 7:43 UTC (permalink / raw)
To: Jens Axboe
Cc: Ammar Faizi, Alviro Iskandar Setiawan, Fernanda Ma'rouf,
Hao Xu, Pavel Begunkov, io-uring Mailing List,
GNU/Weeb Mailing List
From: Ammar Faizi <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---
.github/workflows/build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 88192ff..fc119cb 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -114,7 +114,7 @@ jobs:
- name: Build nolibc
run: |
- if [[ "${{matrix.arch}}" == "x86_64" || "${{matrix.arch}}" == "i686" ]]; then \
+ if [[ "${{matrix.arch}}" == "x86_64" || "${{matrix.arch}}" == "i686" || "${{matrix.arch}}" == "aarch64" ]]; then \
make clean; \
./configure --cc=${{matrix.cc}} --cxx=${{matrix.cxx}} --nolibc; \
make -j$(nproc) V=1 CPPFLAGS="-Werror" CFLAGS="$FLAGS" CXXFLAGS="$FLAGS"; \
--
Ammar Faizi
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH liburing v5 10/10] CHANGELOG: Note about aarch64 support
2022-07-05 7:43 [PATCH liburing v5 00/10] aarch64 support Ammar Faizi
` (8 preceding siblings ...)
2022-07-05 7:43 ` [PATCH liburing v5 09/10] .github: Enable aarch64 nolibc build for GitHub bot Ammar Faizi
@ 2022-07-05 7:44 ` Ammar Faizi
2022-07-05 14:26 ` [PATCH liburing v5 00/10] " Jens Axboe
10 siblings, 0 replies; 12+ messages in thread
From: Ammar Faizi @ 2022-07-05 7:44 UTC (permalink / raw)
To: Jens Axboe
Cc: Ammar Faizi, Alviro Iskandar Setiawan, Fernanda Ma'rouf,
Hao Xu, Pavel Begunkov, io-uring Mailing List,
GNU/Weeb Mailing List
From: Ammar Faizi <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---
CHANGELOG | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/CHANGELOG b/CHANGELOG
index efb3ff3..9c054b0 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,8 @@
+liburing-2.3 release
+
+- Support non-libc build for aarch64.
+
+
liburing-2.2 release
- Support non-libc builds.
--
Ammar Faizi
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH liburing v5 00/10] aarch64 support
2022-07-05 7:43 [PATCH liburing v5 00/10] aarch64 support Ammar Faizi
` (9 preceding siblings ...)
2022-07-05 7:44 ` [PATCH liburing v5 10/10] CHANGELOG: Note about aarch64 support Ammar Faizi
@ 2022-07-05 14:26 ` Jens Axboe
10 siblings, 0 replies; 12+ messages in thread
From: Jens Axboe @ 2022-07-05 14:26 UTC (permalink / raw)
To: ammarfaizi2
Cc: io-uring, fernandafmr12, asml.silence, alviro.iskandar, gwml,
howeyxu
On Tue, 5 Jul 2022 14:43:50 +0700, Ammar Faizi wrote:
> From: Ammar Faizi <[email protected]>
>
> Hi Jens,
>
> This is v5 revision of aarch64 support.
>
> This series contains nolibc support for aarch64 and one extra irrelevant
> cleanup (patch #1). The missing bit from aarch64 is get_page_size()
> which is a bit complicated to implement without libc.
>
> [...]
Applied, thanks!
[01/10] CHANGELOG: Fixup missing space
commit: 3b70ce9c946a2a6623b23f88e1f38ae3a6f9e0ee
[02/10] arch: syscall: Add `__sys_open()` syscall
commit: 27c678f1698871bbdcd6ccb853a54374e62e9532
[03/10] arch: syscall: Add `__sys_read()` syscall
commit: 420e43f8bde3bb564c32702dabd416fc8b6154f4
[04/10] arch: Remove `__INTERNAL__LIBURING_LIB_H` checks
commit: bd2bed0057d0875726eff0587bf0be92fe9d246e
[05/10] arch/aarch64: lib: Add `get_page_size()` function
commit: c6bc86e2125bcd6fa10ff2b128cd86486acadff6
[06/10] lib: Style fixup for #if / #elif / #else / #endif
commit: 090fd8441bf70d4db35796946cb7703b4e13e794
[07/10] lib: Enable nolibc support for aarch64
commit: e7ad97fb51b116dfa653f55508d7be131a65d8f2
[08/10] test: Add nolibc test
commit: 46d3e1df5f434156916abd0578110d0477bf56f7
[09/10] .github: Enable aarch64 nolibc build for GitHub bot
commit: b86c5c795ed83add45f1c4e9955509093f2d9709
[10/10] CHANGELOG: Note about aarch64 support
commit: 41f9e992d11e0fde0406b706afce31f6926e13de
Best regards,
--
Jens Axboe
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2022-07-05 14:26 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-05 7:43 [PATCH liburing v5 00/10] aarch64 support Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 01/10] CHANGELOG: Fixup missing space Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 02/10] arch: syscall: Add `__sys_open()` syscall Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 03/10] arch: syscall: Add `__sys_read()` syscall Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 04/10] arch: Remove `__INTERNAL__LIBURING_LIB_H` checks Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 05/10] arch/aarch64: lib: Add `get_page_size()` function Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 06/10] lib: Style fixup for #if / #elif / #else / #endif Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 07/10] lib: Enable nolibc support for aarch64 Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 08/10] test: Add nolibc test Ammar Faizi
2022-07-05 7:43 ` [PATCH liburing v5 09/10] .github: Enable aarch64 nolibc build for GitHub bot Ammar Faizi
2022-07-05 7:44 ` [PATCH liburing v5 10/10] CHANGELOG: Note about aarch64 support Ammar Faizi
2022-07-05 14:26 ` [PATCH liburing v5 00/10] " Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox