From 7f9af00152147d3b5ceba0d5db814f09b484e139 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20Kr=C3=BCger?= Date: Thu, 3 Apr 2025 20:06:49 +0100 Subject: [PATCH] RISC-V: Initialise Buddy branch correctly --- .../lib/src/machine_state/memory/buddy.rs | 9 ----- .../src/machine_state/memory/buddy/branch.rs | 35 +++++-------------- .../memory/buddy/branch_combinations.rs | 10 +----- .../src/machine_state/memory/buddy/leaf.rs | 8 ----- 4 files changed, 10 insertions(+), 52 deletions(-) diff --git a/src/riscv/lib/src/machine_state/memory/buddy.rs b/src/riscv/lib/src/machine_state/memory/buddy.rs index 091ffbbd1226..8d7016f984ba 100644 --- a/src/riscv/lib/src/machine_state/memory/buddy.rs +++ b/src/riscv/lib/src/machine_state/memory/buddy.rs @@ -85,12 +85,6 @@ pub trait Buddy: NewState { where M: ManagerRead; - /// Perform a deep refresh of the memory manager infos. - #[cfg(test)] - fn deep_refresh(&mut self) - where - M: ManagerReadWrite; - /// Clone the memory manager state. fn clone(&self) -> Self where @@ -130,7 +124,6 @@ mod tests { let mut manager = F::manager(); let mut state = ::Buddy::new(&mut manager); - state.deep_refresh(); let total_pages = state.longest_free_sequence(); @@ -156,7 +149,6 @@ mod tests { let mut manager = F::manager(); let mut state = ::Buddy::new(&mut manager); - state.deep_refresh(); let total_pages = state.longest_free_sequence(); @@ -192,7 +184,6 @@ mod tests { let mut manager = F::manager(); let mut state = ::Buddy::new(&mut manager); - state.deep_refresh(); // Create a distribution of allocation sizes that when used together would allocate all // available memory diff --git a/src/riscv/lib/src/machine_state/memory/buddy/branch.rs b/src/riscv/lib/src/machine_state/memory/buddy/branch.rs index ac45123a391d..56bc99a48a25 100644 --- a/src/riscv/lib/src/machine_state/memory/buddy/branch.rs +++ b/src/riscv/lib/src/machine_state/memory/buddy/branch.rs @@ -9,7 +9,6 @@ use serde::Serialize; use super::Buddy; use super::BuddyLayout; -use crate::default::ConstDefault; use crate::state::NewState; use crate::state_backend::Atom; use crate::state_backend::Cell; @@ -46,17 +45,6 @@ pub struct FreeInfo { right_free_end: u64, } -impl ConstDefault for FreeInfo { - const DEFAULT: Self = FreeInfo { - left_longest_free_sequence: !0, - left_free_start: !0, - left_free_end: !0, - right_longest_free_sequence: !0, - right_free_start: !0, - right_free_end: !0, - }; -} - struct_layout! { pub struct BuddyBranch2Layout { free_info: Atom, @@ -113,7 +101,7 @@ impl, M: ManagerBase> BuddyBranch2 { impl NewState for BuddyBranch2 where - B: NewState, + B: Buddy, M: ManagerBase, { fn new(manager: &mut M) -> Self @@ -121,7 +109,14 @@ where M: ManagerAlloc, { Self { - free_info: Cell::new(manager), + free_info: Cell::new_with(manager, FreeInfo { + left_longest_free_sequence: B::PAGES, + left_free_start: B::PAGES, + left_free_end: B::PAGES, + right_longest_free_sequence: B::PAGES, + right_free_start: B::PAGES, + right_free_end: B::PAGES, + }), left: Box::new(B::new(manager)), right: Box::new(B::new(manager)), } @@ -283,18 +278,6 @@ where self.free_info.left_free_end.saturating_add(B::PAGES) } - #[cfg(test)] - fn deep_refresh(&mut self) - where - M: ManagerReadWrite, - { - // TODO: RV-568: `FreeInfo` of `BuddyBranch2` is incorrectly initialised - - self.left.deep_refresh(); - self.right.deep_refresh(); - self.refresh(); - } - fn clone(&self) -> Self where M: ManagerClone, diff --git a/src/riscv/lib/src/machine_state/memory/buddy/branch_combinations.rs b/src/riscv/lib/src/machine_state/memory/buddy/branch_combinations.rs index e13468162894..c880c1262e31 100644 --- a/src/riscv/lib/src/machine_state/memory/buddy/branch_combinations.rs +++ b/src/riscv/lib/src/machine_state/memory/buddy/branch_combinations.rs @@ -176,7 +176,7 @@ macro_rules! combined_buddy_branch { impl NewState for $name where - B: NewState, + B: Buddy, M: ManagerBase, { fn new(manager: &mut M) -> Self @@ -236,14 +236,6 @@ macro_rules! combined_buddy_branch { self.0.count_free_end() } - #[cfg(test)] - fn deep_refresh(&mut self) - where - M: ManagerReadWrite - { - self.0.deep_refresh() - } - fn clone(&self) -> Self where M: ManagerClone, diff --git a/src/riscv/lib/src/machine_state/memory/buddy/leaf.rs b/src/riscv/lib/src/machine_state/memory/buddy/leaf.rs index 45170db061e7..a252d71c3eba 100644 --- a/src/riscv/lib/src/machine_state/memory/buddy/leaf.rs +++ b/src/riscv/lib/src/machine_state/memory/buddy/leaf.rs @@ -217,14 +217,6 @@ impl Buddy for BuddyLeaf { (self.set.read().leading_zeros() as u64).saturating_sub(leading_unused_bits) } - #[cfg(test)] - fn deep_refresh(&mut self) - where - M: ManagerReadWrite, - { - // There is no extra information to be updated - } - fn clone(&self) -> Self where M: ManagerClone, -- GitLab