From 3b74b0a093474c09c6235e9373d79717a2950c0d Mon Sep 17 00:00:00 2001 From: Masamichi Takagi Date: Fri, 21 Jun 2019 19:13:28 +0900 Subject: [PATCH] rusage: Move pgsize_to_pgshift to arch-memory.h Change-Id: Ia10b6e5c7d078d345347a79a3e98c06c16d28d6a --- arch/arm64/kernel/include/arch-memory.h | 34 ++++++++++++++++++++ arch/x86_64/kernel/include/arch-memory.h | 12 +++++++ ihk | 2 +- kernel/include/rusage.h | 39 ----------------------- kernel/include/rusage_private.h | 40 ++++++++++++++++++++++++ 5 files changed, 87 insertions(+), 40 deletions(-) diff --git a/arch/arm64/kernel/include/arch-memory.h b/arch/arm64/kernel/include/arch-memory.h index 05e1af5f..9799db66 100644 --- a/arch/arm64/kernel/include/arch-memory.h +++ b/arch/arm64/kernel/include/arch-memory.h @@ -586,6 +586,40 @@ static inline int pgsize_to_tbllv(size_t pgsize) return level; } +static inline int pgsize_to_pgshift(size_t pgsize) +{ + /* We need to use if instead of switch because + * sometimes PTLX_CONT_SIZE == PTLX_SIZE + */ + if (pgsize == PTL4_CONT_SIZE) { + if (CONFIG_ARM64_PGTABLE_LEVELS > 3) { + return PTL4_CONT_SHIFT; + } + } else if (pgsize == PTL4_SIZE) { + if (CONFIG_ARM64_PGTABLE_LEVELS > 3) { + return PTL4_SHIFT; + } + } else if (pgsize == PTL3_CONT_SIZE) { + if (CONFIG_ARM64_PGTABLE_LEVELS > 2) { + return PTL3_CONT_SHIFT; + } + } else if (pgsize == PTL3_SIZE) { + if (CONFIG_ARM64_PGTABLE_LEVELS > 2) { + return PTL3_SHIFT; + } + } else if (pgsize == PTL2_CONT_SIZE) { + return PTL2_CONT_SHIFT; + } else if (pgsize == PTL2_SIZE) { + return PTL2_SHIFT; + } else if (pgsize == PTL1_CONT_SIZE) { + return PTL1_CONT_SHIFT; + } else if (pgsize == PTL1_SIZE) { + return PTL1_SHIFT; + } + + return -EINVAL; +} + static inline size_t tbllv_to_pgsize(int level) { size_t pgsize = 0; diff --git a/arch/x86_64/kernel/include/arch-memory.h b/arch/x86_64/kernel/include/arch-memory.h index 443d6490..0a401bae 100644 --- a/arch/x86_64/kernel/include/arch-memory.h +++ b/arch/x86_64/kernel/include/arch-memory.h @@ -17,6 +17,7 @@ #define __HEADER_X86_COMMON_ARCH_MEMORY_H #include +#include #define KERNEL_CS_ENTRY 4 #define KERNEL_DS_ENTRY 5 @@ -365,6 +366,17 @@ static inline int pgsize_to_tbllv(size_t pgsize) return 0; } +static inline int pgsize_to_pgshift(size_t pgsize) +{ + switch (pgsize) { + case PTL1_SIZE: return PTL1_SHIFT; + case PTL2_SIZE: return PTL2_SHIFT; + case PTL3_SIZE: return PTL3_SHIFT; + case PTL4_SIZE: return PTL4_SHIFT; + default: return -EINVAL; + } +} + static inline size_t tbllv_to_pgsize(int level) { switch (level) { diff --git a/ihk b/ihk index c505d9c2..9a7bb111 160000 --- a/ihk +++ b/ihk @@ -1 +1 @@ -Subproject commit c505d9c25ea959fccffb8336ccab2867d1fb0261 +Subproject commit 9a7bb111e7806c599ad01510334a8b8650685444 diff --git a/kernel/include/rusage.h b/kernel/include/rusage.h index ede6c198..adfe6ce3 100644 --- a/kernel/include/rusage.h +++ b/kernel/include/rusage.h @@ -9,45 +9,6 @@ extern struct rusage_global rusage; -static inline int rusage_pgsize_to_pgtype(size_t pgsize) -{ - int ret = IHK_OS_PGSIZE_4KB; - int pgshift = pgsize_to_pgshift(pgsize); - - switch (pgshift) { - case 12: - ret = IHK_OS_PGSIZE_4KB; - break; - case 16: - ret = IHK_OS_PGSIZE_64KB; - break; - case 21: - ret = IHK_OS_PGSIZE_2MB; - break; - case 25: - ret = IHK_OS_PGSIZE_32MB; - break; - case 30: - ret = IHK_OS_PGSIZE_1GB; - break; - case 34: - ret = IHK_OS_PGSIZE_16GB; - break; - case 29: - ret = IHK_OS_PGSIZE_512MB; - break; - case 42: - ret = IHK_OS_PGSIZE_4TB; - break; - default: - kprintf("%s: Error: Unknown pgsize=%ld\n", - __func__, pgsize); - break; - } - - return ret; -} - struct rusage_percpu { unsigned long user_tsc; unsigned long system_tsc; diff --git a/kernel/include/rusage_private.h b/kernel/include/rusage_private.h index c7e84472..6cc97914 100644 --- a/kernel/include/rusage_private.h +++ b/kernel/include/rusage_private.h @@ -10,6 +10,7 @@ #include #include #include +#include #ifdef ENABLE_RUSAGE @@ -17,6 +18,45 @@ extern void eventfd(int type); +static inline int rusage_pgsize_to_pgtype(size_t pgsize) +{ + int ret = IHK_OS_PGSIZE_4KB; + int pgshift = pgsize_to_pgshift(pgsize); + + switch (pgshift) { + case 12: + ret = IHK_OS_PGSIZE_4KB; + break; + case 16: + ret = IHK_OS_PGSIZE_64KB; + break; + case 21: + ret = IHK_OS_PGSIZE_2MB; + break; + case 25: + ret = IHK_OS_PGSIZE_32MB; + break; + case 30: + ret = IHK_OS_PGSIZE_1GB; + break; + case 34: + ret = IHK_OS_PGSIZE_16GB; + break; + case 29: + ret = IHK_OS_PGSIZE_512MB; + break; + case 42: + ret = IHK_OS_PGSIZE_4TB; + break; + default: + kprintf("%s: Error: Unknown pgsize=%ld\n", + __func__, pgsize); + break; + } + + return ret; +} + static inline void rusage_total_memory_add(unsigned long size) {