This is set via the new PR_SET_THP_POLICY prctl. This will clear both the MMF2_THP_VMA_DEFAULT_NOHUGE and MMF2_THP_VMA_DEFAULT_HUGE process flags which will make the VMA behaviour of the process the same as system. Signed-off-by: Usama Arif <usamaarif642@xxxxxxxxx> --- include/uapi/linux/prctl.h | 1 + kernel/sys.c | 6 ++++++ tools/include/uapi/linux/prctl.h | 1 + tools/perf/trace/beauty/include/uapi/linux/prctl.h | 1 + 4 files changed, 9 insertions(+) diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h index d25458f4db9e..340d5ff769a9 100644 --- a/include/uapi/linux/prctl.h +++ b/include/uapi/linux/prctl.h @@ -368,5 +368,6 @@ struct prctl_mm_map { #define PR_GET_THP_POLICY 79 #define PR_THP_POLICY_DEFAULT_HUGE 0 #define PR_THP_POLICY_DEFAULT_NOHUGE 1 +#define PR_THP_POLICY_SYSTEM 2 #endif /* _LINUX_PRCTL_H */ diff --git a/kernel/sys.c b/kernel/sys.c index d91203e6dd0d..d556cdea97c4 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -2665,6 +2665,8 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, error = PR_THP_POLICY_DEFAULT_HUGE; else if (!!test_bit(MMF2_THP_VMA_DEFAULT_NOHUGE, &me->mm->flags2)) error = PR_THP_POLICY_DEFAULT_NOHUGE; + else + error = PR_THP_POLICY_SYSTEM; break; case PR_SET_THP_POLICY: if (arg3 || arg4 || arg5) @@ -2682,6 +2684,10 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, set_bit(MMF2_THP_VMA_DEFAULT_NOHUGE, &me->mm->flags2); process_vmas_thp_default_nohuge(me->mm); break; + case PR_THP_POLICY_SYSTEM: + clear_bit(MMF2_THP_VMA_DEFAULT_HUGE, &me->mm->flags2); + clear_bit(MMF2_THP_VMA_DEFAULT_NOHUGE, &me->mm->flags2); + break; default: return -EINVAL; } diff --git a/tools/include/uapi/linux/prctl.h b/tools/include/uapi/linux/prctl.h index e03d0ed890c5..cc209c9a8afb 100644 --- a/tools/include/uapi/linux/prctl.h +++ b/tools/include/uapi/linux/prctl.h @@ -332,5 +332,6 @@ struct prctl_mm_map { #define PR_GET_THP_POLICY 79 #define PR_THP_POLICY_DEFAULT_HUGE 0 #define PR_THP_POLICY_DEFAULT_NOHUGE 1 +#define PR_THP_POLICY_SYSTEM 2 #endif /* _LINUX_PRCTL_H */ diff --git a/tools/perf/trace/beauty/include/uapi/linux/prctl.h b/tools/perf/trace/beauty/include/uapi/linux/prctl.h index d25458f4db9e..340d5ff769a9 100644 --- a/tools/perf/trace/beauty/include/uapi/linux/prctl.h +++ b/tools/perf/trace/beauty/include/uapi/linux/prctl.h @@ -368,5 +368,6 @@ struct prctl_mm_map { #define PR_GET_THP_POLICY 79 #define PR_THP_POLICY_DEFAULT_HUGE 0 #define PR_THP_POLICY_DEFAULT_NOHUGE 1 +#define PR_THP_POLICY_SYSTEM 2 #endif /* _LINUX_PRCTL_H */ -- 2.47.1