vm: removed c_page_size, it cannot be used by globals

This commit is contained in:
DH 2025-02-28 21:19:21 +03:00 committed by Megamouse
parent 57e7cee84e
commit 2ebf257f84
6 changed files with 24 additions and 27 deletions

View file

@ -776,7 +776,7 @@ bool jit_compiler::add(const std::string& path)
if (!cache) if (!cache)
{ {
jit_log.error("ObjectCache: Failed to read file. (path='%s', error=%s)", path, fs::g_tls_error); jit_log.error("ObjectCache: Failed to read file. (path='%s', error=%s)", path, fs::g_tls_error);
return false; return false;
} }
if (auto object_file = llvm::object::ObjectFile::createObjectFile(*cache)) if (auto object_file = llvm::object::ObjectFile::createObjectFile(*cache))
@ -857,11 +857,11 @@ const char * fallback_cpu_detection()
// Return zen4 as a workaround until the next LLVM upgrade. // Return zen4 as a workaround until the next LLVM upgrade.
return "znver4"; return "znver4";
default: default:
// Safest guesses // Safest guesses
return utils::has_avx512() ? "znver4" : return utils::has_avx512() ? "znver4" :
utils::has_avx2() ? "znver1" : utils::has_avx2() ? "znver1" :
utils::has_avx() ? "bdver1" : utils::has_avx() ? "bdver1" :
"nehalem"; "nehalem";
} }
} }
else if (brand.find("Intel") != std::string::npos) else if (brand.find("Intel") != std::string::npos)

View file

@ -15,12 +15,12 @@ namespace utils
*/ */
static inline u32 page_start(u32 addr) static inline u32 page_start(u32 addr)
{ {
return addr & ~(c_page_size - 1); return addr & ~(get_page_size() - 1);
} }
static inline u32 next_page(u32 addr) static inline u32 next_page(u32 addr)
{ {
return page_start(addr) + c_page_size; return page_start(addr) + get_page_size();
} }
static inline u32 page_end(u32 addr) static inline u32 page_end(u32 addr)
@ -30,7 +30,7 @@ namespace utils
static inline u32 is_page_aligned(u32 val) static inline u32 is_page_aligned(u32 val)
{ {
return (val & (c_page_size - 1)) == 0; return (val & (get_page_size() - 1)) == 0;
} }

View file

@ -746,7 +746,7 @@ namespace vm
} }
// If native page size exceeds 4096, don't map native pages (expected to be always mapped in this case) // If native page size exceeds 4096, don't map native pages (expected to be always mapped in this case)
const bool is_noop = bflags & page_size_4k && utils::c_page_size > 4096; const bool is_noop = bflags & page_size_4k && utils::get_page_size() > 4096;
// Lock range being mapped // Lock range being mapped
auto range_lock = _lock_main_range_lock(range_allocation, addr, size); auto range_lock = _lock_main_range_lock(range_allocation, addr, size);
@ -958,7 +958,7 @@ namespace vm
} }
// If native page size exceeds 4096, don't unmap native pages (always mapped) // If native page size exceeds 4096, don't unmap native pages (always mapped)
const bool is_noop = bflags & page_size_4k && utils::c_page_size > 4096; const bool is_noop = bflags & page_size_4k && utils::get_page_size() > 4096;
// Determine deallocation size // Determine deallocation size
u32 size = 0; u32 size = 0;
@ -1305,7 +1305,7 @@ namespace vm
// Special path for whole-allocated areas allowing 4k granularity // Special path for whole-allocated areas allowing 4k granularity
m_common = std::make_shared<utils::shm>(size, fmt::format("_block_x%08x", addr)); m_common = std::make_shared<utils::shm>(size, fmt::format("_block_x%08x", addr));
if (!map_critical(vm::_ptr<u8>(addr), this->flags & page_size_4k && utils::c_page_size > 4096 ? utils::protection::rw : utils::protection::no) || !map_critical(vm::get_super_ptr(addr), utils::protection::rw)) if (!map_critical(vm::_ptr<u8>(addr), this->flags & page_size_4k && utils::get_page_size() > 4096 ? utils::protection::rw : utils::protection::no) || !map_critical(vm::get_super_ptr(addr), utils::protection::rw))
{ {
fmt::throw_exception("Memory mapping failed (addr=0x%x, size=0x%x, flags=0x%x): %s", addr, size, flags, map_error); fmt::throw_exception("Memory mapping failed (addr=0x%x, size=0x%x, flags=0x%x): %s", addr, size, flags, map_error);
} }
@ -1778,7 +1778,7 @@ namespace vm
if (flags & preallocated) if (flags & preallocated)
{ {
m_common = std::make_shared<utils::shm>(size, fmt::format("_block_x%08x", addr)); m_common = std::make_shared<utils::shm>(size, fmt::format("_block_x%08x", addr));
m_common->map_critical(vm::base(addr), this->flags & page_size_4k && utils::c_page_size > 4096 ? utils::protection::rw : utils::protection::no); m_common->map_critical(vm::base(addr), this->flags & page_size_4k && utils::get_page_size() > 4096 ? utils::protection::rw : utils::protection::no);
m_common->map_critical(vm::get_super_ptr(addr)); m_common->map_critical(vm::get_super_ptr(addr));
} }

