Skip to content

Commit 814d877

Browse files
committed
devices: reintroduce mem in VirtioDevice activate
Instead of passing memory at device creation, bring it in during device activation. This enables future scenarios where devices can be created prior to guest memory configuration. Signed-off-by: Adrian Catangiu <acatan@amazon.com>
1 parent b29497f commit 814d877

File tree

6 files changed

+18
-18
lines changed

6 files changed

+18
-18
lines changed

src/devices/src/virtio/block/device.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ impl VirtioDevice for Block {
317317
self.device_activated
318318
}
319319

320-
fn activate(&mut self) -> ActivateResult {
320+
fn activate(&mut self, _: GuestMemoryMmap) -> ActivateResult {
321321
self.device_activated = true;
322322
Ok(())
323323
}
@@ -495,7 +495,7 @@ mod tests {
495495
let mem = block.mem.clone();
496496
let vq = VirtQueue::new(GuestAddress(0), &mem, 16);
497497
block.set_queue(0, vq.create_queue());
498-
block.activate().unwrap();
498+
block.activate(mem.clone()).unwrap();
499499
initialize_virtqueue(&vq);
500500

501501
let request_type_addr = GuestAddress(vq.dtable[0].addr.get());
@@ -520,7 +520,7 @@ mod tests {
520520
let mem = block.mem.clone();
521521
let vq = VirtQueue::new(GuestAddress(0), &mem, 16);
522522
block.set_queue(0, vq.create_queue());
523-
block.activate().unwrap();
523+
block.activate(mem.clone()).unwrap();
524524
initialize_virtqueue(&vq);
525525

526526
let request_type_addr = GuestAddress(vq.dtable[0].addr.get());
@@ -578,7 +578,7 @@ mod tests {
578578
let mem = block.mem.clone();
579579
let vq = VirtQueue::new(GuestAddress(0), &mem, 16);
580580
block.set_queue(0, vq.create_queue());
581-
block.activate().unwrap();
581+
block.activate(mem.clone()).unwrap();
582582
initialize_virtqueue(&vq);
583583

584584
let request_type_addr = GuestAddress(vq.dtable[0].addr.get());
@@ -608,7 +608,7 @@ mod tests {
608608
let mem = block.mem.clone();
609609
let vq = VirtQueue::new(GuestAddress(0), &mem, 16);
610610
block.set_queue(0, vq.create_queue());
611-
block.activate().unwrap();
611+
block.activate(mem.clone()).unwrap();
612612
initialize_virtqueue(&vq);
613613

614614
let request_type_addr = GuestAddress(vq.dtable[0].addr.get());
@@ -667,7 +667,7 @@ mod tests {
667667
let mem = block.mem.clone();
668668
let vq = VirtQueue::new(GuestAddress(0), &mem, 16);
669669
block.set_queue(0, vq.create_queue());
670-
block.activate().unwrap();
670+
block.activate(mem.clone()).unwrap();
671671
initialize_virtqueue(&vq);
672672

673673
let request_type_addr = GuestAddress(vq.dtable[0].addr.get());
@@ -710,7 +710,7 @@ mod tests {
710710
let mem = block.mem.clone();
711711
let vq = VirtQueue::new(GuestAddress(0), &mem, 16);
712712
block.set_queue(0, vq.create_queue());
713-
block.activate().unwrap();
713+
block.activate(mem.clone()).unwrap();
714714
initialize_virtqueue(&vq);
715715

716716
let request_type_addr = GuestAddress(vq.dtable[0].addr.get());
@@ -776,7 +776,7 @@ mod tests {
776776
let mem = block.mem.clone();
777777
let vq = VirtQueue::new(GuestAddress(0), &mem, 16);
778778
block.set_queue(0, vq.create_queue());
779-
block.activate().unwrap();
779+
block.activate(mem.clone()).unwrap();
780780
initialize_virtqueue(&vq);
781781

782782
let request_type_addr = GuestAddress(vq.dtable[0].addr.get());
@@ -841,7 +841,7 @@ mod tests {
841841
let mem = block.mem.clone();
842842
let vq = VirtQueue::new(GuestAddress(0), &mem, 16);
843843
block.set_queue(0, vq.create_queue());
844-
block.activate().unwrap();
844+
block.activate(mem.clone()).unwrap();
845845
initialize_virtqueue(&vq);
846846

847847
let request_type_addr = GuestAddress(vq.dtable[0].addr.get());

src/devices/src/virtio/device.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use std::sync::{atomic::AtomicUsize, Arc};
1010
use super::{ActivateResult, Queue};
1111
use crate::virtio::AsAny;
1212
use utils::eventfd::EventFd;
13+
use vm_memory::GuestMemoryMmap;
1314

1415
/// Trait for virtio devices to be driven by a virtio transport.
1516
///
@@ -87,7 +88,7 @@ pub trait VirtioDevice: AsAny + Send {
8788
fn write_config(&mut self, offset: u64, data: &[u8]);
8889

8990
/// Performs the formal activation for a device, which can be verified also with `is_activated`.
90-
fn activate(&mut self) -> ActivateResult;
91+
fn activate(&mut self, mem: GuestMemoryMmap) -> ActivateResult;
9192

9293
/// Checks if the resources of this device are activated.
9394
fn is_activated(&self) -> bool;

src/devices/src/virtio/mmio.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ impl MmioTransport {
179179
let device_activated = self.locked_device().is_activated();
180180
if !device_activated && self.are_queues_valid() {
181181
self.locked_device()
182-
.activate()
182+
.activate(self.mem.clone())
183183
.expect("Failed to activate device");
184184
}
185185
}
@@ -403,7 +403,7 @@ mod tests {
403403
self.acked_features = acked_features;
404404
}
405405

406-
fn activate(&mut self) -> ActivateResult {
406+
fn activate(&mut self, _: GuestMemoryMmap) -> ActivateResult {
407407
self.device_activated = true;
408408
Ok(())
409409
}

src/devices/src/virtio/net/device.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -679,7 +679,7 @@ impl VirtioDevice for Net {
679679
self.device_activated
680680
}
681681

682-
fn activate(&mut self) -> ActivateResult {
682+
fn activate(&mut self, _: GuestMemoryMmap) -> ActivateResult {
683683
self.device_activated = true;
684684
Ok(())
685685
}
@@ -812,7 +812,7 @@ mod tests {
812812
self.queues.clear();
813813
self.queues.push(rxq);
814814
self.queues.push(txq);
815-
self.activate().unwrap();
815+
self.activate(self.mem.clone()).unwrap();
816816
}
817817
}
818818

src/devices/src/virtio/vsock/device.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ where
252252
);
253253
}
254254

255-
fn activate(&mut self) -> ActivateResult {
255+
fn activate(&mut self, _: GuestMemoryMmap) -> ActivateResult {
256256
if self.queues.len() != defs::NUM_QUEUES {
257257
error!(
258258
"Cannot perform activate. Expected {} queue(s), got {}",
@@ -351,6 +351,6 @@ mod tests {
351351
// }
352352

353353
// Test a correct activation.
354-
ctx.device.activate().unwrap();
354+
ctx.device.activate(ctx.mem.clone()).unwrap();
355355
}
356356
}

src/vmm/src/device_manager/mmio.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ mod tests {
389389
let _ = data;
390390
}
391391

392-
fn activate(&mut self) -> ActivateResult {
392+
fn activate(&mut self, _: GuestMemoryMmap) -> ActivateResult {
393393
Ok(())
394394
}
395395

@@ -471,7 +471,6 @@ mod tests {
471471
let mut dummy = DummyDevice::new();
472472
assert_eq!(dummy.device_type(), 0);
473473
assert_eq!(dummy.queues().len(), QUEUE_SIZES.len());
474-
dummy.activate().unwrap();
475474
}
476475

477476
#[test]

0 commit comments

Comments
 (0)