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)10static 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)37static 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