View file

@ -30,7 +30,7 @@ namespace rsx
{ {
if (p.second.prot != utils::protection::rw) if (p.second.prot != utils::protection::rw)
{ {
utils::memory_protect(vm::base(p.first), utils::c_page_size, utils::protection::rw); utils::memory_protect(vm::base(p.first), utils::get_page_size(), utils::protection::rw);
} }
} }
@ -817,7 +817,7 @@ namespace rsx
if (page.prot == utils::protection::rw) if (page.prot == utils::protection::rw)
{ {
utils::memory_protect(vm::base(page_address), utils::c_page_size, utils::protection::no); utils::memory_protect(vm::base(page_address), utils::get_page_size(), utils::protection::no);
page.prot = utils::protection::no; page.prot = utils::protection::no;
} }
} }
@ -865,7 +865,7 @@ namespace rsx
if (page.prot != utils::protection::rw) if (page.prot != utils::protection::rw)
{ {
utils::memory_protect(vm::base(this_address), utils::c_page_size, utils::protection::rw); utils::memory_protect(vm::base(this_address), utils::get_page_size(), utils::protection::rw);
page.prot = utils::protection::rw; page.prot = utils::protection::rw;
} }
@ -911,7 +911,7 @@ namespace rsx
else else
{ {
// R/W to stale block, unload it and move on // R/W to stale block, unload it and move on
utils::memory_protect(vm::base(page_address), utils::c_page_size, utils::protection::rw); utils::memory_protect(vm::base(page_address), utils::get_page_size(), utils::protection::rw);
m_locked_pages[location].erase(page_address); m_locked_pages[location].erase(page_address);
return true; return true;

View file

@ -16,9 +16,6 @@ namespace utils
// Obtain system page size // Obtain system page size
long get_page_size(); long get_page_size();
// System page size
inline const long c_page_size = get_page_size();
// Memory protection type // Memory protection type
enum class protection enum class protection
{ {

View file

@ -318,15 +318,15 @@ namespace utils
ensure(::VirtualAlloc(pointer, size, MEM_COMMIT, +prot)); ensure(::VirtualAlloc(pointer, size, MEM_COMMIT, +prot));
#else #else
const u64 ptr64 = reinterpret_cast<u64>(pointer); const u64 ptr64 = reinterpret_cast<u64>(pointer);
ensure(::mprotect(reinterpret_cast<void*>(ptr64 & -c_page_size), size + (ptr64 & (c_page_size - 1)), +prot) != -1); ensure(::mprotect(reinterpret_cast<void*>(ptr64 & -get_page_size()), size + (ptr64 & (get_page_size() - 1)), +prot) != -1);
if constexpr (c_madv_dump != 0) if constexpr (c_madv_dump != 0)
{ {
ensure(::madvise(reinterpret_cast<void*>(ptr64 & -c_page_size), size + (ptr64 & (c_page_size - 1)), c_madv_dump) != -1); ensure(::madvise(reinterpret_cast<void*>(ptr64 & -get_page_size()), size + (ptr64 & (get_page_size() - 1)), c_madv_dump) != -1);
} }
else else
{ {
ensure(::madvise(reinterpret_cast<void*>(ptr64 & -c_page_size), size + (ptr64 & (c_page_size - 1)), MADV_WILLNEED) != -1); ensure(::madvise(reinterpret_cast<void*>(ptr64 & -get_page_size()), size + (ptr64 & (get_page_size() - 1)), MADV_WILLNEED) != -1);
} }
#endif #endif
} }
@ -355,11 +355,11 @@ namespace utils
if constexpr (c_madv_no_dump != 0) if constexpr (c_madv_no_dump != 0)
{ {
ensure(::madvise(reinterpret_cast<void*>(ptr64 & -c_page_size), size + (ptr64 & (c_page_size - 1)), c_madv_no_dump) != -1); ensure(::madvise(reinterpret_cast<void*>(ptr64 & -get_page_size()), size + (ptr64 & (get_page_size() - 1)), c_madv_no_dump) != -1);
} }
else else
{ {
ensure(::madvise(reinterpret_cast<void*>(ptr64 & -c_page_size), size + (ptr64 & (c_page_size - 1)), c_madv_free) != -1); ensure(::madvise(reinterpret_cast<void*>(ptr64 & -get_page_size()), size + (ptr64 & (get_page_size() - 1)), c_madv_free) != -1);
} }
#endif #endif
} }
@ -387,17 +387,17 @@ namespace utils
{ {
if (size % 0x200000 == 0) if (size % 0x200000 == 0)
{ {
::madvise(reinterpret_cast<void*>(ptr64 & -c_page_size), size + (ptr64 & (c_page_size - 1)), c_madv_hugepage); ::madvise(reinterpret_cast<void*>(ptr64 & -get_page_size()), size + (ptr64 & (get_page_size() - 1)), c_madv_hugepage);
} }
} }
if constexpr (c_madv_dump != 0) if constexpr (c_madv_dump != 0)
{ {
ensure(::madvise(reinterpret_cast<void*>(ptr64 & -c_page_size), size + (ptr64 & (c_page_size - 1)), c_madv_dump) != -1); ensure(::madvise(reinterpret_cast<void*>(ptr64 & -get_page_size()), size + (ptr64 & (get_page_size() - 1)), c_madv_dump) != -1);
} }
else else
{ {
ensure(::madvise(reinterpret_cast<void*>(ptr64 & -c_page_size), size + (ptr64 & (c_page_size - 1)), MADV_WILLNEED) != -1); ensure(::madvise(reinterpret_cast<void*>(ptr64 & -get_page_size()), size + (ptr64 & (get_page_size() - 1)), MADV_WILLNEED) != -1);
} }
#endif #endif
} }
@ -447,7 +447,7 @@ namespace utils
} }
#else #else
const u64 ptr64 = reinterpret_cast<u64>(pointer); const u64 ptr64 = reinterpret_cast<u64>(pointer);
ensure(::mprotect(reinterpret_cast<void*>(ptr64 & -c_page_size), size + (ptr64 & (c_page_size - 1)), +prot) != -1); ensure(::mprotect(reinterpret_cast<void*>(ptr64 & -get_page_size()), size + (ptr64 & (get_page_size() - 1)), +prot) != -1);
#endif #endif
} }
@ -1055,4 +1055,4 @@ namespace utils
this->unmap(ptr); this->unmap(ptr);
} }
} }
} } // namespace utils