Skip to content

Commit

Permalink
Merge #422 #424
Browse files Browse the repository at this point in the history
422: Condvar: Mark sys functions as extern "C" r=stlankes a=mkroening

They are declared in hermit-abi as extern "C" already.
So the current definition without extern "C" is wrong.

424: Clippy: Enable and fix transmute_ptr_to_ptr r=stlankes a=mkroening



Co-authored-by: Martin Kröning <m.kroening@hotmail.de>
  • Loading branch information
bors[bot] and mkroening authored Apr 21, 2022
3 parents 378a911 + 9ce74ce + 064dca6 commit 05754ca
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 37 deletions.
16 changes: 4 additions & 12 deletions src/arch/aarch64/mm/paging.rs
Original file line number Diff line number Diff line change
Expand Up @@ -546,19 +546,15 @@ pub fn get_page_table_entry<S: PageSize>(virtual_address: VirtAddr) -> Option<Pa
trace!("Looking up Page Table Entry for {:#X}", virtual_address);

let page = Page::<S>::including_address(virtual_address);
let root_pagetable = unsafe {
&mut *mem::transmute::<*mut u64, *mut PageTable<L0Table>>(L0TABLE_ADDRESS.as_mut_ptr())
};
let root_pagetable = unsafe { &mut *(L0TABLE_ADDRESS.as_mut_ptr() as *mut PageTable<L0Table>) };
root_pagetable.get_page_table_entry(page)
}

pub fn get_physical_address<S: PageSize>(virtual_address: VirtAddr) -> PhysAddr {
trace!("Getting physical address for {:#X}", virtual_address);

let page = Page::<S>::including_address(virtual_address);
let root_pagetable = unsafe {
&mut *mem::transmute::<*mut u64, *mut PageTable<L0Table>>(L0TABLE_ADDRESS.as_mut_ptr())
};
let root_pagetable = unsafe { &mut *(L0TABLE_ADDRESS.as_mut_ptr() as *mut PageTable<L0Table>) };
let address = root_pagetable
.get_page_table_entry(page)
.expect("Entry not present")
Expand Down Expand Up @@ -593,9 +589,7 @@ pub fn map<S: PageSize>(
);

let range = get_page_range::<S>(virtual_address, count);
let root_pagetable = unsafe {
&mut *mem::transmute::<*mut u64, *mut PageTable<L0Table>>(L0TABLE_ADDRESS.as_mut_ptr())
};
let root_pagetable = unsafe { &mut *(L0TABLE_ADDRESS.as_mut_ptr() as *mut PageTable<L0Table>) };
root_pagetable.map_pages(range, physical_address, flags);
}

Expand All @@ -607,9 +601,7 @@ pub fn unmap<S: PageSize>(virtual_address: VirtAddr, count: usize) {
);

let range = get_page_range::<S>(virtual_address, count);
let root_pagetable = unsafe {
&mut *mem::transmute::<*mut u64, *mut PageTable<L0Table>>(L0TABLE_ADDRESS.as_mut_ptr())
};
let root_pagetable = unsafe { &mut *(L0TABLE_ADDRESS.as_mut_ptr() as *mut PageTable<L0Table>) };
root_pagetable.map_pages(range, PhysAddr::zero(), PageTableEntryFlags::BLANK);
}

Expand Down
6 changes: 1 addition & 5 deletions src/arch/x86_64/mm/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ pub mod physicalmem;
pub mod virtualmem;

pub use self::paging::init_page_tables;
use core::mem;
use core::slice;

pub use x86::bits64::paging::PAddr as PhysAddr;
Expand All @@ -24,10 +23,7 @@ impl multiboot::information::MemoryManagement for MultibootMemory {
p: multiboot::information::PAddr,
sz: usize,
) -> Option<&'static [u8]> {
unsafe {
let ptr = mem::transmute(p);
Some(slice::from_raw_parts(ptr, sz))
}
unsafe { Some(slice::from_raw_parts(p as _, sz)) }
}

unsafe fn allocate(
Expand Down
20 changes: 5 additions & 15 deletions src/arch/x86_64/mm/paging.rs
Original file line number Diff line number Diff line change
Expand Up @@ -610,19 +610,15 @@ pub fn get_page_table_entry<S: PageSize>(virtual_address: VirtAddr) -> Option<Pa
trace!("Looking up Page Table Entry for {:#X}", virtual_address);

let page = Page::<S>::including_address(virtual_address);
let root_pagetable = unsafe {
&mut *mem::transmute::<*mut u64, *mut PageTable<PML4>>(PML4_ADDRESS.as_mut_ptr())
};
let root_pagetable = unsafe { &mut *(PML4_ADDRESS.as_mut_ptr() as *mut PageTable<PML4>) };
root_pagetable.get_page_table_entry(page)
}

