diff --git a/vm-virtio/src/device.rs b/vm-virtio/src/device.rs index 236b7d5ca..7a1fa0050 100644 --- a/vm-virtio/src/device.rs +++ b/vm-virtio/src/device.rs @@ -112,6 +112,15 @@ pub trait DmaRemapping: Send + Sync { fn translate(&self, id: u32, addr: u64) -> std::result::Result; } +#[macro_export] +macro_rules! virtio_pausable_trait_definition { + () => { + trait VirtioPausable { + fn virtio_pause(&mut self) -> std::result::Result<(), MigratableError>; + fn virtio_resume(&mut self) -> std::result::Result<(), MigratableError>; + } + }; +} #[macro_export] macro_rules! virtio_pausable_trait_inner { () => { @@ -151,10 +160,7 @@ macro_rules! virtio_pausable_trait_inner { #[macro_export] macro_rules! virtio_pausable_trait { ($type:ident) => { - trait VirtioPausable { - fn virtio_pause(&mut self) -> std::result::Result<(), MigratableError>; - fn virtio_resume(&mut self) -> std::result::Result<(), MigratableError>; - } + virtio_pausable_trait_definition!(); impl VirtioPausable for $type { virtio_pausable_trait_inner!(); @@ -162,10 +168,7 @@ macro_rules! virtio_pausable_trait { }; ($type:ident, T: $($bounds:tt)+) => { - trait VirtioPausable { - fn virtio_pause(&mut self) -> std::result::Result<(), MigratableError>; - fn virtio_resume(&mut self) -> std::result::Result<(), MigratableError>; - } + virtio_pausable_trait_definition!(); impl VirtioPausable for $type { virtio_pausable_trait_inner!(); @@ -173,19 +176,26 @@ macro_rules! virtio_pausable_trait { }; } +#[macro_export] +macro_rules! virtio_pausable_inner { + ($type:ident) => { + fn pause(&mut self) -> result::Result<(), MigratableError> { + self.virtio_pause() + } + + fn resume(&mut self) -> result::Result<(), MigratableError> { + self.virtio_resume() + } + }; +} + #[macro_export] macro_rules! virtio_pausable { ($type:ident) => { virtio_pausable_trait!($type); impl Pausable for $type { - fn pause(&mut self) -> result::Result<(), MigratableError> { - self.virtio_pause() - } - - fn resume(&mut self) -> result::Result<(), MigratableError> { - self.virtio_resume() - } + virtio_pausable_inner!($type); } }; @@ -194,13 +204,7 @@ macro_rules! virtio_pausable { virtio_pausable_trait!($type, T: $($bounds)+); impl Pausable for $type { - fn pause(&mut self) -> result::Result<(), MigratableError> { - self.virtio_pause() - } - - fn resume(&mut self) -> result::Result<(), MigratableError> { - self.virtio_resume() - } + virtio_pausable_inner!($type); } }; }