mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-22 09:58:09 +00:00
In AArch64, pages may be 4K or 64K depending on kernel configuration. The GNU C Library documentation suggests [1], "the correct interface to query about the page size is sysconf". Introduce one new architecture-specific function-like macro, page_size(), that on x86 and AArch32 remains a constant so as to minimally affect performance, but on AArch64 is sysconf(_SC_PAGESIZE) for correctness. 1. https://www.gnu.org/software/libc/manual/html_node/Query-Memory-Parameters.html To minimize churn, the PAGE_SIZE macro is left as a build-time estimation of what the run-time page size might be. This fixes the following errors for CRIU on AArch64 kernels with CONFIG_ARM64_64K_PAGES=y, allowing dump of `setsid sleep < /dev/null &> /dev/null` to succeed. Error (kerndat.c:48): Can't stat self map_files: No such file or directory Error (util.c:668): Can't read pme for pid 90: No such file or directory Error (parasite-syscall.c:1135): Can't open 89/map_files/0x3ffb7da0000-0x3ffb7dac000 on procfs: No such file or directory Signed-off-by: Christopher Covington <cov@codeaurora.org> Acked-by: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
20 lines
338 B
C
20 lines
338 B
C
#ifndef __CR_ASM_PAGE_H__
|
|
#define __CR_ASM_PAGE_H__
|
|
|
|
#ifndef PAGE_SHIFT
|
|
# define PAGE_SHIFT 12
|
|
#endif
|
|
|
|
#ifndef PAGE_SIZE
|
|
# define PAGE_SIZE (1UL << PAGE_SHIFT)
|
|
#endif
|
|
|
|
#ifndef PAGE_MASK
|
|
# define PAGE_MASK (~(PAGE_SIZE - 1))
|
|
#endif
|
|
|
|
#define PAGE_PFN(addr) ((addr) / PAGE_SIZE)
|
|
#define page_size() PAGE_SIZE
|
|
|
|
#endif /* __CR_ASM_PAGE_H__ */
|