pub fn get_physical_address<S: PageSize>(virtual_address: VirtAddr) -> PhysAddr {
trace!("Getting physical address for {:#X}", virtual_address);

let page = Page::<S>::including_address(virtual_address);
let root_pagetable = unsafe {
&mut *mem::transmute::<*mut u64, *mut PageTable<PML4>>(PML4_ADDRESS.as_mut_ptr())
};
let root_pagetable = unsafe { &mut *(PML4_ADDRESS.as_mut_ptr() as *mut PageTable<PML4>) };
let address = root_pagetable
.get_page_table_entry(page)
.expect("Entry not present")
Expand Down Expand Up @@ -684,9 +680,7 @@ pub fn map<S: PageSize>(
);

let range = get_page_range::<S>(virtual_address, count);
let root_pagetable = unsafe {
&mut *mem::transmute::<*mut u64, *mut PageTable<PML4>>(PML4_ADDRESS.as_mut_ptr())
};
let root_pagetable = unsafe { &mut *(PML4_ADDRESS.as_mut_ptr() as *mut PageTable<PML4>) };
root_pagetable.map_pages(range, physical_address, flags);
}

Expand All @@ -698,9 +692,7 @@ pub fn unmap<S: PageSize>(virtual_address: VirtAddr, count: usize) {
);

let range = get_page_range::<S>(virtual_address, count);
let root_pagetable = unsafe {
&mut *mem::transmute::<*mut u64, *mut PageTable<PML4>>(PML4_ADDRESS.as_mut_ptr())
};
let root_pagetable = unsafe { &mut *(PML4_ADDRESS.as_mut_ptr() as *mut PageTable<PML4>) };
root_pagetable.map_pages(range, PhysAddr::zero(), PageTableEntryFlags::BLANK);
}

Expand All @@ -713,9 +705,7 @@ pub fn identity_map(start_address: PhysAddr, end_address: PhysAddr) {
last_page.address()
);

let root_pagetable = unsafe {
&mut *mem::transmute::<*mut u64, *mut PageTable<PML4>>(PML4_ADDRESS.as_mut_ptr())
};
let root_pagetable = unsafe { &mut *(PML4_ADDRESS.as_mut_ptr() as *mut PageTable<PML4>) };
let range = Page::<BasePageSize>::range(first_page, last_page);
let mut flags = PageTableEntryFlags::empty();
flags.normal().read_only().execute_disable();
Expand Down
1 change: 1 addition & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#![warn(rust_2018_idioms)]
#![warn(unsafe_op_in_unsafe_fn)]
#![warn(clippy::transmute_ptr_to_ptr)]
#![allow(clippy::not_unsafe_ptr_arg_deref)]
#![allow(clippy::missing_safety_doc)]
#![allow(incomplete_features)]
Expand Down
10 changes: 5 additions & 5 deletions src/syscalls/condvar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ extern "C" fn __sys_destroy_queue(ptr: usize) -> i32 {
}

#[no_mangle]
pub unsafe fn sys_destroy_queue(ptr: usize) -> i32 {
pub unsafe extern "C" fn sys_destroy_queue(ptr: usize) -> i32 {
kernel_function!(__sys_destroy_queue(ptr))
}

Expand Down Expand Up @@ -82,7 +82,7 @@ extern "C" fn __sys_notify(ptr: usize, count: i32) -> i32 {
}

#[no_mangle]
pub unsafe fn sys_notify(ptr: usize, count: i32) -> i32 {
pub unsafe extern "C" fn sys_notify(ptr: usize, count: i32) -> i32 {
kernel_function!(__sys_notify(ptr, count))
}

Expand All @@ -105,7 +105,7 @@ extern "C" fn __sys_init_queue(ptr: usize) -> i32 {
}

#[no_mangle]
pub unsafe fn sys_init_queue(ptr: usize) -> i32 {
pub unsafe extern "C" fn sys_init_queue(ptr: usize) -> i32 {
kernel_function!(__sys_init_queue(ptr))
}

Expand Down Expand Up @@ -137,7 +137,7 @@ extern "C" fn __sys_add_queue(ptr: usize, timeout_ns: i64) -> i32 {
}

#[no_mangle]
pub unsafe fn sys_add_queue(ptr: usize, timeout_ns: i64) -> i32 {
pub unsafe extern "C" fn sys_add_queue(ptr: usize, timeout_ns: i64) -> i32 {
kernel_function!(__sys_add_queue(ptr, timeout_ns))
}

Expand All @@ -163,6 +163,6 @@ extern "C" fn __sys_wait(ptr: usize) -> i32 {
}

#[no_mangle]
pub unsafe fn sys_wait(ptr: usize) -> i32 {
pub unsafe extern "C" fn sys_wait(ptr: usize) -> i32 {
kernel_function!(__sys_wait(ptr))
}

0 comments on commit 05754ca

Please sign in to comment.