Fix the range of IoMem's reader/writer
This commit is contained in:
parent
5233827160
commit
438dad888e
|
|
@ -125,8 +125,8 @@ impl IoMem {
|
||||||
// safety of reading from the mapped physical address, and the mapping is valid.
|
// safety of reading from the mapped physical address, and the mapping is valid.
|
||||||
unsafe {
|
unsafe {
|
||||||
VmReader::from_kernel_space(
|
VmReader::from_kernel_space(
|
||||||
self.kvirt_area.deref().start() as *mut u8,
|
(self.kvirt_area.deref().start() + self.offset) as *mut u8,
|
||||||
self.kvirt_area.deref().len(),
|
self.limit,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -136,8 +136,8 @@ impl IoMem {
|
||||||
// safety of writing to the mapped physical address, and the mapping is valid.
|
// safety of writing to the mapped physical address, and the mapping is valid.
|
||||||
unsafe {
|
unsafe {
|
||||||
VmWriter::from_kernel_space(
|
VmWriter::from_kernel_space(
|
||||||
self.kvirt_area.deref().start() as *mut u8,
|
(self.kvirt_area.deref().start() + self.offset) as *mut u8,
|
||||||
self.kvirt_area.deref().len(),
|
self.limit,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -147,9 +147,7 @@ impl VmIo for IoMem {
|
||||||
fn read(&self, offset: usize, writer: &mut VmWriter) -> Result<()> {
|
fn read(&self, offset: usize, writer: &mut VmWriter) -> Result<()> {
|
||||||
let offset = offset + self.offset;
|
let offset = offset + self.offset;
|
||||||
if self
|
if self
|
||||||
.kvirt_area
|
.limit
|
||||||
.deref()
|
|
||||||
.len()
|
|
||||||
.checked_sub(offset)
|
.checked_sub(offset)
|
||||||
.is_none_or(|remain| remain < writer.avail())
|
.is_none_or(|remain| remain < writer.avail())
|
||||||
{
|
{
|
||||||
|
|
@ -168,9 +166,7 @@ impl VmIo for IoMem {
|
||||||
fn write(&self, offset: usize, reader: &mut VmReader) -> Result<()> {
|
fn write(&self, offset: usize, reader: &mut VmReader) -> Result<()> {
|
||||||
let offset = offset + self.offset;
|
let offset = offset + self.offset;
|
||||||
if self
|
if self
|
||||||
.kvirt_area
|
.limit
|
||||||
.deref()
|
|
||||||
.len()
|
|
||||||
.checked_sub(offset)
|
.checked_sub(offset)
|
||||||
.is_none_or(|remain| remain < reader.remain())
|
.is_none_or(|remain| remain < reader.remain())
|
||||||
{
|
{
|
||||||
|
|
@ -189,10 +185,10 @@ impl VmIo for IoMem {
|
||||||
|
|
||||||
impl VmIoOnce for IoMem {
|
impl VmIoOnce for IoMem {
|
||||||
fn read_once<T: PodOnce>(&self, offset: usize) -> Result<T> {
|
fn read_once<T: PodOnce>(&self, offset: usize) -> Result<T> {
|
||||||
self.reader().skip(offset + self.offset).read_once()
|
self.reader().skip(offset).read_once()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_once<T: PodOnce>(&self, offset: usize, new_val: &T) -> Result<()> {
|
fn write_once<T: PodOnce>(&self, offset: usize, new_val: &T) -> Result<()> {
|
||||||
self.writer().skip(offset + self.offset).write_once(new_val)
|
self.writer().skip(offset).write_once(new_val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue