mirror of
https://github.com/edera-dev/krata.git
synced 2025-08-03 13:11:31 +00:00
feature(xen): dynamic platform architecture (#194)
* wip hvm * feat: move platform stuff all into it's own thing * hvm work * more hvm work * more hvm work * feat: rework to support multiple platforms * hvm nonredist * more hvm work * more hvm work * pvh work * work on loading cmdline * implement initrd loading for pvh * partially working pvh support * fix merge issues * pvh works! * swap over to pv support * remove old kernel stuff * fix support for pv * pvh is gone for now * fix(runtime): debug should be respected * fix(xen): arm64 is currently unsupported, treat it as such at runtime * fix(examples): use architecture cfg for boot example * fix(x86): use IOMMU only when needed for passthrough * chore(build): print kernel architecture during fetch
This commit is contained in:
@ -375,7 +375,10 @@ impl KrataChannelBackendProcessor {
|
||||
};
|
||||
|
||||
ring_ref = self.use_reserved_ref.unwrap_or(ring_ref);
|
||||
|
||||
debug!(
|
||||
"channel backend for domain {} channel {}: ring-ref={} port={}",
|
||||
self.domid, self.id, ring_ref, port,
|
||||
);
|
||||
break (ring_ref, port);
|
||||
}
|
||||
}
|
||||
@ -389,14 +392,24 @@ impl KrataChannelBackendProcessor {
|
||||
self.store
|
||||
.write_string(format!("{}/state", self.backend), "4")
|
||||
.await?;
|
||||
let memory = self.gnttab.map_grant_refs(
|
||||
vec![GrantRef {
|
||||
domid: self.domid,
|
||||
reference: ring_ref as u32,
|
||||
}],
|
||||
true,
|
||||
true,
|
||||
)?;
|
||||
let memory = self
|
||||
.gnttab
|
||||
.map_grant_refs(
|
||||
vec![GrantRef {
|
||||
domid: self.domid,
|
||||
reference: ring_ref as u32,
|
||||
}],
|
||||
true,
|
||||
true,
|
||||
)
|
||||
.map_err(|e| {
|
||||
anyhow!(
|
||||
"failed to map grant ref {} for domid {}: {}",
|
||||
ring_ref,
|
||||
self.domid,
|
||||
e
|
||||
)
|
||||
})?;
|
||||
let mut channel = self.evtchn.bind(self.domid, port).await?;
|
||||
unsafe {
|
||||
let buffer = self.read_output_buffer(channel.local_port, &memory).await?;
|
||||
|
@ -138,10 +138,10 @@ impl GuestLauncher {
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let cmdline_options = [
|
||||
if request.debug { "debug" } else { "quiet" },
|
||||
"elevator=noop",
|
||||
];
|
||||
let mut cmdline_options = ["console=hvc0"].to_vec();
|
||||
if !request.debug {
|
||||
cmdline_options.push("quiet");
|
||||
}
|
||||
let cmdline = cmdline_options.join(" ");
|
||||
|
||||
let guest_mac_string = container_mac.to_string().replace('-', ":");
|
||||
@ -227,7 +227,7 @@ impl GuestLauncher {
|
||||
kernel: request.kernel,
|
||||
initrd: request.initrd,
|
||||
cmdline,
|
||||
use_console_backend: Some("krata-console".to_string()),
|
||||
swap_console_backend: Some("krata-console".to_string()),
|
||||
disks,
|
||||
channels: vec![DomainChannel {
|
||||
typ: "krata-channel".to_string(),
|
||||
|
@ -21,6 +21,12 @@ pub mod channel;
|
||||
pub mod ip;
|
||||
pub mod launch;
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
type RuntimePlatform = xenclient::x86pv::X86PvPlatform;
|
||||
|
||||
#[cfg(not(target_arch = "x86_64"))]
|
||||
type RuntimePlatform = xenclient::unsupported::UnsupportedPlatform;
|
||||
|
||||
pub struct GuestLoopInfo {
|
||||
pub device: String,
|
||||
pub file: String,
|
||||
@ -49,13 +55,13 @@ pub struct GuestInfo {
|
||||
#[derive(Clone)]
|
||||
pub struct RuntimeContext {
|
||||
pub autoloop: AutoLoop,
|
||||
pub xen: XenClient,
|
||||
pub xen: XenClient<RuntimePlatform>,
|
||||
pub ipvendor: IpVendor,
|
||||
}
|
||||
|
||||
impl RuntimeContext {
|
||||
pub async fn new(host_uuid: Uuid) -> Result<Self> {
|
||||
let xen = XenClient::open(0).await?;
|
||||
let xen = XenClient::new(0, RuntimePlatform::new()).await?;
|
||||
let ipv4_network = Ipv4Network::new(Ipv4Addr::new(10, 75, 80, 0), 24)?;
|
||||
let ipv6_network = Ipv6Network::from_str("fdd4:1476:6c7e::/48")?;
|
||||
let ipvend =
|
||||
|
Reference in New Issue
Block a user