aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan A. Melnikov <iv@altlinux.org>2021-04-09 11:45:10 +0300
committerLasse Collin <lasse.collin@tukaani.org>2022-07-12 18:53:41 +0300
commit95806a8a52ae57bddf6c77dfd19cf7938a92e040 (patch)
tree58789773098007b58df3bd13787bc05e561d0294
parentCMake: Use interface library for better FindLibLZMA compatibility. (diff)
downloadxz-95806a8a52ae57bddf6c77dfd19cf7938a92e040.tar.xz
Reduce maximum possible memory limit on MIPS32
Due to architectural limitations, address space available to a single userspace process on MIPS32 is limited to 2 GiB, not 4, even on systems that have more physical RAM -- e.g. 64-bit systems with 32-bit userspace, or systems that use XPA (an extension similar to x86's PAE). So, for MIPS32, we have to impose stronger memory limits. I've chosen 2000MiB to give the process some headroom.
-rw-r--r--src/xz/hardware.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/xz/hardware.c b/src/xz/hardware.c
index e746cf91..da3ed3f1 100644
--- a/src/xz/hardware.c
+++ b/src/xz/hardware.c
@@ -91,7 +91,13 @@ hardware_memlimit_set(uint64_t new_memlimit,
// Use a value less than SIZE_MAX so that there's some room
// for the xz program and so on. Don't use 4000 MiB because
// it could look like someone mixed up base-2 and base-10.
+#ifdef __mips__
+ // For MIPS32, due to architectural pecularities,
+ // the limit is even lower.
+ const uint64_t limit_max = UINT64_C(2000) << 20;
+#else
const uint64_t limit_max = UINT64_C(4020) << 20;
+#endif
// UINT64_MAX is a special case for the string "max" so
// that has to be handled specially.