From a73b6522c41a7fab77417e1b471b79d2fcd29b92 Mon Sep 17 00:00:00 2001 From: Dylan Reid Date: Wed, 6 Jan 2021 15:22:15 -0800 Subject: [PATCH] virtio: switch to accessor for msix config Convert the pub member to private and provide an accessor. Prevents the spread of poking in to a private member from vhost. Change-Id: Ib2070e990dc91c532164cc83f5af72bfbc9b2e89 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2795283 Tested-by: kokoro Commit-Queue: Dylan Reid Reviewed-by: Daniel Verkamp Reviewed-by: Keiichi Watanabe --- devices/src/virtio/interrupt.rs | 7 ++++++- devices/src/virtio/vhost/user/handler.rs | 8 ++++---- devices/src/virtio/vhost/worker.rs | 4 ++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/devices/src/virtio/interrupt.rs b/devices/src/virtio/interrupt.rs index 2ddff08f6e..dac8aaad0c 100644 --- a/devices/src/virtio/interrupt.rs +++ b/devices/src/virtio/interrupt.rs @@ -13,7 +13,7 @@ pub struct Interrupt { interrupt_status: Arc, interrupt_evt: Event, interrupt_resample_evt: Event, - pub msix_config: Option>>, + msix_config: Option>>, config_msix_vector: u16, } @@ -91,4 +91,9 @@ impl Interrupt { pub fn get_resample_evt(&self) -> &Event { &self.interrupt_resample_evt } + + /// Get a reference to the msix configuration + pub fn get_msix_config(&self) -> &Option>> { + &self.msix_config + } } diff --git a/devices/src/virtio/vhost/user/handler.rs b/devices/src/virtio/vhost/user/handler.rs index 14fdb16fcc..f3797ae8e4 100644 --- a/devices/src/virtio/vhost/user/handler.rs +++ b/devices/src/virtio/vhost/user/handler.rs @@ -173,11 +173,11 @@ impl VhostUserHandler { .set_vring_base(queue_index, 0) .map_err(Error::SetVringBase)?; - let msix_config = interrupt - .msix_config + let msix_config_opt = interrupt + .get_msix_config() .as_ref() - .ok_or(Error::MsixConfigUnavailable)? - .lock(); + .ok_or(Error::MsixConfigUnavailable)?; + let msix_config = msix_config_opt.lock(); let irqfd = msix_config .get_irqfd(queue.vector as usize) .ok_or(Error::MsixIrqfdUnavailable)?; diff --git a/devices/src/virtio/vhost/worker.rs b/devices/src/virtio/vhost/worker.rs index c166c933d4..225d880e12 100644 --- a/devices/src/virtio/vhost/worker.rs +++ b/devices/src/virtio/vhost/worker.rs @@ -199,7 +199,7 @@ impl Worker { // with the msix. Due to this, cannot use the direct irq fd but // should fall back to indirect irq fd. if self.response_tube.is_some() { - if let Some(msix_config) = &self.interrupt.msix_config { + if let Some(msix_config) = self.interrupt.get_msix_config() { let msix_config = msix_config.lock(); let msix_masked = msix_config.masked(); if msix_masked { @@ -227,7 +227,7 @@ impl Worker { } fn set_vring_calls(&self) -> Result<()> { - if let Some(msix_config) = &self.interrupt.msix_config { + if let Some(msix_config) = self.interrupt.get_msix_config() { let msix_config = msix_config.lock(); if msix_config.masked() { for (queue_index, _) in self.queues.iter().enumerate() {