From fdac5ede468e0fddfe527d6108430ee932b02fc3 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Fri, 8 Mar 2019 16:56:14 -0800 Subject: edition: Use dyn syntax for trait objects Found by running: `cargo rustc -- -D bare_trait_objects` Bare trait objects like `&Trait` and `Box` are soft-deprecated in 2018 edition and will start warning at some point. As part of this, I replaced `Box` with `Box` because the 'static bound is implied for boxed trait objects. TEST=cargo check --all-features TEST=cargo check --target aarch64-unknown-linux-gnu TEST=local kokoro Change-Id: I41c4f13530bece8a34a8ed1c1afd7035b8f86f19 Reviewed-on: https://chromium-review.googlesource.com/1513059 Commit-Ready: ChromeOS CL Exonerator Bot Tested-by: David Tolnay Tested-by: kokoro Reviewed-by: David Tolnay --- devices/src/virtio/gpu/backend.rs | 2 +- devices/src/virtio/virtio_device.rs | 2 +- devices/src/virtio/virtio_pci_common_config.rs | 34 +++++++++++++------------- devices/src/virtio/virtio_pci_device.rs | 8 +++--- devices/src/virtio/wl.rs | 11 +++++---- 5 files changed, 29 insertions(+), 28 deletions(-) (limited to 'devices/src/virtio') diff --git a/devices/src/virtio/gpu/backend.rs b/devices/src/virtio/gpu/backend.rs index ea7faff..8d4d406 100644 --- a/devices/src/virtio/gpu/backend.rs +++ b/devices/src/virtio/gpu/backend.rs @@ -312,7 +312,7 @@ pub struct Backend { display: Rc>, device: Device, renderer: Renderer, - resources: Map>, + resources: Map>, contexts: Map, scanout_surface: Option, cursor_surface: Option, diff --git a/devices/src/virtio/virtio_device.rs b/devices/src/virtio/virtio_device.rs index f497146..d5d5266 100644 --- a/devices/src/virtio/virtio_device.rs +++ b/devices/src/virtio/virtio_device.rs @@ -82,7 +82,7 @@ pub trait VirtioDevice: Send { } /// Returns any additional capabiltiies required by the device. - fn get_device_caps(&self) -> Vec> { + fn get_device_caps(&self) -> Vec> { Vec::new() } } diff --git a/devices/src/virtio/virtio_pci_common_config.rs b/devices/src/virtio/virtio_pci_common_config.rs index fb428dd..59b2b0a 100644 --- a/devices/src/virtio/virtio_pci_common_config.rs +++ b/devices/src/virtio/virtio_pci_common_config.rs @@ -43,7 +43,7 @@ impl VirtioPciCommonConfig { offset: u64, data: &mut [u8], queues: &mut Vec, - device: &mut Box, + device: &mut dyn VirtioDevice, ) { match data.len() { 1 => { @@ -71,7 +71,7 @@ impl VirtioPciCommonConfig { offset: u64, data: &[u8], queues: &mut Vec, - device: &mut Box, + device: &mut dyn VirtioDevice, ) { match data.len() { 1 => self.write_common_config_byte(offset, data[0]), @@ -133,7 +133,7 @@ impl VirtioPciCommonConfig { } } - fn read_common_config_dword(&self, offset: u64, device: &Box) -> u32 { + fn read_common_config_dword(&self, offset: u64, device: &dyn VirtioDevice) -> u32 { match offset { 0x00 => self.device_feature_select, 0x04 => { @@ -155,7 +155,7 @@ impl VirtioPciCommonConfig { offset: u64, value: u32, queues: &mut Vec, - device: &mut Box, + device: &mut dyn VirtioDevice, ) { fn hi(v: &mut GuestAddress, x: u32) { *v = (*v & 0xffffffff) | ((x as u64) << 32) @@ -267,41 +267,41 @@ mod tests { queue_select: 0xff, }; - let mut dev: Box = Box::new(DummyDevice(0)); + let dev = &mut DummyDevice(0) as &mut dyn VirtioDevice; let mut queues = Vec::new(); // Can set all bits of driver_status. - regs.write(0x14, &[0x55], &mut queues, &mut dev); + regs.write(0x14, &[0x55], &mut queues, dev); let mut read_back = vec![0x00]; - regs.read(0x14, &mut read_back, &mut queues, &mut dev); + regs.read(0x14, &mut read_back, &mut queues, dev); assert_eq!(read_back[0], 0x55); // The config generation register is read only. - regs.write(0x15, &[0xaa], &mut queues, &mut dev); + regs.write(0x15, &[0xaa], &mut queues, dev); let mut read_back = vec![0x00]; - regs.read(0x15, &mut read_back, &mut queues, &mut dev); + regs.read(0x15, &mut read_back, &mut queues, dev); assert_eq!(read_back[0], 0x55); // Device features is read-only and passed through from the device. - regs.write(0x04, &[0, 0, 0, 0], &mut queues, &mut dev); + regs.write(0x04, &[0, 0, 0, 0], &mut queues, dev); let mut read_back = vec![0, 0, 0, 0]; - regs.read(0x04, &mut read_back, &mut queues, &mut dev); + regs.read(0x04, &mut read_back, &mut queues, dev); assert_eq!(LittleEndian::read_u32(&read_back), DUMMY_FEATURES as u32); // Feature select registers are read/write. - regs.write(0x00, &[1, 2, 3, 4], &mut queues, &mut dev); + regs.write(0x00, &[1, 2, 3, 4], &mut queues, dev); let mut read_back = vec![0, 0, 0, 0]; - regs.read(0x00, &mut read_back, &mut queues, &mut dev); + regs.read(0x00, &mut read_back, &mut queues, dev); assert_eq!(LittleEndian::read_u32(&read_back), 0x0403_0201); - regs.write(0x08, &[1, 2, 3, 4], &mut queues, &mut dev); + regs.write(0x08, &[1, 2, 3, 4], &mut queues, dev); let mut read_back = vec![0, 0, 0, 0]; - regs.read(0x08, &mut read_back, &mut queues, &mut dev); + regs.read(0x08, &mut read_back, &mut queues, dev); assert_eq!(LittleEndian::read_u32(&read_back), 0x0403_0201); // 'queue_select' can be read and written. - regs.write(0x16, &[0xaa, 0x55], &mut queues, &mut dev); + regs.write(0x16, &[0xaa, 0x55], &mut queues, dev); let mut read_back = vec![0x00, 0x00]; - regs.read(0x16, &mut read_back, &mut queues, &mut dev); + regs.read(0x16, &mut read_back, &mut queues, dev); assert_eq!(read_back[0], 0xaa); assert_eq!(read_back[1], 0x55); } diff --git a/devices/src/virtio/virtio_pci_device.rs b/devices/src/virtio/virtio_pci_device.rs index 4ba5437..27ab5fb 100644 --- a/devices/src/virtio/virtio_pci_device.rs +++ b/devices/src/virtio/virtio_pci_device.rs @@ -149,7 +149,7 @@ const VIRTIO_PCI_DEVICE_ID_BASE: u16 = 0x1040; // Add to device type to get devi pub struct VirtioPciDevice { config_regs: PciConfiguration, - device: Box, + device: Box, device_activated: bool, interrupt_status: Arc, @@ -165,7 +165,7 @@ pub struct VirtioPciDevice { impl VirtioPciDevice { /// Constructs a new PCI transport for the given virtio device. - pub fn new(mem: GuestMemory, device: Box) -> Result { + pub fn new(mem: GuestMemory, device: Box) -> Result { let mut queue_evts = Vec::new(); for _ in device.queue_max_sizes().iter() { queue_evts.push(EventFd::new()?) @@ -414,7 +414,7 @@ impl PciDevice for VirtioPciDevice { o - COMMON_CONFIG_BAR_OFFSET, data, &mut self.queues, - &mut self.device, + self.device.as_mut(), ) } o if ISR_CONFIG_BAR_OFFSET <= o && o < ISR_CONFIG_BAR_OFFSET + ISR_CONFIG_SIZE => { @@ -448,7 +448,7 @@ impl PciDevice for VirtioPciDevice { o - COMMON_CONFIG_BAR_OFFSET, data, &mut self.queues, - &mut self.device, + self.device.as_mut(), ) } o if ISR_CONFIG_BAR_OFFSET <= o && o < ISR_CONFIG_BAR_OFFSET + ISR_CONFIG_SIZE => { diff --git a/devices/src/virtio/wl.rs b/devices/src/virtio/wl.rs index a9498fe..870b5ea 100644 --- a/devices/src/virtio/wl.rs +++ b/devices/src/virtio/wl.rs @@ -32,6 +32,7 @@ use std::cell::RefCell; use std::collections::btree_map::Entry; use std::collections::{BTreeMap as Map, BTreeSet as Set, VecDeque}; use std::convert::From; +use std::error::Error as StdError; use std::ffi::CStr; use std::fmt::{self, Display}; use std::fs::File; @@ -645,7 +646,7 @@ enum WlResp<'a> { VfdHup { id: u32, }, - Err(Box), + Err(Box), OutOfMemory, InvalidId, InvalidType, @@ -891,11 +892,11 @@ impl WlVfd { } // The FD that is used for polling for events on this VFD. - fn poll_fd(&self) -> Option<&AsRawFd> { - self.socket + fn poll_fd(&self) -> Option<&dyn AsRawFd> { + self.socket.as_ref().map(|s| s as &dyn AsRawFd).or(self + .local_pipe .as_ref() - .map(|s| s as &AsRawFd) - .or(self.local_pipe.as_ref().map(|&(_, ref p)| p as &AsRawFd)) + .map(|&(_, ref p)| p as &dyn AsRawFd)) } // Sends data/files from the guest to the host over this VFD. -- cgit 1.4.1