Implement fine grained locks for the page table and adjust APIs

This commit is contained in:
Zhang Junyang
2024-04-29 00:09:26 +08:00
committed by Tate, Hongliang Tian
parent ef1ab72ebe
commit 2dbeb92326
12 changed files with 937 additions and 717 deletions

View File

@ -291,16 +291,18 @@ impl ContextTable {
if device.device >= 32 || device.function >= 8 {
return Err(ContextTableError::InvalidDeviceId);
}
self.get_or_create_page_table(device).map_unchecked(
&(daddr..daddr + PAGE_SIZE),
&(paddr..paddr + PAGE_SIZE),
MapProperty {
perm: VmPerm::RW,
global: false,
extension: PageTableFlags::empty().bits(),
cache: CachePolicy::Uncacheable,
},
);
self.get_or_create_page_table(device)
.map(
&(daddr..daddr + PAGE_SIZE),
&(paddr..paddr + PAGE_SIZE),
MapProperty {
perm: VmPerm::RW,
global: false,
extension: PageTableFlags::empty().bits(),
cache: CachePolicy::Uncacheable,
},
)
.unwrap();
Ok(())
}
@ -310,7 +312,8 @@ impl ContextTable {
}
unsafe {
self.get_or_create_page_table(device)
.unmap_unchecked(&(daddr..daddr + PAGE_SIZE));
.unmap(&(daddr..daddr + PAGE_SIZE))
.unwrap();
}
Ok(())
}