mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
vm-device: Switch to use get_host_address_range in vfio-ioctls
The API has change to use generic GuestMemory trait:
pub fn get_host_address_range<M: GuestMemory>(
mem: &M,
addr: GuestAddress,
size: usize,
) -> Option<*mut u8> {
Signed-off-by: Arron Wang <arron.wang@intel.com>
This commit is contained in:
@@ -10,9 +10,9 @@ use std::convert::TryInto;
|
||||
use std::os::unix::io::AsRawFd;
|
||||
use std::sync::Arc;
|
||||
use std::vec::Vec;
|
||||
use vfio_ioctls::get_host_address_range;
|
||||
use vhost_rs::vhost_user::{Master, VhostUserMaster};
|
||||
use vhost_rs::{VhostBackend, VhostUserMemoryRegionInfo, VringConfigData};
|
||||
use vm_device::get_host_address_range;
|
||||
use vm_memory::{Address, Error as MmapError, GuestMemory, GuestMemoryMmap, GuestMemoryRegion};
|
||||
use vmm_sys_util::eventfd::EventFd;
|
||||
|
||||
@@ -74,18 +74,18 @@ pub fn setup_vhost_user_vring(
|
||||
queue_size: queue.actual_size(),
|
||||
flags: 0u32,
|
||||
desc_table_addr: get_host_address_range(
|
||||
&mem,
|
||||
mem,
|
||||
queue.desc_table,
|
||||
actual_size * std::mem::size_of::<Descriptor>(),
|
||||
)
|
||||
.ok_or_else(|| Error::DescriptorTableAddress)? as u64,
|
||||
// The used ring is {flags: u16; idx: u16; virtq_used_elem [{id: u16, len: u16}; actual_size]},
|
||||
// i.e. 4 + (4 + 4) * actual_size.
|
||||
used_ring_addr: get_host_address_range(&mem, queue.used_ring, 4 + actual_size * 8)
|
||||
used_ring_addr: get_host_address_range(mem, queue.used_ring, 4 + actual_size * 8)
|
||||
.ok_or_else(|| Error::UsedAddress)? as u64,
|
||||
// The used ring is {flags: u16; idx: u16; elem [u16; actual_size]},
|
||||
// i.e. 4 + (2) * actual_size.
|
||||
avail_ring_addr: get_host_address_range(&mem, queue.avail_ring, 4 + actual_size * 2)
|
||||
avail_ring_addr: get_host_address_range(mem, queue.avail_ring, 4 + actual_size * 2)
|
||||
.ok_or_else(|| Error::AvailAddress)? as u64,
|
||||
log_addr: None,
|
||||
};
|
||||
|
||||
@@ -20,7 +20,7 @@ use byteorder::{ByteOrder, LittleEndian};
|
||||
use super::super::DescriptorChain;
|
||||
use super::defs;
|
||||
use super::{Result, VsockError};
|
||||
use vm_device::get_host_address_range;
|
||||
use vfio_ioctls::get_host_address_range;
|
||||
|
||||
// The vsock packet header is defined by the C struct:
|
||||
//
|
||||
@@ -117,7 +117,7 @@ impl VsockPacket {
|
||||
}
|
||||
|
||||
let mut pkt = Self {
|
||||
hdr: get_host_address_range(&head.mem, head.addr, VSOCK_PKT_HDR_SIZE)
|
||||
hdr: get_host_address_range(head.mem, head.addr, VSOCK_PKT_HDR_SIZE)
|
||||
.ok_or_else(|| VsockError::GuestMemory)? as *mut u8,
|
||||
buf: None,
|
||||
buf_size: 0,
|
||||
@@ -150,7 +150,7 @@ impl VsockPacket {
|
||||
|
||||
pkt.buf_size = buf_desc.len as usize;
|
||||
pkt.buf = Some(
|
||||
get_host_address_range(&buf_desc.mem, buf_desc.addr, pkt.buf_size)
|
||||
get_host_address_range(buf_desc.mem, buf_desc.addr, pkt.buf_size)
|
||||
.ok_or_else(|| VsockError::GuestMemory)? as *mut u8,
|
||||
);
|
||||
|
||||
@@ -182,10 +182,10 @@ impl VsockPacket {
|
||||
let buf_size = buf_desc.len as usize;
|
||||
|
||||
Ok(Self {
|
||||
hdr: get_host_address_range(&head.mem, head.addr, VSOCK_PKT_HDR_SIZE)
|
||||
hdr: get_host_address_range(head.mem, head.addr, VSOCK_PKT_HDR_SIZE)
|
||||
.ok_or_else(|| VsockError::GuestMemory)? as *mut u8,
|
||||
buf: Some(
|
||||
get_host_address_range(&buf_desc.mem, buf_desc.addr, buf_size)
|
||||
get_host_address_range(buf_desc.mem, buf_desc.addr, buf_size)
|
||||
.ok_or_else(|| VsockError::GuestMemory)? as *mut u8,
|
||||
),
|
||||
buf_size,
|
||||
@@ -377,7 +377,7 @@ mod tests {
|
||||
|
||||
fn set_pkt_len(len: u32, guest_desc: &GuestQDesc, mem: &GuestMemoryMmap) {
|
||||
let hdr_gpa = guest_desc.addr.get();
|
||||
let hdr_ptr = get_host_address_range(&mem, GuestAddress(hdr_gpa), VSOCK_PKT_HDR_SIZE)
|
||||
let hdr_ptr = get_host_address_range(mem, GuestAddress(hdr_gpa), VSOCK_PKT_HDR_SIZE)
|
||||
.unwrap() as *mut u8;
|
||||
let len_ptr = unsafe { hdr_ptr.add(HDROFF_LEN) };
|
||||
|
||||
|
||||
Reference in New Issue
Block a user