File 0631-GC-Support-heap-needs-of-more-than-2-GiB.patch of Package erlang
From dd75c3792bc35bf431435fdb62c448c847397652 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Wed, 18 Jan 2023 15:55:10 +0100
Subject: [PATCH 1/3] GC: Support heap needs of more than 2 GiB
Use the `Uint` type instead of `int`.
---
erts/emulator/beam/erl_gc.c | 16 ++++++++--------
erts/emulator/beam/erl_gc.h | 4 ++--
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index 2ef36009c7..582f3c7485 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.c
@@ -123,13 +123,13 @@ static Eterm *full_sweep_heaps(Process *p,
char *oh, Uint oh_size,
Eterm *objv, int nobj);
static int garbage_collect(Process* p, ErlHeapFragment *live_hf_end,
- int need, Eterm* objv, int nobj, int fcalls,
+ Uint need, Eterm* objv, int nobj, int fcalls,
Uint max_young_gen_usage);
static int major_collection(Process* p, ErlHeapFragment *live_hf_end,
- int need, Eterm* objv, int nobj,
+ Uint need, Eterm* objv, int nobj,
Uint ygen_usage, Uint *recl);
static int minor_collection(Process* p, ErlHeapFragment *live_hf_end,
- int need, Eterm* objv, int nobj,
+ Uint need, Eterm* objv, int nobj,
Uint ygen_usage, Uint *recl);
static void do_minor(Process *p, ErlHeapFragment *live_hf_end,
char *mature, Uint mature_size,
@@ -674,7 +674,7 @@ check_for_possibly_long_gc(Process *p, Uint ygen_usage)
*/
static int
garbage_collect(Process* p, ErlHeapFragment *live_hf_end,
- int need, Eterm* objv, int nobj, int fcalls,
+ Uint need, Eterm* objv, int nobj, int fcalls,
Uint max_young_gen_usage)
{
Uint reclaimed_now = 0;
@@ -876,7 +876,7 @@ do_major_collection:
}
int
-erts_garbage_collect_nobump(Process* p, int need, Eterm* objv, int nobj, int fcalls)
+erts_garbage_collect_nobump(Process* p, Uint need, Eterm* objv, int nobj, int fcalls)
{
int reds, reds_left;
if (p->sig_qs.flags & (FS_ON_HEAP_MSGQ|FS_OFF_HEAP_MSGQ_CHNG)) {
@@ -893,7 +893,7 @@ erts_garbage_collect_nobump(Process* p, int need, Eterm* objv, int nobj, int fca
}
void
-erts_garbage_collect(Process* p, int need, Eterm* objv, int nobj)
+erts_garbage_collect(Process* p, Uint need, Eterm* objv, int nobj)
{
int reds;
if (p->sig_qs.flags & (FS_ON_HEAP_MSGQ|FS_OFF_HEAP_MSGQ_CHNG)) {
@@ -1354,7 +1354,7 @@ erts_garbage_collect_literals(Process* p, Eterm* literals,
static int
minor_collection(Process* p, ErlHeapFragment *live_hf_end,
- int need, Eterm* objv, int nobj,
+ Uint need, Eterm* objv, int nobj,
Uint ygen_usage, Uint *recl)
{
Eterm *mature = p->abandoned_heap ? p->abandoned_heap : p->heap;
@@ -1789,7 +1789,7 @@ do_minor(Process *p, ErlHeapFragment *live_hf_end,
static int
major_collection(Process* p, ErlHeapFragment *live_hf_end,
- int need, Eterm* objv, int nobj,
+ Uint need, Eterm* objv, int nobj,
Uint ygen_usage, Uint *recl)
{
Uint size_before, size_after, stack_size;
diff --git a/erts/emulator/beam/erl_gc.h b/erts/emulator/beam/erl_gc.h
index da4e5723c1..fab739c538 100644
--- a/erts/emulator/beam/erl_gc.h
+++ b/erts/emulator/beam/erl_gc.h
@@ -169,8 +169,8 @@ Eterm erts_process_gc_info(struct process*, Uint *, Eterm **, Uint, Uint);
void erts_gc_info(ErtsGCInfo *gcip);
void erts_init_gc(void);
-int erts_garbage_collect_nobump(struct process*, int, Eterm*, int, int);
-void erts_garbage_collect(struct process*, int, Eterm*, int);
+int erts_garbage_collect_nobump(struct process*, Uint, Eterm*, int, int);
+void erts_garbage_collect(struct process*, Uint, Eterm*, int);
void erts_garbage_collect_hibernate(struct process* p);
Eterm erts_gc_after_bif_call_lhf(struct process* p, ErlHeapFragment *live_hf_end,
Eterm result, Eterm* regs, Uint arity);
--
2.35.3