vmbase: Integrate libhyp as module
The only client of libhyp should ever be libvmbase so integrate the
former into the latter, which will allow code de-dup, easier tracking of
logic (including global static variables) and more straightforward code
structure.
Bug: 279539763
Test: m libpvmfw libvmbase_example librialto
Change-Id: Icbeda4cc936ead9c6c6df0533089ddb6b88a0833
diff --git a/libs/hyp/Android.bp b/libs/hyp/Android.bp
deleted file mode 100644
index 404269a..0000000
--- a/libs/hyp/Android.bp
+++ /dev/null
@@ -1,27 +0,0 @@
-package {
- default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-rust_library_rlib {
- name: "libhyp",
- crate_name: "hyp",
- defaults: ["avf_build_flags_rust"],
- srcs: ["src/lib.rs"],
- prefer_rlib: true,
- rustlibs: [
- "libonce_cell_nostd",
- "libsmccc",
- "libuuid_nostd",
- ],
- no_stdlibs: true,
- stdlibs: [
- "libcore.rust_sysroot",
- ],
- enabled: false,
- target: {
- android_arm64: {
- enabled: true,
- },
- },
- apex_available: ["com.android.virt"],
-}
diff --git a/pvmfw/Android.bp b/pvmfw/Android.bp
index 4ee02c1..37a321d 100644
--- a/pvmfw/Android.bp
+++ b/pvmfw/Android.bp
@@ -19,7 +19,6 @@
"libcstr",
"libdiced_open_dice_nostd",
"libfdtpci",
- "libhyp",
"liblibfdt",
"liblog_rust_nostd",
"libonce_cell_nostd",
@@ -75,7 +74,6 @@
defaults: ["libpvmfw.test.defaults"],
rustlibs: [
"libdts",
- "libhyp",
"liblibfdt",
"liblog_rust",
"libpvmfw_fdt_template",
diff --git a/pvmfw/src/device_assignment.rs b/pvmfw/src/device_assignment.rs
index f826167..5edfe97 100644
--- a/pvmfw/src/device_assignment.rs
+++ b/pvmfw/src/device_assignment.rs
@@ -28,11 +28,11 @@
use core::iter::Iterator;
use core::mem;
use core::ops::Range;
-// TODO(ptosi): Remove the need for this workaround.
-#[cfg(not(test))]
-use hyp::DeviceAssigningHypervisor;
use libfdt::{Fdt, FdtError, FdtNode, FdtNodeMut, Phandle, Reg};
use log::error;
+// TODO(b/308694211): Use vmbase::hyp::{DeviceAssigningHypervisor, Error} proper for tests.
+#[cfg(not(test))]
+use vmbase::hyp::DeviceAssigningHypervisor;
use zerocopy::byteorder::big_endian::U32;
use zerocopy::FromBytes as _;
diff --git a/pvmfw/src/entry.rs b/pvmfw/src/entry.rs
index 72212c3..61ea65b 100644
--- a/pvmfw/src/entry.rs
+++ b/pvmfw/src/entry.rs
@@ -23,7 +23,6 @@
use core::num::NonZeroUsize;
use core::ops::Range;
use core::slice;
-use hyp::{get_mem_sharer, get_mmio_guard};
use log::debug;
use log::error;
use log::info;
@@ -32,6 +31,7 @@
use vmbase::util::RangeExt as _;
use vmbase::{
configure_heap, console,
+ hyp::{get_mem_sharer, get_mmio_guard},
layout::{self, crosvm},
main,
memory::{min_dcache_line_size, MemoryTracker, MEMORY, SIZE_128KB, SIZE_4KB},
diff --git a/pvmfw/src/fdt.rs b/pvmfw/src/fdt.rs
index 6038f12..9206588 100644
--- a/pvmfw/src/fdt.rs
+++ b/pvmfw/src/fdt.rs
@@ -46,6 +46,7 @@
use static_assertions::const_assert;
use tinyvec::ArrayVec;
use vmbase::fdt::SwiotlbInfo;
+use vmbase::hyp;
use vmbase::layout::{crosvm::MEM_START, MAX_VIRT_ADDR};
use vmbase::memory::SIZE_4KB;
use vmbase::util::flatten;
diff --git a/rialto/Android.bp b/rialto/Android.bp
index d7aac35..33fe189 100644
--- a/rialto/Android.bp
+++ b/rialto/Android.bp
@@ -15,7 +15,6 @@
"libciborium_nostd",
"libcstr",
"libdiced_open_dice_nostd",
- "libhyp",
"libfdtpci",
"liblibfdt",
"liblog_rust_nostd",
diff --git a/rialto/src/error.rs b/rialto/src/error.rs
index d2bdbbe..033159b 100644
--- a/rialto/src/error.rs
+++ b/rialto/src/error.rs
@@ -18,10 +18,9 @@
use core::{fmt, result};
use diced_open_dice::DiceError;
use fdtpci::PciError;
-use hyp::Error as HypervisorError;
use libfdt::FdtError;
use service_vm_comm::RequestProcessingError;
-use vmbase::{memory::MemoryTrackerError, virtio::pci};
+use vmbase::{hyp::Error as HypervisorError, memory::MemoryTrackerError, virtio::pci};
pub type Result<T> = result::Result<T, Error>;
diff --git a/rialto/src/main.rs b/rialto/src/main.rs
index 11e67cb..864f5e4 100644
--- a/rialto/src/main.rs
+++ b/rialto/src/main.rs
@@ -34,7 +34,6 @@
use core::slice;
use diced_open_dice::{bcc_handover_parse, DiceArtifacts};
use fdtpci::PciInfo;
-use hyp::{get_mem_sharer, get_mmio_guard};
use libfdt::FdtError;
use log::{debug, error, info};
use service_vm_comm::{ServiceVmRequest, VmType};
@@ -48,6 +47,7 @@
use vmbase::{
configure_heap,
fdt::SwiotlbInfo,
+ hyp::{get_mem_sharer, get_mmio_guard},
layout::{self, crosvm},
main,
memory::{MemoryTracker, PageTable, MEMORY, PAGE_SIZE, SIZE_128KB},
diff --git a/vmbase/Android.bp b/vmbase/Android.bp
index 07e1b4c..236a895 100644
--- a/vmbase/Android.bp
+++ b/vmbase/Android.bp
@@ -79,13 +79,13 @@
"libbuddy_system_allocator",
"libcstr",
"libfdtpci",
- "libhyp",
"liblibfdt",
"liblog_rust_nostd",
"libonce_cell_nostd",
"libsmccc",
"libspin_nostd",
"libtinyvec_nostd",
+ "libuuid_nostd",
"libvirtio_drivers",
"libzerocopy_nostd",
"libzeroize_nostd",
diff --git a/vmbase/src/entry.rs b/vmbase/src/entry.rs
index b19efce..8b1d7c6 100644
--- a/vmbase/src/entry.rs
+++ b/vmbase/src/entry.rs
@@ -15,17 +15,16 @@
//! Rust entry point.
use crate::{
- bionic, console, heap, logger,
+ bionic, console, heap, hyp, logger,
power::{reboot, shutdown},
rand,
};
use core::mem::size_of;
-use hyp::{self, get_mmio_guard};
fn try_console_init() -> Result<(), hyp::Error> {
console::init();
- if let Some(mmio_guard) = get_mmio_guard() {
+ if let Some(mmio_guard) = hyp::get_mmio_guard() {
mmio_guard.enroll()?;
mmio_guard.validate_granule()?;
mmio_guard.map(console::BASE_ADDRESS)?;
diff --git a/libs/hyp/src/lib.rs b/vmbase/src/hyp.rs
similarity index 95%
rename from libs/hyp/src/lib.rs
rename to vmbase/src/hyp.rs
index 2e19bbc..103d28f 100644
--- a/libs/hyp/src/lib.rs
+++ b/vmbase/src/hyp.rs
@@ -14,10 +14,6 @@
//! This library provides wrappers around various hypervisor backends.
-#![no_std]
-
-extern crate alloc;
-
mod error;
mod hypervisor;
mod util;
diff --git a/libs/hyp/src/error.rs b/vmbase/src/hyp/error.rs
similarity index 100%
rename from libs/hyp/src/error.rs
rename to vmbase/src/hyp/error.rs
diff --git a/libs/hyp/src/hypervisor.rs b/vmbase/src/hyp/hypervisor.rs
similarity index 100%
rename from libs/hyp/src/hypervisor.rs
rename to vmbase/src/hyp/hypervisor.rs
diff --git a/libs/hyp/src/hypervisor/common.rs b/vmbase/src/hyp/hypervisor/common.rs
similarity index 98%
rename from libs/hyp/src/hypervisor/common.rs
rename to vmbase/src/hyp/hypervisor/common.rs
index f4973e5..de564a8 100644
--- a/libs/hyp/src/hypervisor/common.rs
+++ b/vmbase/src/hyp/hypervisor/common.rs
@@ -14,7 +14,7 @@
//! This module regroups some common traits shared by all the hypervisors.
-use crate::{util::SIZE_4KB, Error, Result};
+use crate::hyp::{util::SIZE_4KB, Error, Result};
/// Expected MMIO guard granule size, validated during MMIO guard initialization.
pub const MMIO_GUARD_GRANULE_SIZE: usize = SIZE_4KB;
diff --git a/libs/hyp/src/hypervisor/geniezone.rs b/vmbase/src/hyp/hypervisor/geniezone.rs
similarity index 98%
rename from libs/hyp/src/hypervisor/geniezone.rs
rename to vmbase/src/hyp/hypervisor/geniezone.rs
index 86e5361..69ecf41 100644
--- a/libs/hyp/src/hypervisor/geniezone.rs
+++ b/vmbase/src/hyp/hypervisor/geniezone.rs
@@ -17,7 +17,7 @@
use core::fmt::{self, Display, Formatter};
use super::{Hypervisor, MemSharingHypervisor, MmioGuardedHypervisor};
-use crate::{util::page_address, Error, Result};
+use crate::hyp::{util::page_address, Error, Result};
use smccc::{
error::{positive_or_error_64, success_or_error_64},
diff --git a/libs/hyp/src/hypervisor/gunyah.rs b/vmbase/src/hyp/hypervisor/gunyah.rs
similarity index 100%
rename from libs/hyp/src/hypervisor/gunyah.rs
rename to vmbase/src/hyp/hypervisor/gunyah.rs
diff --git a/libs/hyp/src/hypervisor/kvm.rs b/vmbase/src/hyp/hypervisor/kvm.rs
similarity index 98%
rename from libs/hyp/src/hypervisor/kvm.rs
rename to vmbase/src/hyp/hypervisor/kvm.rs
index c0cafbe..8b59234 100644
--- a/libs/hyp/src/hypervisor/kvm.rs
+++ b/vmbase/src/hyp/hypervisor/kvm.rs
@@ -17,7 +17,7 @@
use core::fmt::{self, Display, Formatter};
use super::{DeviceAssigningHypervisor, Hypervisor, MemSharingHypervisor, MmioGuardedHypervisor};
-use crate::{util::page_address, Error, Result};
+use crate::hyp::{util::page_address, Error, Result};
use smccc::{
error::{positive_or_error_64, success_or_error_32, success_or_error_64},
diff --git a/libs/hyp/src/util.rs b/vmbase/src/hyp/util.rs
similarity index 100%
rename from libs/hyp/src/util.rs
rename to vmbase/src/hyp/util.rs
diff --git a/vmbase/src/lib.rs b/vmbase/src/lib.rs
index 431e899..630834b 100644
--- a/vmbase/src/lib.rs
+++ b/vmbase/src/lib.rs
@@ -26,6 +26,7 @@
pub mod fdt;
pub mod heap;
mod hvc;
+pub mod hyp;
pub mod layout;
pub mod linker;
pub mod logger;
diff --git a/vmbase/src/memory/error.rs b/vmbase/src/memory/error.rs
index 273db56..1af8f8c 100644
--- a/vmbase/src/memory/error.rs
+++ b/vmbase/src/memory/error.rs
@@ -16,6 +16,8 @@
use core::fmt;
+use crate::hyp;
+
/// Errors for MemoryTracker operations.
#[derive(Debug, Clone)]
pub enum MemoryTrackerError {
diff --git a/vmbase/src/memory/shared.rs b/vmbase/src/memory/shared.rs
index dd433d4..8fda7a6 100644
--- a/vmbase/src/memory/shared.rs
+++ b/vmbase/src/memory/shared.rs
@@ -20,6 +20,7 @@
use super::util::{page_4kb_of, virt_to_phys};
use crate::dsb;
use crate::exceptions::HandleExceptionError;
+use crate::hyp::{self, get_mem_sharer, get_mmio_guard, MMIO_GUARD_GRANULE_SIZE};
use crate::util::RangeExt as _;
use aarch64_paging::paging::{
Attributes, Descriptor, MemoryRegion as VaRange, VirtualAddress, BITS_PER_LEVEL, PAGE_SIZE,
@@ -35,7 +36,6 @@
use core::ops::Range;
use core::ptr::NonNull;
use core::result;
-use hyp::{get_mem_sharer, get_mmio_guard, MMIO_GUARD_GRANULE_SIZE};
use log::{debug, error, trace};
use once_cell::race::OnceBox;
use spin::mutex::SpinMutex;