• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: MIT */
2 
3 #ifndef LIBURING_ARCH_RISCV64_LIB_H
4 #define LIBURING_ARCH_RISCV64_LIB_H
5 
6 #include <elf.h>
7 #include <sys/auxv.h>
8 #include "../../syscall.h"
9 
__get_page_size(void)10 static inline long __get_page_size(void)
11 {
12 	Elf64_Off buf[2];
13 	long ret = 4096;
14 	int fd;
15 
16 	fd = __sys_open("/proc/self/auxv", O_RDONLY, 0);
17 	if (fd < 0)
18 		return ret;
19 
20 	while (1) {
21 		ssize_t x;
22 
23 		x = __sys_read(fd, buf, sizeof(buf));
24 		if (x < (long) sizeof(buf))
25 			break;
26 
27 		if (buf[0] == AT_PAGESZ) {
28 			ret = buf[1];
29 			break;
30 		}
31 	}
32 
33 	__sys_close(fd);
34 	return ret;
35 }
36 
get_page_size(void)37 static inline long get_page_size(void)
38 {
39 	static long cache_val;
40 
41 	if (cache_val)
42 		return cache_val;
43 
44 	cache_val = __get_page_size();
45 	return cache_val;
46 }
47 
48 #endif /* #ifndef LIBURING_ARCH_RISCV64_LIB_H */
49