From 24e7f77803021f6fadad1df1cf52bdebb49172a3 Mon Sep 17 00:00:00 2001 From: Chen Chengjun Date: Mon, 12 Aug 2024 15:55:59 +0800 Subject: [PATCH] Add duplicate_frame method --- kernel/aster-nix/src/vm/mod.rs | 1 + kernel/aster-nix/src/vm/util.rs | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 kernel/aster-nix/src/vm/util.rs diff --git a/kernel/aster-nix/src/vm/mod.rs b/kernel/aster-nix/src/vm/mod.rs index a4970b5e1..6a932007f 100644 --- a/kernel/aster-nix/src/vm/mod.rs +++ b/kernel/aster-nix/src/vm/mod.rs @@ -18,5 +18,6 @@ pub mod page_fault_handler; pub mod perms; +pub mod util; pub mod vmar; pub mod vmo; diff --git a/kernel/aster-nix/src/vm/util.rs b/kernel/aster-nix/src/vm/util.rs new file mode 100644 index 000000000..68c445fe7 --- /dev/null +++ b/kernel/aster-nix/src/vm/util.rs @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MPL-2.0 + +use ostd::mm::{Frame, FrameAllocOptions}; + +use crate::prelude::*; + +/// Creates a new `Frame` and initializes it with the contents of the `src`. +pub fn duplicate_frame(src: &Frame) -> Result { + let new_frame = FrameAllocOptions::new(1).uninit(true).alloc_single()?; + new_frame.copy_from(src); + Ok(new_frame) +}