Skip to content

Commit c7cd353

Browse files
dianpopaacatangiu
authored andcommitted
kvm: get rid of redundant Copy/Clone
The `IoEventAdress` is uselessly moved around by being copied when calling `register_io_event`. Coverage also improves. Signed-off-by: Diana Popa <[email protected]>
1 parent ce91194 commit c7cd353

File tree

2 files changed

+13
-14
lines changed

2 files changed

+13
-14
lines changed

kvm/src/lib.rs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ impl AsRawFd for Kvm {
180180
}
181181

182182
/// An address either in programmable I/O space or in memory mapped I/O space.
183-
#[derive(Copy, Clone)]
184183
pub enum IoeventAddress {
185184
/// Representation of an programmable I/O address.
186185
Pio(u64),
@@ -298,26 +297,26 @@ impl VmFd {
298297
pub fn register_ioevent<T: Into<u64>>(
299298
&self,
300299
evt: &EventFd,
301-
addr: IoeventAddress,
300+
addr: &IoeventAddress,
302301
datamatch: T,
303302
) -> Result<()> {
304303
let mut flags = 0;
305304
if std::mem::size_of::<T>() > 0 {
306305
flags |= 1 << kvm_ioeventfd_flag_nr_datamatch
307306
}
308307
match addr {
309-
IoeventAddress::Pio(_) => flags |= 1 << kvm_ioeventfd_flag_nr_pio,
308+
&IoeventAddress::Pio(_) => flags |= 1 << kvm_ioeventfd_flag_nr_pio,
310309
_ => {}
311310
};
312311
let ioeventfd = kvm_ioeventfd {
313312
datamatch: datamatch.into(),
314313
len: std::mem::size_of::<T>() as u32,
315314
addr: match addr {
316-
IoeventAddress::Pio(p) => p as u64,
317-
IoeventAddress::Mmio(m) => m,
315+
IoeventAddress::Pio(ref p) => *p as u64,
316+
IoeventAddress::Mmio(ref m) => *m,
318317
},
319318
fd: evt.as_raw_fd(),
320-
flags: flags,
319+
flags,
321320
..Default::default()
322321
};
323322
// Safe because we know that our file is a VM fd, we know the kernel will only read the
@@ -936,22 +935,22 @@ mod tests {
936935
let vm_fd = kvm.create_vm().unwrap();
937936
let evtfd = EventFd::new().unwrap();
938937
vm_fd
939-
.register_ioevent(&evtfd, IoeventAddress::Pio(0xf4), NoDatamatch)
938+
.register_ioevent(&evtfd, &IoeventAddress::Pio(0xf4), NoDatamatch)
940939
.unwrap();
941940
vm_fd
942-
.register_ioevent(&evtfd, IoeventAddress::Mmio(0x1000), NoDatamatch)
941+
.register_ioevent(&evtfd, &IoeventAddress::Mmio(0x1000), NoDatamatch)
943942
.unwrap();
944943
vm_fd
945-
.register_ioevent(&evtfd, IoeventAddress::Pio(0xc1), 0x7fu8)
944+
.register_ioevent(&evtfd, &IoeventAddress::Pio(0xc1), 0x7fu8)
946945
.unwrap();
947946
vm_fd
948-
.register_ioevent(&evtfd, IoeventAddress::Pio(0xc2), 0x1337u16)
947+
.register_ioevent(&evtfd, &IoeventAddress::Pio(0xc2), 0x1337u16)
949948
.unwrap();
950949
vm_fd
951-
.register_ioevent(&evtfd, IoeventAddress::Pio(0xc4), 0xdeadbeefu32)
950+
.register_ioevent(&evtfd, &IoeventAddress::Pio(0xc4), 0xdeadbeefu32)
952951
.unwrap();
953952
vm_fd
954-
.register_ioevent(&evtfd, IoeventAddress::Pio(0xc8), 0xdeadbeefdeadbeefu64)
953+
.register_ioevent(&evtfd, &IoeventAddress::Pio(0xc8), 0xdeadbeefdeadbeefu64)
955954
.unwrap();
956955
}
957956

@@ -1237,7 +1236,7 @@ mod tests {
12371236
let event_fd = EventFd::new().unwrap();
12381237
assert_eq!(
12391238
faulty_vm_fd
1240-
.register_ioevent(&event_fd, IoeventAddress::Pio(0), 0u64)
1239+
.register_ioevent(&event_fd, &IoeventAddress::Pio(0), 0u64)
12411240
.unwrap_err(),
12421241
badf_error
12431242
);

vmm/src/vm_control.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ impl VmRequest {
4040
/// received this `VmRequest`.
4141
pub fn execute(&self, vm: &VmFd) -> VmResponse {
4242
match self {
43-
&VmRequest::RegisterIoevent(ref evt, addr, datamatch) => {
43+
&VmRequest::RegisterIoevent(ref evt, ref addr, datamatch) => {
4444
match vm.register_ioevent(evt, addr, datamatch) {
4545
Ok(_) => VmResponse::Ok,
4646
Err(e) => VmResponse::Err(e),

0 commit comments

Comments
 (0)