From 7c8d354aeed79bcde59d2fcadbab899b60137a74 Mon Sep 17 00:00:00 2001 From: CyrIng Date: Sun, 16 Jun 2024 16:13:39 +0200 Subject: [PATCH] [CR] Fix memory allocation in kernel pages for the SysGate --- aarch64/corefreqd.c | 3 +-- aarch64/corefreqk.c | 11 +++++------ x86_64/corefreqd.c | 3 +-- x86_64/corefreqk.c | 11 +++++------ 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/aarch64/corefreqd.c b/aarch64/corefreqd.c index 8c7bf8d4..cad61ea2 100644 --- a/aarch64/corefreqd.c +++ b/aarch64/corefreqd.c @@ -1131,8 +1131,7 @@ void PerCore_Update( RO(SHM_STRUCT) *RO(Shm), RO(PROC) *RO(Proc), int SysGate_OnDemand(REF *Ref, int operation) { int rc = -1; - const size_t allocPages = \ - (size_t)PAGE_SIZE << Ref->RO(Proc)->Gate.ReqMem.Order; + const size_t allocPages = Ref->RO(Proc)->Gate.ReqMem.Size; if (operation == 0) { if (Ref->RO(SysGate) != NULL) { diff --git a/aarch64/corefreqk.c b/aarch64/corefreqk.c index 37dd210a..dbb5ce1a 100644 --- a/aarch64/corefreqk.c +++ b/aarch64/corefreqk.c @@ -3478,9 +3478,7 @@ static long SysGate_OnDemand(void) GFP_KERNEL); if (PUBLIC(OF(Gate)) != NULL) { - const size_t - allocPages = PAGE_SIZE << PUBLIC(RO(Proc))->Gate.ReqMem.Order; - memset(PUBLIC(OF(Gate)), 0, allocPages); + memset(PUBLIC(OF(Gate)), 0, PUBLIC(RO(Proc))->Gate.ReqMem.Size); rc = 0; } } else { /* Already allocated */ @@ -4897,9 +4895,7 @@ static int CoreFreqK_mmap(struct file *pfile, struct vm_area_struct *vma) case 1: fallthrough; case 0: { - const unsigned long - secSize = PAGE_SIZE << PUBLIC(RO(Proc))->Gate.ReqMem.Order; - if (reqSize != secSize) { + if (reqSize != PUBLIC(RO(Proc))->Gate.ReqMem.Size) { return -EAGAIN; } @@ -5644,6 +5640,9 @@ static int CoreFreqK_Scale_And_Compute_Level_Up(INIT_ARG *pArg) PUBLIC(RO(Proc))->Gate.ReqMem.Order = \ get_order(PUBLIC(RO(Proc))->Gate.ReqMem.Size); + PUBLIC(RO(Proc))->Gate.ReqMem.Size = \ + PAGE_SIZE << PUBLIC(RO(Proc))->Gate.ReqMem.Order; + PUBLIC(RO(Proc))->Registration.AutoClock = AutoClock; PUBLIC(RO(Proc))->Registration.Experimental = Experimental; diff --git a/x86_64/corefreqd.c b/x86_64/corefreqd.c index eddf7096..e0039cf7 100644 --- a/x86_64/corefreqd.c +++ b/x86_64/corefreqd.c @@ -8143,8 +8143,7 @@ void PerCore_Update( RO(SHM_STRUCT) *RO(Shm), RO(PROC) *RO(Proc), int SysGate_OnDemand(REF *Ref, int operation) { int rc = -1; - const size_t allocPages = \ - (size_t)PAGE_SIZE << Ref->RO(Proc)->Gate.ReqMem.Order; + const size_t allocPages = Ref->RO(Proc)->Gate.ReqMem.Size; if (operation == 0) { if (Ref->RO(SysGate) != NULL) { diff --git a/x86_64/corefreqk.c b/x86_64/corefreqk.c index 0a4c3f9b..172aaaaa 100644 --- a/x86_64/corefreqk.c +++ b/x86_64/corefreqk.c @@ -20331,9 +20331,7 @@ static long SysGate_OnDemand(void) GFP_KERNEL); if (PUBLIC(OF(Gate)) != NULL) { - const size_t - allocPages = PAGE_SIZE << PUBLIC(RO(Proc))->Gate.ReqMem.Order; - memset(PUBLIC(OF(Gate)), 0, allocPages); + memset(PUBLIC(OF(Gate)), 0, PUBLIC(RO(Proc))->Gate.ReqMem.Size); rc = 0; } } else { /* Already allocated */ @@ -23376,9 +23374,7 @@ static int CoreFreqK_mmap(struct file *pfile, struct vm_area_struct *vma) case 1: fallthrough; case 0: { - const unsigned long - secSize = PAGE_SIZE << PUBLIC(RO(Proc))->Gate.ReqMem.Order; - if (reqSize != secSize) { + if (reqSize != PUBLIC(RO(Proc))->Gate.ReqMem.Size) { return -EAGAIN; } @@ -24141,6 +24137,9 @@ static int CoreFreqK_Scale_And_Compute_Level_Up(INIT_ARG *pArg) PUBLIC(RO(Proc))->Gate.ReqMem.Order = \ get_order(PUBLIC(RO(Proc))->Gate.ReqMem.Size); + PUBLIC(RO(Proc))->Gate.ReqMem.Size = \ + PAGE_SIZE << PUBLIC(RO(Proc))->Gate.ReqMem.Order; + PUBLIC(RO(Proc))->Registration.AutoClock = AutoClock; PUBLIC(RO(Proc))->Registration.Experimental = Experimental;