14.0-CURRENT failed to reclaim memory error in RPi 3B build

From: Archimedes Gaviola <archimedes.gaviola_at_gmail.com>
Date: Sun, 30 Oct 2022 13:41:52 UTC
Hi,

I am building a kernel and world in 14.0-CURRENT
https://download.freebsd.org/ftp/snapshots/arm64/aarch64/ISO-IMAGES/14.0/FreeBSD-14.0-CURRENT-arm64-aarch64-RPI-20221027-769b884e2e2-258837.img.xz
with Raspberry Pi 3B  (ARM kernel config file and in default system
configurations) and compilation breaks due to "failed to reclaim memory"
error as found in the dmesg.

pid 91224 (llvm-tblgen), jid 0, uid 0, was killed: failed to reclaim memory
pid 91131 (make), jid 0, uid 0, was killed: failed to reclaim memory

Here's the set of the build commands I invoked.

root@generic# cd /usr/src ; make KERNCONF=ARM TARGET_ARCH=aarch64
buildkernel buildworld installkernel installworld distribution
DESTDIR=/home/freebsd/rpi3b

Somewhere below, the error occurred.

llvm-tblgen -gen-asm-matcher  -I /usr/src/contrib/llvm-project/llvm/include
-I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV  -d
RISCVGenAsmMatcher.inc.d -o RISCVGenAsmMatcher.inc
 /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
llvm-tblgen -gen-asm-writer  -I /usr/src/contrib/llvm-project/llvm/include
-I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV  -d
RISCVGenAsmWriter.inc.d -o RISCVGenAsmWriter.inc
 /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
llvm-tblgen -gen-callingconv  -I /usr/src/contrib/llvm-project/llvm/include
-I /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV  -d
RISCVGenCallingConv.inc.d -o RISCVGenCallingConv.inc
 /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
llvm-tblgen -gen-compress-inst-emitter  -I
/usr/src/contrib/llvm-project/llvm/include -I
/usr/src/contrib/llvm-project/llvm/lib/Target/RISCV  -d
RISCVGenCompressInstEmitter.inc.d -o RISCVGenCompressInstEmitter.inc
 /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
llvm-tblgen -gen-dag-isel  -I /usr/src/contrib/llvm-project/llvm/include -I
/usr/src/contrib/llvm-project/llvm/lib/Target/RISCV  -d
RISCVGenDAGISel.inc.d -o RISCVGenDAGISel.inc
 /usr/src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.td
*** Signal 9

Stop.
make[5]: stopped in /usr/src/lib/clang
*** Error code 1

Stop.
make[4]: stopped in /usr/src/lib
*** Error code 1

Stop.
make[3]: stopped in /usr/src
*** Error code 1

Stop.
make[2]: stopped in /usr/src
    30924.61 real     27331.99 user      2960.40 sys
*** Error code 1

Stop.
make[1]: stopped in /usr/src
*** Error code 1

Stop.
make: stopped in /usr/src

While checking the error message, it is spotted at the
/usr/src/sys/vm/vm_pageout.c in the vm_pageout_oom() routine.
...
        if (bigproc != NULL) {
                switch (shortage) {
                case VM_OOM_MEM:
                        reason = "failed to reclaim memory";
                        break;
                case VM_OOM_MEM_PF:
                        reason = "a thread waited too long to allocate a
page";
                        break;
                case VM_OOM_SWAPZ:
                        reason = "out of swap space";
                        break;
                default:
                        panic("unknown OOM reason %d", shortage);
                }
                if (vm_panic_on_oom != 0 && --vm_panic_on_oom == 0)
                        panic("%s", reason);
                PROC_LOCK(bigproc);
                killproc(bigproc, reason);
                sched_nice(bigproc, PRIO_MIN);
                _PRELE(bigproc);
                PROC_UNLOCK(bigproc);
        }
...

Any thoughts? As I don't have any idea about VM pageout.

Thanks and best regards,
Archimedes