Skip to content

Commit 2516ce9

Browse files
authoredApr 4, 2024··
Merge pull request #319 from hermit-os/clippy
fix: clippy
2 parents 0cb21fd + 8102c30 commit 2516ce9

File tree

9 files changed

+152
-119
lines changed

9 files changed

+152
-119
lines changed
 

‎Cargo.lock

+26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Cargo.toml

+2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ edition = "2021"
1010
align-address = "0.1"
1111
hermit-entry = { version = "0.9", features = ["loader"] }
1212
log = "0.4"
13+
one-shot-mutex = "0.1"
1314
sptr = "0.3"
15+
take-static = "0.1"
1416
vm-fdt = { version = "0.3", default-features = false, features = ["alloc"] }
1517

1618
[features]

‎src/arch/aarch64/mod.rs

+27-24
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ pub fn output_message_byte(byte: u8) {
8181
}
8282

8383
pub unsafe fn get_memory(_memory_size: u64) -> u64 {
84-
(ptr::addr_of!(kernel_end).addr() as u64).align_up(LargePageSize::SIZE as u64)
84+
(unsafe { ptr::addr_of!(kernel_end) }.addr() as u64).align_up(LargePageSize::SIZE as u64)
8585
}
8686

8787
pub fn find_kernel() -> &'static [u8] {
@@ -159,21 +159,21 @@ pub unsafe fn boot_kernel(kernel_info: LoadedKernel) -> ! {
159159
for i in pgt_slice.iter_mut() {
160160
*i = 0;
161161
}
162-
pgt_slice[0] = ptr::addr_of!(l1_pgtable).addr() as u64 + PT_PT;
163-
pgt_slice[511] = ptr::addr_of!(l0_pgtable).addr() as u64 + PT_PT + PT_SELF;
162+
pgt_slice[0] = unsafe { ptr::addr_of!(l1_pgtable) }.addr() as u64 + PT_PT;
163+
pgt_slice[511] = unsafe { ptr::addr_of!(l0_pgtable) }.addr() as u64 + PT_PT + PT_SELF;
164164

165165
let pgt_slice = unsafe { core::slice::from_raw_parts_mut(ptr::addr_of_mut!(l1_pgtable), 512) };
166166
for i in pgt_slice.iter_mut() {
167167
*i = 0;
168168
}
169-
pgt_slice[0] = ptr::addr_of!(l2_pgtable).addr() as u64 + PT_PT;
170-
pgt_slice[1] = ptr::addr_of!(l2k_pgtable).addr() as u64 + PT_PT;
169+
pgt_slice[0] = unsafe { ptr::addr_of!(l2_pgtable) }.addr() as u64 + PT_PT;
170+
pgt_slice[1] = unsafe { ptr::addr_of!(l2k_pgtable) }.addr() as u64 + PT_PT;
171171

172172
let pgt_slice = unsafe { core::slice::from_raw_parts_mut(ptr::addr_of_mut!(l2_pgtable), 512) };
173173
for i in pgt_slice.iter_mut() {
174174
*i = 0;
175175
}
176-
pgt_slice[0] = ptr::addr_of!(l3_pgtable).addr() as u64 + PT_PT;
176+
pgt_slice[0] = unsafe { ptr::addr_of!(l3_pgtable) }.addr() as u64 + PT_PT;
177177

178178
let pgt_slice = unsafe { core::slice::from_raw_parts_mut(ptr::addr_of_mut!(l3_pgtable), 512) };
179179
for i in pgt_slice.iter_mut() {
@@ -187,8 +187,9 @@ pub unsafe fn boot_kernel(kernel_info: LoadedKernel) -> ! {
187187
*i = 0;
188188
}
189189
for (i, pgt_slice) in pgt_slice.iter_mut().enumerate().take(10) {
190-
*pgt_slice =
191-
ptr::addr_of!(L0mib_pgtable).addr() as u64 + (i * BasePageSize::SIZE) as u64 + PT_PT;
190+
*pgt_slice = unsafe { ptr::addr_of!(L0mib_pgtable) }.addr() as u64
191+
+ (i * BasePageSize::SIZE) as u64
192+
+ PT_PT;
192193
}
193194

194195
let pgt_slice =
@@ -227,7 +228,12 @@ pub unsafe fn boot_kernel(kernel_info: LoadedKernel) -> ! {
227228
}
228229

229230
let current_stack_address = load_info.kernel_image_addr_range.start - KERNEL_STACK_SIZE as u64;
230-
pub static mut BOOT_INFO: Option<RawBootInfo> = None;
231+
232+
take_static::take_static! {
233+
static RAW_BOOT_INFO: Option<RawBootInfo> = None;
234+
}
235+
236+
let raw_boot_info = RAW_BOOT_INFO.take().unwrap();
231237

232238
let dtb = unsafe {
233239
Dtb::from_raw(sptr::from_exposed_addr(DEVICE_TREE as usize))
@@ -246,22 +252,19 @@ pub unsafe fn boot_kernel(kernel_info: LoadedKernel) -> ! {
246252
let ram_start = u64::from_be_bytes(start_slice.try_into().unwrap());
247253
let ram_size = u64::from_be_bytes(size_slice.try_into().unwrap());
248254

249-
let boot_info = {
250-
let boot_info = BootInfo {
251-
hardware_info: HardwareInfo {
252-
phys_addr_range: ram_start..ram_start + ram_size,
253-
serial_port_base: SerialPortBase::new(0x1000),
254-
device_tree: core::num::NonZeroU64::new(DEVICE_TREE),
255-
},
256-
load_info,
257-
platform_info: PlatformInfo::LinuxBoot,
258-
};
259-
RawBootInfo::from(boot_info)
255+
let boot_info = BootInfo {
256+
hardware_info: HardwareInfo {
257+
phys_addr_range: ram_start..ram_start + ram_size,
258+
serial_port_base: SerialPortBase::new(0x1000),
259+
device_tree: core::num::NonZeroU64::new(DEVICE_TREE),
260+
},
261+
load_info,
262+
platform_info: PlatformInfo::LinuxBoot,
260263
};
261264

262-
unsafe {
263-
BOOT_INFO = Some(boot_info);
264-
}
265+
info!("boot_info = {boot_info:#?}");
266+
let boot_info_ptr = raw_boot_info.insert(RawBootInfo::from(boot_info));
267+
info!("boot_info at {boot_info_ptr:p}");
265268

266269
// Jump to the kernel entry point and provide the Multiboot information to it.
267270
info!(
@@ -291,7 +294,7 @@ pub unsafe fn boot_kernel(kernel_info: LoadedKernel) -> ! {
291294
"br {entry}",
292295
stack_address = in(reg) current_stack_address,
293296
entry = in(reg) entry_point,
294-
in("x0") BOOT_INFO.as_ref().unwrap(),
297+
in("x0") boot_info_ptr,
295298
in("x1") 0,
296299
options(noreturn)
297300
)

‎src/arch/riscv64/mod.rs

+38-40
Original file line numberDiff line numberDiff line change
@@ -100,47 +100,45 @@ pub unsafe fn boot_kernel(kernel_info: LoadedKernel) -> ! {
100100

101101
info!("hart_id = {}", start::get_hart_id());
102102

103-
static mut BOOT_INFO: Option<RawBootInfo> = None;
104-
105-
let boot_info = {
106-
let phys_addr_range = {
107-
let memory = fdt.memory();
108-
let mut regions = memory.regions();
109-
110-
let mem_region = regions.next().unwrap();
111-
assert!(
112-
regions.next().is_none(),
113-
"hermit-loader can only handle one memory region yet"
114-
);
115-
116-
let mem_base = u64::try_from(mem_region.starting_address.addr()).unwrap();
117-
let mem_size = u64::try_from(mem_region.size.unwrap()).unwrap();
118-
mem_base..mem_base + mem_size
119-
};
120-
121-
let device_tree = {
122-
let fdt_addr = start::get_fdt_ptr().expose_addr();
123-
DeviceTreeAddress::new(fdt_addr.try_into().unwrap())
124-
};
125-
126-
let boot_info = BootInfo {
127-
hardware_info: HardwareInfo {
128-
phys_addr_range,
129-
serial_port_base: None,
130-
device_tree,
131-
},
132-
load_info,
133-
platform_info: PlatformInfo::LinuxBoot,
134-
};
135-
136-
info!("boot_info = {boot_info:#?}");
137-
138-
RawBootInfo::from(boot_info)
103+
take_static::take_static! {
104+
static RAW_BOOT_INFO: Option<RawBootInfo> = None;
105+
}
106+
107+
let raw_boot_info = RAW_BOOT_INFO.take().unwrap();
108+
109+
let phys_addr_range = {
110+
let memory = fdt.memory();
111+
let mut regions = memory.regions();
112+
113+
let mem_region = regions.next().unwrap();
114+
assert!(
115+
regions.next().is_none(),
116+
"hermit-loader can only handle one memory region yet"
117+
);
118+
119+
let mem_base = u64::try_from(mem_region.starting_address.addr()).unwrap();
120+
let mem_size = u64::try_from(mem_region.size.unwrap()).unwrap();
121+
mem_base..mem_base + mem_size
139122
};
140123

141-
unsafe {
142-
BOOT_INFO = Some(boot_info);
143-
}
124+
let device_tree = {
125+
let fdt_addr = start::get_fdt_ptr().expose_addr();
126+
DeviceTreeAddress::new(fdt_addr.try_into().unwrap())
127+
};
128+
129+
let boot_info = BootInfo {
130+
hardware_info: HardwareInfo {
131+
phys_addr_range,
132+
serial_port_base: None,
133+
device_tree,
134+
},
135+
load_info,
136+
platform_info: PlatformInfo::LinuxBoot,
137+
};
138+
139+
info!("boot_info = {boot_info:#?}");
140+
let boot_info_ptr = raw_boot_info.insert(RawBootInfo::from(boot_info));
141+
info!("boot_info at {boot_info_ptr:p}");
144142

145143
// Check expected signature of entry function
146144
let entry: Entry = {
@@ -158,7 +156,7 @@ pub unsafe fn boot_kernel(kernel_info: LoadedKernel) -> ! {
158156
entry = in(reg) entry,
159157
stack = in(reg) start::get_stack_ptr(),
160158
in("a0") start::get_hart_id(),
161-
in("a1") BOOT_INFO.as_ref().unwrap(),
159+
in("a1") boot_info_ptr,
162160
options(noreturn)
163161
)
164162
}

‎src/arch/x86_64/fdt.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ use alloc::format;
33
use multiboot::information::{MemoryType, Multiboot};
44
use vm_fdt::{Error as FdtError, FdtWriter};
55

6-
use super::{mb_info, MEM};
6+
use super::{mb_info, Mem};
77

88
pub struct DeviceTree;
99

1010
impl DeviceTree {
1111
#[cfg(all(target_os = "none", not(feature = "fc")))]
1212
pub fn create() -> Result<&'static [u8], FdtError> {
13-
let multiboot = unsafe { Multiboot::from_ptr(mb_info as u64, &mut MEM).unwrap() };
13+
let mut mem = Mem;
14+
let multiboot = unsafe { Multiboot::from_ptr(mb_info as u64, &mut mem).unwrap() };
1415

1516
let all_regions = multiboot
1617
.memory_regions()

0 commit comments

Comments
 (0)