Remove physmap in virtio.

This commit is contained in:
4lDO2
2023-07-15 01:16:25 +02:00
parent 477b1c0ada
commit c63c266400
5 changed files with 19 additions and 14 deletions
+1
View File
@@ -16,4 +16,5 @@ crossbeam-queue = "0.3.8"
redox-log = "0.1"
redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" }
common = { path = "../common" }
pcid = { path = "../pcid" }
+6 -5
View File
@@ -8,7 +8,7 @@ use pcid_interface::msi::x86_64::DeliveryMode;
use pcid_interface::msi::{MsixCapability, MsixTableEntry};
use pcid_interface::*;
use syscall::{Io, PHYSMAP_NO_CACHE, PHYSMAP_WRITE};
use syscall::Io;
use crate::spec::*;
use crate::transport::{Error, StandardTransport};
@@ -68,11 +68,12 @@ fn enable_msix(pcid_handle: &mut PcidServerHandle) -> Result<File, Error> {
};
let address = unsafe {
syscall::physmap(
common::physmap(
bar_ptr as usize,
bar_size as usize,
PHYSMAP_WRITE | PHYSMAP_NO_CACHE,
)?
common::Prot::RW,
common::MemoryType::Uncacheable,
)? as usize
};
// Ensure that the table and PBA are be within the BAR.
@@ -186,7 +187,7 @@ pub fn probe_device<'a>(pcid_handle: &mut PcidServerHandle) -> Result<Device<'a>
let size = offset + capability.length as usize;
let addr = syscall::physmap(aligned_addr, size, PHYSMAP_WRITE | PHYSMAP_NO_CACHE)?;
let addr = common::physmap(aligned_addr, size, common::Prot::RW, common::MemoryType::Uncacheable)? as usize;
addr + offset
};
+7 -6
View File
@@ -2,7 +2,7 @@ use crate::spec::*;
use crate::utils::align;
use event::EventQueue;
use syscall::{Dma, PHYSMAP_WRITE};
use syscall::Dma;
use core::mem::size_of;
use core::sync::atomic::{AtomicU16, Ordering};
@@ -230,8 +230,9 @@ impl<'a> Available<'a> {
let size = size.next_multiple_of(syscall::PAGE_SIZE); // align to page size
let addr = unsafe { syscall::physalloc(size) }.map_err(Error::SyscallError)?;
let virt =
unsafe { syscall::physmap(addr, size, PHYSMAP_WRITE) }.map_err(Error::SyscallError)?;
let virt = unsafe {
common::physmap(addr, size, common::Prot::RW, common::MemoryType::default())
}.map_err(Error::SyscallError)?;
let ring = unsafe { &mut *(virt as *mut AvailableRing) };
@@ -275,7 +276,7 @@ impl Drop for Available<'_> {
log::warn!("virtio-core: dropping 'available' ring at {:#x}", self.addr);
unsafe {
syscall::physunmap(self.addr).unwrap();
syscall::funmap(self.addr, self.size).unwrap();
syscall::physfree(self.addr, self.size).unwrap();
}
}
@@ -297,7 +298,7 @@ impl<'a> Used<'a> {
let addr = unsafe { syscall::physalloc(size) }.map_err(Error::SyscallError)?;
let virt =
unsafe { syscall::physmap(addr, size, PHYSMAP_WRITE) }.map_err(Error::SyscallError)?;
unsafe { common::physmap(addr, size, common::Prot::RW, common::MemoryType::default()) }.map_err(Error::SyscallError)?;
let ring = unsafe { &mut *(virt as *mut UsedRing) };
@@ -355,7 +356,7 @@ impl Drop for Used<'_> {
log::warn!("virtio-core: dropping 'used' ring at {:#x}", self.addr);
unsafe {
syscall::physunmap(self.addr).unwrap();
syscall::funmap(self.addr, self.size).unwrap();
syscall::physfree(self.addr, self.size).unwrap();
}
}
+1
View File
@@ -11,6 +11,7 @@ futures = { version = "0.3.28", features = ["executor"] }
anyhow = "1.0.71"
paste = "1.0.13"
common = { path = "../common" }
virtio-core = { path = "../virtio-core" }
pcid = { path = "../pcid" }
inputd = { path = "../inputd" }
+4 -3
View File
@@ -113,12 +113,13 @@ impl<'a> Display<'a> {
.next_multiple_of(syscall::PAGE_SIZE);
let address = unsafe { syscall::physalloc(fb_size) }? as u64;
let mapped = unsafe {
syscall::physmap(
common::physmap(
address as usize,
fb_size,
syscall::PhysmapFlags::PHYSMAP_WRITE,
common::Prot::RW,
common::MemoryType::default(),
)
}?;
}? as usize;
unsafe {
core::ptr::write_bytes(mapped as *mut u8, 255, fb_size);