feat(adapter): higher-half kernel (linked at PHYS_OFFSET, boot trampoline, no low mappings), fix SBI ecall clobbers
This commit is contained in:
@@ -75,7 +75,7 @@ pub fn load_server(
|
||||
pub fn enter_userspace(pid: ProcessId, entry: usize, shared_buf_va: usize) -> ! {
|
||||
let pt_addr = kern().platform_mut().page_table_for(pid);
|
||||
if pt_addr != 0 {
|
||||
mmu::activate(unsafe { &*(pt_addr as *const mmu::PageTable) });
|
||||
mmu::activate(mmu::page_table::table_at(pt_addr));
|
||||
}
|
||||
|
||||
let kernel_sp: usize;
|
||||
@@ -120,11 +120,11 @@ fn copy_to_user(pid: ProcessId, va: usize, data: &[u8]) -> bool {
|
||||
};
|
||||
let len = (PAGE_SIZE - offset).min(data.len() - done);
|
||||
// SAFETY: `pa` is a pool frame the kernel just mapped for `pid`;
|
||||
// pool frames are identity mapped kernel RAM.
|
||||
// pool frames are RAM, mapped at `phys_to_virt`.
|
||||
unsafe {
|
||||
core::ptr::copy_nonoverlapping(
|
||||
data.as_ptr().add(done),
|
||||
(pa.raw() as *mut u8).add(offset),
|
||||
(mmu::phys_to_virt(pa.raw()) as *mut u8).add(offset),
|
||||
len,
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user