[llvm] [BOLT] Simple hugify fixes and refactoring (PR #202609)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 24 00:10:11 PDT 2026
https://github.com/DmitriiMartynov updated https://github.com/llvm/llvm-project/pull/202609
>From efab4bd96f2d7d0a1548a274e60cd62a9222ecd0 Mon Sep 17 00:00:00 2001
From: Dmitrii Martynov <martynovdmitryvladimirovich at yandex.ru>
Date: Tue, 5 May 2026 09:25:41 -0400
Subject: [PATCH] [BOLT] hugify: macro constants instead of hardcoded values
All hardcoded values have been replaced with macro constants defined
in bolt/runtime/common.h to improve code readability.
---
bolt/runtime/common.h | 5 +++++
bolt/runtime/hugify.cpp | 25 +++++++++++--------------
2 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/bolt/runtime/common.h b/bolt/runtime/common.h
index 8689bc8b72041..8547cad2c7a6d 100644
--- a/bolt/runtime/common.h
+++ b/bolt/runtime/common.h
@@ -64,6 +64,11 @@ typedef int int32_t;
#define MAP_FAILED ((void *)-1)
+#define MADV_HUGEPAGE 14 /* Worth backing with hugepages */
+
+/* set the state of the "THP disable" flags for the calling thread */
+#define PR_SET_THP_DISABLE 41
+
#define SEEK_SET 0 /* Seek from beginning of file. */
#define SEEK_CUR 1 /* Seek from current position. */
#define SEEK_END 2 /* Seek from end of file. */
diff --git a/bolt/runtime/hugify.cpp b/bolt/runtime/hugify.cpp
index de896307f24fc..34edf3cb1d03b 100644
--- a/bolt/runtime/hugify.cpp
+++ b/bolt/runtime/hugify.cpp
@@ -64,8 +64,8 @@ static void getKernelVersion(uint32_t *Val) {
static bool hasPagecacheTHPSupport() {
char Buf[64];
- int FD = __open("/sys/kernel/mm/transparent_hugepage/enabled",
- 0 /* O_RDONLY */, 0);
+ const int FD =
+ __open("/sys/kernel/mm/transparent_hugepage/enabled", O_RDONLY, 0);
if (FD < 0)
return false;
@@ -98,11 +98,10 @@ static bool hasPagecacheTHPSupport() {
static void hugifyForOldKernel(uint8_t *From, uint8_t *To) {
const size_t Size = To - From;
- uint8_t *Mem = reinterpret_cast<uint8_t *>(
- __mmap(0, Size, 0x3 /* PROT_READ | PROT_WRITE */,
- 0x22 /* MAP_PRIVATE | MAP_ANONYMOUS */, -1, 0));
+ void *Mem = __mmap(0, Size, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- if (Mem == ((void *)-1) /* MAP_FAILED */) {
+ if (Mem == MAP_FAILED) {
char Msg[] = "[hugify] could not allocate memory for text move\n";
reportError(Msg, sizeof(Msg));
}
@@ -114,19 +113,17 @@ static void hugifyForOldKernel(uint8_t *From, uint8_t *To) {
// Copy the hot code to a temporary location.
memcpy(Mem, From, Size);
- __prctl(41 /* PR_SET_THP_DISABLE */, 0, 0, 0, 0);
+ __prctl(PR_SET_THP_DISABLE, 0, 0, 0, 0);
// Maps out the existing hot code.
- if (__mmap(reinterpret_cast<uint64_t>(From), Size,
- 0x3 /* PROT_READ | PROT_WRITE */,
- 0x32 /* MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE */, -1,
- 0) == ((void *)-1) /*MAP_FAILED*/) {
+ if (__mmap(reinterpret_cast<uint64_t>(From), Size, PROT_READ | PROT_WRITE,
+ MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE, -1, 0) == MAP_FAILED) {
char Msg[] =
"[hugify] failed to mmap memory for large page move terminating\n";
reportError(Msg, sizeof(Msg));
}
// Mark the hot code page to be huge page.
- if (__madvise(From, Size, 14 /* MADV_HUGEPAGE */) == -1) {
+ if (__madvise(From, Size, MADV_HUGEPAGE) == -1) {
char Msg[] = "[hugify] setting MADV_HUGEPAGE is failed\n";
reportError(Msg, sizeof(Msg));
}
@@ -135,7 +132,7 @@ static void hugifyForOldKernel(uint8_t *From, uint8_t *To) {
memcpy(From, Mem, Size);
// Change permission back to read-only, ignore failure
- __mprotect(From, Size, 0x5 /* PROT_READ | PROT_EXEC */);
+ __mprotect(From, Size, PROT_READ | PROT_EXEC);
__munmap(Mem, Size);
}
@@ -161,7 +158,7 @@ extern "C" void __bolt_hugify_self_impl() {
return;
}
- if (__madvise(From, (To - From), 14 /* MADV_HUGEPAGE */) == -1) {
+ if (__madvise(From, (To - From), MADV_HUGEPAGE) == -1) {
char Msg[] = "[hugify] failed to allocate large page\n";
// TODO: allow user to control the failure behavior.
reportError(Msg, sizeof(Msg));
More information about the llvm-commits
mailing list