vmbase: Move dbm to aarch64
Moving management of Dirty pages to aarch64 director as a preparation for adding new CPU Architecture.
Bug: 362733888
Test: m libvmbase
Change-Id: Id8660e8d42229970785d4374b6f55819489961ec
diff --git a/libs/libvmbase/src/arch.rs b/libs/libvmbase/src/arch.rs
index 10e5e37..c60c651 100644
--- a/libs/libvmbase/src/arch.rs
+++ b/libs/libvmbase/src/arch.rs
@@ -26,6 +26,9 @@
#[cfg(target_arch = "aarch64")]
pub use aarch64::linker;
+#[cfg(target_arch = "aarch64")]
+pub use aarch64::dbm;
+
/// Write with well-defined compiled behavior.
///
/// See https://github.com/rust-lang/rust/issues/131894
diff --git a/libs/libvmbase/src/arch/aarch64.rs b/libs/libvmbase/src/arch/aarch64.rs
index 2933386..a3f1dd5 100644
--- a/libs/libvmbase/src/arch/aarch64.rs
+++ b/libs/libvmbase/src/arch/aarch64.rs
@@ -14,6 +14,7 @@
//! Wrappers of assembly calls.
+pub mod dbm;
pub mod layout;
pub mod linker;
pub mod page_table;
diff --git a/libs/libvmbase/src/memory/dbm.rs b/libs/libvmbase/src/arch/aarch64/dbm.rs
similarity index 94%
rename from libs/libvmbase/src/memory/dbm.rs
rename to libs/libvmbase/src/arch/aarch64/dbm.rs
index b68b840..1c2190c 100644
--- a/libs/libvmbase/src/memory/dbm.rs
+++ b/libs/libvmbase/src/arch/aarch64/dbm.rs
@@ -21,7 +21,7 @@
/// Sets whether the hardware management of access and dirty state is enabled with
/// the given boolean.
-pub(super) fn set_dbm_enabled(enabled: bool) {
+pub fn set_dbm_enabled(enabled: bool) {
if !dbm_available() {
return;
}
@@ -49,8 +49,9 @@
read_sysreg!("id_aa64mmfr1_el1") & DBM_AVAILABLE != 0
}
+#[allow(clippy::result_unit_err)]
/// Flushes a memory range the descriptor refers to, if the descriptor is in writable-dirty state.
-pub(super) fn flush_dirty_range(
+pub fn flush_dirty_range(
va_range: &MemoryRegion,
desc: &Descriptor,
_level: usize,
@@ -62,9 +63,10 @@
Ok(())
}
+#[allow(clippy::result_unit_err)]
/// Clears read-only flag on a PTE, making it writable-dirty. Used when dirty state is managed
/// in software to handle permission faults on read-only descriptors.
-pub(super) fn mark_dirty_block(
+pub fn mark_dirty_block(
va_range: &MemoryRegion,
desc: &mut Descriptor,
_level: usize,
diff --git a/libs/libvmbase/src/memory.rs b/libs/libvmbase/src/memory.rs
index 6058639..afd70aa 100644
--- a/libs/libvmbase/src/memory.rs
+++ b/libs/libvmbase/src/memory.rs
@@ -14,7 +14,6 @@
//! Memory management.
-mod dbm;
mod error;
mod shared;
mod stack;
diff --git a/libs/libvmbase/src/memory/tracker.rs b/libs/libvmbase/src/memory/tracker.rs
index a1caced..880e4da 100644
--- a/libs/libvmbase/src/memory/tracker.rs
+++ b/libs/libvmbase/src/memory/tracker.rs
@@ -14,10 +14,10 @@
//! Memory management.
-use super::dbm::{flush_dirty_range, mark_dirty_block, set_dbm_enabled};
use super::error::MemoryTrackerError;
use super::shared::{SHARED_MEMORY, SHARED_POOL};
use crate::arch::aarch64::page_table::{PageTable, MMIO_LAZY_MAP_FLAG};
+use crate::arch::dbm::{flush_dirty_range, mark_dirty_block, set_dbm_enabled};
use crate::dsb;
use crate::layout;
use crate::memory::shared::{MemoryRange, MemorySharer, MmioSharer};