Merge remote-tracking branch 'upstream/master' into HEAD
Pull in warning fixes for Rust 1.53+.
BUG=None
TEST=cargo test --all-features
Change-Id: Idd7a8d5bceee304e7667c62e0f878c373ea47929
diff --git a/Cargo.toml b/Cargo.toml
index a9bfe83..b5cb22d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "vhost"
+name = "vmm_vhost"
version = "0.1.0"
keywords = ["vhost", "vhost-user", "virtio", "vdpa"]
description = "a pure rust library for vdpa, vhost and vhost-user"
@@ -21,10 +21,13 @@
[dependencies]
bitflags = ">=1.0.1"
libc = ">=0.2.39"
-
-vmm-sys-util = ">=0.3.1"
+sys_util = "*"
+tempfile = "*"
vm-memory = { version = "0.2.0", optional = true }
[dev-dependencies]
-tempfile = ">=3.2.0"
vm-memory = { version = "0.2.0", features=["backend-mmap"] }
+
+[patch.crates-io]
+sys_util = { path = "../../../platform/crosvm/sys_util" } # ignored by ebuild
+tempfile = { path = "../../../platform/crosvm/tempfile" } # ignored by ebuild
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..3ec308a
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,4 @@
+chirantan@chromium.org
+dgreid@chromium.org
+keiichiw@chromium.org
+woodychow@chromium.org
diff --git a/PRESUBMIT.cfg b/PRESUBMIT.cfg
new file mode 100644
index 0000000..e52636e
--- /dev/null
+++ b/PRESUBMIT.cfg
@@ -0,0 +1,6 @@
+[Hook Overrides]
+cargo_clippy_check: true
+
+[Hook Overrides Options]
+cargo_clippy_check:
+ --project=.
diff --git a/src/backend.rs b/src/backend.rs
index 89fde50..1ae306f 100644
--- a/src/backend.rs
+++ b/src/backend.rs
@@ -13,7 +13,7 @@
use std::os::unix::io::RawFd;
use std::sync::RwLock;
-use vmm_sys_util::eventfd::EventFd;
+use sys_util::EventFd;
use super::Result;
@@ -470,7 +470,7 @@
b.set_vring_base(1, 2).unwrap();
assert_eq!(b.get_vring_base(1).unwrap(), 2);
- let eventfd = EventFd::new(0).unwrap();
+ let eventfd = EventFd::new().unwrap();
b.set_vring_call(1, &eventfd).unwrap();
b.set_vring_kick(1, &eventfd).unwrap();
b.set_vring_err(1, &eventfd).unwrap();
diff --git a/src/lib.rs b/src/lib.rs
index 83d8782..db1680a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -35,7 +35,7 @@
#[cfg_attr(feature = "vhost-user", macro_use)]
extern crate bitflags;
#[cfg_attr(feature = "vhost-kern", macro_use)]
-extern crate vmm_sys_util;
+extern crate sys_util;
mod backend;
pub use backend::*;
diff --git a/src/vhost_kern/mod.rs b/src/vhost_kern/mod.rs
index f82cbfc..5daca51 100644
--- a/src/vhost_kern/mod.rs
+++ b/src/vhost_kern/mod.rs
@@ -13,9 +13,9 @@
use std::os::unix::io::{AsRawFd, RawFd};
+use sys_util::ioctl::{ioctl, ioctl_with_mut_ref, ioctl_with_ptr, ioctl_with_ref};
+use sys_util::EventFd;
use vm_memory::{Address, GuestAddress, GuestAddressSpace, GuestMemory, GuestUsize};
-use vmm_sys_util::eventfd::EventFd;
-use vmm_sys_util::ioctl::{ioctl, ioctl_with_mut_ref, ioctl_with_ptr, ioctl_with_ref};
use super::{
Error, Result, VhostBackend, VhostUserMemoryRegionInfo, VringConfigData,
diff --git a/src/vhost_kern/vsock.rs b/src/vhost_kern/vsock.rs
index 65f89e4..388d500 100644
--- a/src/vhost_kern/vsock.rs
+++ b/src/vhost_kern/vsock.rs
@@ -11,8 +11,8 @@
use std::os::unix::fs::OpenOptionsExt;
use std::os::unix::io::{AsRawFd, RawFd};
+use sys_util::ioctl_with_ref;
use vm_memory::GuestAddressSpace;
-use vmm_sys_util::ioctl::ioctl_with_ref;
use super::vhost_binding::{VHOST_VSOCK_SET_GUEST_CID, VHOST_VSOCK_SET_RUNNING};
use super::{ioctl_result, Error, Result, VhostKernBackend};
@@ -78,13 +78,15 @@
#[cfg(test)]
mod tests {
+ use sys_util::EventFd;
use vm_memory::{GuestAddress, GuestMemory, GuestMemoryMmap};
- use vmm_sys_util::eventfd::EventFd;
use super::*;
use crate::{VhostBackend, VhostUserMemoryRegionInfo, VringConfigData};
+ // Ignore all tests because /dev/vhost-vsock is unavailable in Chrome OS chroot.
#[test]
+ #[ignore]
fn test_vsock_new_device() {
let m = GuestMemoryMmap::from_ranges(&[(GuestAddress(0), 0x10_0000)]).unwrap();
let vsock = Vsock::new(&m).unwrap();
@@ -95,6 +97,7 @@
}
#[test]
+ #[ignore]
fn test_vsock_is_valid() {
let m = GuestMemoryMmap::from_ranges(&[(GuestAddress(0), 0x10_0000)]).unwrap();
let vsock = Vsock::new(&m).unwrap();
@@ -119,6 +122,7 @@
}
#[test]
+ #[ignore]
fn test_vsock_ioctls() {
let m = GuestMemoryMmap::from_ranges(&[(GuestAddress(0), 0x10_0000)]).unwrap();
let vsock = Vsock::new(&m).unwrap();
@@ -153,7 +157,7 @@
vsock.set_log_base(0x4000, Some(1)).unwrap_err();
vsock.set_log_base(0x4000, None).unwrap();
- let eventfd = EventFd::new(0).unwrap();
+ let eventfd = EventFd::new().unwrap();
vsock.set_log_fd(eventfd.as_raw_fd()).unwrap();
vsock.set_vring_num(0, 32).unwrap();
diff --git a/src/vhost_user/connection.rs b/src/vhost_user/connection.rs
index ead84c5..ea8461a 100644
--- a/src/vhost_user/connection.rs
+++ b/src/vhost_user/connection.rs
@@ -14,7 +14,7 @@
use std::{mem, slice};
use libc::{c_void, iovec};
-use vmm_sys_util::sock_ctrl_msg::ScmSocket;
+use sys_util::ScmSocket;
use super::message::*;
use super::{Error, Result};
@@ -127,7 +127,7 @@
Some(rfds) => rfds,
_ => &[],
};
- self.sock.send_with_fds(iovs, rfds).map_err(Into::into)
+ self.sock.send_bufs_with_fds(iovs, rfds).map_err(Into::into)
}
/// Sends all bytes from scatter-gather vectors over the socket with optional attached file
@@ -297,11 +297,7 @@
/// * - SocketError: other socket related errors.
pub fn recv_data(&mut self, len: usize) -> Result<(usize, Vec<u8>)> {
let mut rbuf = vec![0u8; len];
- let mut iovs = [iovec {
- iov_base: rbuf.as_mut_ptr() as *mut c_void,
- iov_len: len,
- }];
- let (bytes, _) = self.sock.recv_with_fds(&mut iovs, &mut [])?;
+ let (bytes, _) = self.sock.recv_with_fds(&mut rbuf[..], &mut [])?;
Ok((bytes, rbuf))
}
@@ -325,7 +321,7 @@
/// * - SocketError: other socket related errors.
pub fn recv_into_iovec(&mut self, iovs: &mut [iovec]) -> Result<(usize, Option<Vec<File>>)> {
let mut fd_array = vec![0; MAX_ATTACHED_FD_ENTRIES];
- let (bytes, fds) = self.sock.recv_with_fds(iovs, &mut fd_array)?;
+ let (bytes, fds) = self.sock.recv_iovecs_with_fds(iovs, &mut fd_array)?;
let files = match fds {
0 => None,
@@ -609,19 +605,18 @@
mod tests {
use super::*;
use std::io::{Read, Seek, SeekFrom, Write};
- use vmm_sys_util::rand::rand_alphanumerics;
- use vmm_sys_util::tempfile::TempFile;
+ use std::os::unix::io::FromRawFd;
+ use tempfile::{tempfile, Builder, TempDir};
- fn temp_path() -> PathBuf {
- PathBuf::from(format!(
- "/tmp/vhost_test_{}",
- rand_alphanumerics(8).to_str().unwrap()
- ))
+ fn temp_dir() -> TempDir {
+ Builder::new().prefix("/tmp/vhost_test").tempdir().unwrap()
}
#[test]
fn create_listener() {
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let listener = Listener::new(&path, true).unwrap();
assert!(listener.as_raw_fd() > 0);
@@ -629,7 +624,9 @@
#[test]
fn accept_connection() {
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let listener = Listener::new(&path, true).unwrap();
listener.set_nonblocking(true).unwrap();
@@ -640,7 +637,9 @@
#[test]
fn send_data() {
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let listener = Listener::new(&path, true).unwrap();
listener.set_nonblocking(true).unwrap();
let mut master = Endpoint::<MasterReq>::connect(&path).unwrap();
@@ -666,14 +665,16 @@
#[test]
fn send_fd() {
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let listener = Listener::new(&path, true).unwrap();
listener.set_nonblocking(true).unwrap();
let mut master = Endpoint::<MasterReq>::connect(&path).unwrap();
let sock = listener.accept().unwrap().unwrap();
let mut slave = Endpoint::<MasterReq>::from_stream(sock);
- let mut fd = TempFile::new().unwrap().into_file();
+ let mut fd = tempfile().unwrap();
write!(fd, "test").unwrap();
// Normal case for sending/receiving file descriptors
@@ -817,7 +818,9 @@
#[test]
fn send_recv() {
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let listener = Listener::new(&path, true).unwrap();
listener.set_nonblocking(true).unwrap();
let mut master = Endpoint::<MasterReq>::connect(&path).unwrap();
diff --git a/src/vhost_user/master.rs b/src/vhost_user/master.rs
index ff0454a..9a65fbe 100644
--- a/src/vhost_user/master.rs
+++ b/src/vhost_user/master.rs
@@ -10,7 +10,7 @@
use std::path::Path;
use std::sync::{Arc, Mutex, MutexGuard};
-use vmm_sys_util::eventfd::EventFd;
+use sys_util::EventFd;
use super::connection::Endpoint;
use super::message::*;
@@ -764,15 +764,10 @@
mod tests {
use super::super::connection::Listener;
use super::*;
- use vmm_sys_util::rand::rand_alphanumerics;
+ use tempfile::{Builder, TempDir};
- use std::path::PathBuf;
-
- fn temp_path() -> PathBuf {
- PathBuf::from(format!(
- "/tmp/vhost_test_{}",
- rand_alphanumerics(8).to_str().unwrap()
- ))
+ fn temp_dir() -> TempDir {
+ Builder::new().prefix("/tmp/vhost_test").tempdir().unwrap()
}
fn create_pair<P: AsRef<Path>>(path: P) -> (Master, Endpoint<MasterReq>) {
@@ -785,7 +780,9 @@
#[test]
fn create_master() {
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let listener = Listener::new(&path, true).unwrap();
listener.set_nonblocking(true).unwrap();
@@ -812,7 +809,9 @@
#[test]
fn test_create_failure() {
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let _ = Listener::new(&path, true).unwrap();
let _ = Listener::new(&path, false).is_err();
assert!(Master::connect(&path, 1).is_err());
@@ -827,7 +826,9 @@
#[test]
fn test_features() {
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let (master, mut peer) = create_pair(&path);
master.set_owner().unwrap();
@@ -862,7 +863,9 @@
#[test]
fn test_protocol_features() {
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let (mut master, mut peer) = create_pair(&path);
master.set_owner().unwrap();
@@ -913,7 +916,9 @@
#[test]
fn test_master_set_config_negative() {
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let (mut master, _peer) = create_pair(&path);
let buf = vec![0x0; MAX_MSG_SIZE + 1];
@@ -958,7 +963,9 @@
}
fn create_pair2() -> (Master, Endpoint<MasterReq>) {
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let (master, peer) = create_pair(&path);
{
diff --git a/src/vhost_user/mod.rs b/src/vhost_user/mod.rs
index 99d6f80..5d8ce31 100644
--- a/src/vhost_user/mod.rs
+++ b/src/vhost_user/mod.rs
@@ -131,10 +131,10 @@
}
}
-impl std::convert::From<vmm_sys_util::errno::Error> for Error {
+impl std::convert::From<sys_util::Error> for Error {
/// Convert raw socket errors into meaningful vhost-user errors.
///
- /// The vmm_sys_util::errno::Error is a simple wrapper over the raw errno, which doesn't means
+ /// The sys_util::Error is a simple wrapper over the raw errno, which doesn't means
/// much to the vhost-user connection manager. So convert it into meaningful errors to simplify
/// the connection manager logic.
///
@@ -143,7 +143,7 @@
/// * - Error::SocketBroken: the underline socket is broken.
/// * - Error::SocketError: other socket related errors.
#[allow(unreachable_patterns)] // EWOULDBLOCK equals to EGAIN on linux
- fn from(err: vmm_sys_util::errno::Error) -> Self {
+ fn from(err: sys_util::Error) -> Self {
match err.errno() {
// The socket is marked nonblocking and the requested operation would block.
libc::EAGAIN => Error::SocketRetry(IOError::from_raw_os_error(libc::EAGAIN)),
@@ -191,25 +191,20 @@
#[cfg(all(test, feature = "vhost-user-master", feature = "vhost-user-slave"))]
mod tests {
- use std::fs::File;
use std::os::unix::io::AsRawFd;
- use std::path::{Path, PathBuf};
+ use std::path::Path;
use std::sync::{Arc, Barrier, Mutex};
use std::thread;
- use vmm_sys_util::rand::rand_alphanumerics;
- use vmm_sys_util::tempfile::TempFile;
use super::dummy_slave::{DummySlaveReqHandler, VIRTIO_FEATURES};
use super::message::*;
use super::*;
use crate::backend::VhostBackend;
use crate::{VhostUserMemoryRegionInfo, VringConfigData};
+ use tempfile::{tempfile, Builder, TempDir};
- fn temp_path() -> PathBuf {
- PathBuf::from(format!(
- "/tmp/vhost_test_{}",
- rand_alphanumerics(8).to_str().unwrap()
- ))
+ fn temp_dir() -> TempDir {
+ Builder::new().prefix("/tmp/vhost_test").tempdir().unwrap()
}
fn create_slave<P, S>(path: P, backend: Arc<S>) -> (Master, SlaveReqHandler<S>)
@@ -234,7 +229,9 @@
#[test]
fn test_set_owner() {
let slave_be = Arc::new(Mutex::new(DummySlaveReqHandler::new()));
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let (master, mut slave) = create_slave(&path, slave_be.clone());
assert_eq!(slave_be.lock().unwrap().owned, false);
@@ -250,7 +247,9 @@
fn test_set_features() {
let mbar = Arc::new(Barrier::new(2));
let sbar = mbar.clone();
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let slave_be = Arc::new(Mutex::new(DummySlaveReqHandler::new()));
let (mut master, mut slave) = create_slave(&path, slave_be.clone());
@@ -294,7 +293,9 @@
fn test_master_slave_process() {
let mbar = Arc::new(Barrier::new(2));
let sbar = mbar.clone();
- let path = temp_path();
+ let dir = temp_dir();
+ let mut path = dir.path().to_owned();
+ path.push("sock");
let slave_be = Arc::new(Mutex::new(DummySlaveReqHandler::new()));
let (mut master, mut slave) = create_slave(&path, slave_be.clone());
@@ -391,7 +392,7 @@
let num = master.get_queue_num().unwrap();
assert_eq!(num, 2);
- let eventfd = vmm_sys_util::eventfd::EventFd::new(0).unwrap();
+ let eventfd = sys_util::EventFd::new().unwrap();
let mem = [VhostUserMemoryRegionInfo {
guest_phys_addr: 0,
memory_size: 0x10_0000,
@@ -438,7 +439,7 @@
let max_mem_slots = master.get_max_mem_slots().unwrap();
assert_eq!(max_mem_slots, 32);
- let region_file: File = TempFile::new().unwrap().into_file();
+ let region_file = tempfile().unwrap();
let region = VhostUserMemoryRegionInfo {
guest_phys_addr: 0x10_0000,
memory_size: 0x10_0000,
@@ -474,7 +475,7 @@
#[test]
fn test_error_from_sys_util_error() {
- let e: Error = vmm_sys_util::errno::Error::new(libc::EAGAIN).into();
+ let e: Error = sys_util::Error::new(libc::EAGAIN).into();
if let Error::SocketRetry(e1) = e {
assert_eq!(e1.raw_os_error().unwrap(), libc::EAGAIN);
} else {