Skip to content

Commit d658dca

Browse files
committed
style: apply rustfmt and tidy up imports across arch modules
Reformat long expressions (VMA inserts, page-table walks, error messages) to rustfmt line-wrapping, normalize indentation in clear_user_space, and regroup/sort imports (module- vs. function-local, std/crate blocks). Reorder pub-use reexports in arch/mod.rs and fix the missing trailing newline. No functional change.
1 parent c0dadd7 commit d658dca

9 files changed

Lines changed: 235 additions & 172 deletions

File tree

src/arch/aarch64/kernel/interrupts.rs

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,7 @@ pub(crate) extern "C" fn do_sync(state: &mut State) {
219219
* COW-marked page, which can happen e.g. when the kernel writes
220220
* argv/envp into the freshly-mapped user page during the loader path.
221221
*/
222-
if ec == ESR_EL1::EC::Value::DataAbortCurrentEL
223-
|| ec == ESR_EL1::EC::Value::DataAbortLowerEL
224-
{
222+
if ec == ESR_EL1::EC::Value::DataAbortCurrentEL || ec == ESR_EL1::EC::Value::DataAbortLowerEL {
225223
#[cfg(feature = "common-os")]
226224
increment_irq_counter(PAGE_FAULT_IRQ);
227225

@@ -236,29 +234,35 @@ pub(crate) extern "C" fn do_sync(state: &mut State) {
236234
let is_permission_fault = (0b00_1100..=0b00_1111).contains(&dfsc);
237235

238236
#[cfg(all(feature = "common-os", feature = "fork"))]
239-
if is_write
240-
&& is_permission_fault
241-
&& do_cow_fault(VirtAddr::new(far))
242-
{
237+
if is_write && is_permission_fault && do_cow_fault(VirtAddr::new(far)) {
243238
// Faulting instruction is retried on `eret` from the trap.
244239
return;
245240
}
246241

247242
#[cfg(feature = "common-os")]
248243
{
249-
use align_address::Align;
250244
use core::ops::Bound;
245+
246+
use align_address::Align;
247+
251248
use crate::mm::FrameAlloc;
252249
use crate::mm::vma::VirtualMemoryAreaProt;
253250

254251
let addr = VirtAddr::new(far).align_down(BasePageSize::SIZE);
255252
let current_task = core_scheduler().get_current_task();
256-
let current_task_borrowed = current_task.borrow();
257-
let guard = current_task_borrowed.vmas.read();
253+
let current_task_borrowed = current_task.borrow();
254+
let guard = current_task_borrowed.vmas.read();
258255

259-
if let Some((_, vma)) = guard.range((Bound::Unbounded, Bound::Included(addr))).next_back() {
256+
if let Some((_, vma)) = guard
257+
.range((Bound::Unbounded, Bound::Included(addr)))
258+
.next_back()
259+
{
260260
if addr >= vma.start && addr < vma.end {
261-
let layout = PageLayout::from_size_align(BasePageSize::SIZE as usize, BasePageSize::SIZE as usize).unwrap();
261+
let layout = PageLayout::from_size_align(
262+
BasePageSize::SIZE as usize,
263+
BasePageSize::SIZE as usize,
264+
)
265+
.unwrap();
262266
let frame_range = FrameAlloc::allocate(layout).unwrap();
263267
let physaddr = PhysAddr::from(frame_range.start());
264268
let mut flags = PageTableEntryFlags::empty();
@@ -270,15 +274,15 @@ pub(crate) extern "C" fn do_sync(state: &mut State) {
270274
flags.execute_disable();
271275
}
272276

273-
paging::map::<BasePageSize>(
274-
addr,
275-
physaddr,
276-
1,
277-
flags,
278-
);
277+
paging::map::<BasePageSize>(addr, physaddr, 1, flags);
279278

280279
// clear page
281-
let slice = unsafe { core::slice::from_raw_parts_mut(addr.as_mut_ptr() as *mut u8, BasePageSize::SIZE as usize) };
280+
let slice = unsafe {
281+
core::slice::from_raw_parts_mut(
282+
addr.as_mut_ptr() as *mut u8,
283+
BasePageSize::SIZE as usize,
284+
)
285+
};
282286
slice.fill(0);
283287

284288
#[cfg(feature = "fork")]
@@ -292,16 +296,13 @@ pub(crate) extern "C" fn do_sync(state: &mut State) {
292296
let kind = dfsc_kind(dfsc);
293297
let access = if is_write { "write" } else { "read" };
294298
error!("Current stack pointer {state:p}");
295-
error!(
296-
"Unhandled data abort: {kind} on {access} of {far:#x} (DFSC={dfsc:#x})"
297-
);
299+
error!("Unhandled data abort: {kind} on {access} of {far:#x} (DFSC={dfsc:#x})");
298300
error!("Exception return address {:#x}", ELR_EL1.get());
299301
error!("Thread ID register {:#x}", TPIDR_EL0.get());
300302
error!("Table Base Register {:#x}", TTBR0_EL1.get());
301303
error!("Exception Syndrome Register {esr:#x}");
302304

303-
if let Some(irqid) =
304-
GicCpuInterface::get_and_acknowledge_interrupt(InterruptGroup::Group1)
305+
if let Some(irqid) = GicCpuInterface::get_and_acknowledge_interrupt(InterruptGroup::Group1)
305306
{
306307
GicCpuInterface::end_interrupt(irqid, InterruptGroup::Group1);
307308
} else {

src/arch/aarch64/kernel/mod.rs

Lines changed: 62 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,18 @@ pub mod serial;
1414
mod start;
1515
pub mod systemtime;
1616

17-
use alloc::alloc::alloc;
18-
use core::alloc::Layout;
17+
use alloc::alloc::{Layout, alloc};
18+
#[cfg(feature = "common-os")]
19+
use core::arch::asm;
1920
use core::arch::global_asm;
2021
use core::ptr;
22+
#[cfg(feature = "common-os")]
23+
use core::slice;
2124
use core::sync::atomic::{AtomicPtr, AtomicU32, Ordering};
2225

26+
#[cfg(feature = "common-os")]
27+
use memory_addresses::{PhysAddr, VirtAddr};
28+
2329
pub(crate) use self::interrupts::wakeup_core;
2430
pub(crate) use self::processor::set_oneshot_timer;
2531
#[cfg(feature = "common-os")]
@@ -209,10 +215,10 @@ where
209215

210216
use crate::arch::aarch64::mm::paging::{self, PageTableEntryFlags};
211217
use crate::fd::{Fd, RawFd};
212-
use crate::mm::{FrameAlloc, PageRangeAllocator};
213218
#[cfg(feature = "fork")]
214219
use crate::mm::frame_ref_inc;
215220
use crate::mm::vma::*;
221+
use crate::mm::{FrameAlloc, PageRangeAllocator};
216222

217223
// Each process has its own object map.
218224
let mut object_map = HashMap::<RawFd, Arc<async_lock::RwLock<Fd>>, RandomState>::with_hasher(
@@ -238,7 +244,22 @@ where
238244
code_size / BasePageSize::SIZE as usize,
239245
flags,
240246
);
241-
core_scheduler().get_current_task().borrow_mut().vmas.write().insert(VirtAddr::from(USER_START), VirtualMemoryArea::new(VirtAddr::from(USER_START), VirtAddr::from(USER_START + code_size).align_up(BasePageSize::SIZE), VirtualMemoryAreaProt::READ|VirtualMemoryAreaProt::WRITE|VirtualMemoryAreaProt::EXECUTE, MemoryType::CODE));
247+
core_scheduler()
248+
.get_current_task()
249+
.borrow_mut()
250+
.vmas
251+
.write()
252+
.insert(
253+
VirtAddr::from(USER_START),
254+
VirtualMemoryArea::new(
255+
VirtAddr::from(USER_START),
256+
VirtAddr::from(USER_START + code_size).align_up(BasePageSize::SIZE),
257+
VirtualMemoryAreaProt::READ
258+
| VirtualMemoryAreaProt::WRITE
259+
| VirtualMemoryAreaProt::EXECUTE,
260+
MemoryType::CODE,
261+
),
262+
);
242263

243264
let loader_start_ptr = ptr::with_exposed_provenance_mut(USER_START.as_usize());
244265
let code_slice = unsafe { slice::from_raw_parts_mut(loader_start_ptr, code_size) };
@@ -270,10 +291,24 @@ where
270291
tls_memsz / BasePageSize::SIZE as usize,
271292
flags,
272293
);
273-
core_scheduler().get_current_task().borrow_mut().vmas.write().insert(tls_virt, VirtualMemoryArea::new(tls_virt, (tls_virt + tls_memsz).align_up(BasePageSize::SIZE), VirtualMemoryAreaProt::READ|VirtualMemoryAreaProt::WRITE, MemoryType::TLS));
274-
275-
let block =
276-
unsafe { slice::from_raw_parts_mut(tls_virt.as_mut_ptr(), tls_offset + tls_size as usize) };
294+
core_scheduler()
295+
.get_current_task()
296+
.borrow_mut()
297+
.vmas
298+
.write()
299+
.insert(
300+
tls_virt,
301+
VirtualMemoryArea::new(
302+
tls_virt,
303+
(tls_virt + tls_memsz).align_up(BasePageSize::SIZE),
304+
VirtualMemoryAreaProt::READ | VirtualMemoryAreaProt::WRITE,
305+
MemoryType::TLS,
306+
),
307+
);
308+
309+
let block = unsafe {
310+
slice::from_raw_parts_mut(tls_virt.as_mut_ptr(), tls_offset + tls_size as usize)
311+
};
277312
for elem in block.iter_mut() {
278313
*elem = 0;
279314
}
@@ -289,11 +324,10 @@ where
289324
let tls_init = func(code_slice, Some(tls_image))?;
290325

291326
if let Some(init) = tls_init {
292-
let template =
293-
Arc::new(crate::scheduler::task::TlsTemplate {
294-
size: tls_size as usize,
295-
init,
296-
});
327+
let template = Arc::new(crate::scheduler::task::TlsTemplate {
328+
size: tls_size as usize,
329+
init,
330+
});
297331
core_scheduler()
298332
.get_current_task()
299333
.borrow_mut()
@@ -364,10 +398,10 @@ pub unsafe fn jump_to_user_land(entry_point: usize, arg: alloc::vec::Vec<&str>)
364398

365399
use crate::arch::aarch64::kernel::scheduler::TaskStacks;
366400
use crate::arch::aarch64::mm::paging::{self, PageTableEntryFlags};
367-
use crate::mm::{FrameAlloc, PageRangeAllocator};
368401
#[cfg(feature = "fork")]
369402
use crate::mm::frame_ref_inc;
370403
use crate::mm::vma::*;
404+
use crate::mm::{FrameAlloc, PageRangeAllocator};
371405

372406
debug!("Create new file descriptor table");
373407
core_scheduler().recreate_objmap().unwrap();
@@ -386,7 +420,20 @@ pub unsafe fn jump_to_user_land(entry_point: usize, arg: alloc::vec::Vec<&str>)
386420
USER_STACK_SIZE / BasePageSize::SIZE as usize,
387421
flags,
388422
);
389-
core_scheduler().get_current_task().borrow_mut().vmas.write().insert(USER_STACK, VirtualMemoryArea::new(USER_STACK, USER_STACK+USER_STACK_SIZE, VirtualMemoryAreaProt::READ|VirtualMemoryAreaProt::WRITE, MemoryType::STACK));
423+
core_scheduler()
424+
.get_current_task()
425+
.borrow_mut()
426+
.vmas
427+
.write()
428+
.insert(
429+
USER_STACK,
430+
VirtualMemoryArea::new(
431+
USER_STACK,
432+
USER_STACK + USER_STACK_SIZE,
433+
VirtualMemoryAreaProt::READ | VirtualMemoryAreaProt::WRITE,
434+
MemoryType::STACK,
435+
),
436+
);
390437
#[cfg(feature = "fork")]
391438
for i in 0..USER_STACK_SIZE / BasePageSize::SIZE as usize {
392439
frame_ref_inc(phys_addr + i * BasePageSize::SIZE as usize);

src/arch/aarch64/kernel/scheduler.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,8 +334,7 @@ impl Task {
334334
) {
335335
unsafe {
336336
// Debug marker at the very top of the kernel stack.
337-
let mut stack = self.stacks.get_kernel_stack()
338-
+ self.stacks.get_kernel_stack_size()
337+
let mut stack = self.stacks.get_kernel_stack() + self.stacks.get_kernel_stack_size()
339338
- TaskStacks::MARKER_SIZE;
340339
*stack.as_mut_ptr::<u64>() = 0xdead_beefu64;
341340

src/arch/aarch64/mm/mod.rs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
pub(crate) mod paging;
22

33
#[cfg(feature = "common-os")]
4-
pub use paging::{
5-
clear_user_space, create_new_root_page_table,
6-
drop_user_space,
7-
};
8-
4+
pub use paging::{clear_user_space, create_new_root_page_table, drop_user_space};
95
#[cfg(all(feature = "common-os", feature = "fork"))]
10-
pub use paging::{
11-
copy_current_root_page_table, copy_kernel_stack_to, prepare_mem_copy_on_write
12-
};
6+
pub use paging::{copy_current_root_page_table, copy_kernel_stack_to, prepare_mem_copy_on_write};
137

148
use crate::mm::{FrameAlloc, PageAlloc, PageRangeAllocator};
159

@@ -28,10 +22,7 @@ pub fn allocate_thread_tls(template: &crate::scheduler::task::TlsTemplate) -> u6
2822
use free_list::PageLayout;
2923
use memory_addresses::arch::aarch64::{PhysAddr, VirtAddr};
3024

31-
use crate::arch::aarch64::mm::paging::{
32-
self, BasePageSize, PageSize, PageTableEntryFlags,
33-
};
34-
use crate::mm::{FrameAlloc, PageAlloc, PageRangeAllocator};
25+
use crate::arch::aarch64::mm::paging::{self, BasePageSize, PageSize, PageTableEntryFlags};
3526
#[cfg(feature = "fork")]
3627
use crate::mm::frame_ref_inc;
3728

src/arch/aarch64/mm/paging.rs

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -854,29 +854,23 @@ pub fn do_cow_fault(faulting_addr: VirtAddr) -> bool {
854854
}
855855

856856
let l1 = unsafe {
857-
&mut *ptr::with_exposed_provenance_mut::<PageTable<L1Table>>(
858-
l0_entry.address().as_usize(),
859-
)
857+
&mut *ptr::with_exposed_provenance_mut::<PageTable<L1Table>>(l0_entry.address().as_usize())
860858
};
861859
let l1_entry = &mut l1.entries[l1_idx];
862860
if !l1_entry.is_present() || !l1_entry.is_table_or_4kib_page() {
863861
return false;
864862
}
865863

866864
let l2 = unsafe {
867-
&mut *ptr::with_exposed_provenance_mut::<PageTable<L2Table>>(
868-
l1_entry.address().as_usize(),
869-
)
865+
&mut *ptr::with_exposed_provenance_mut::<PageTable<L2Table>>(l1_entry.address().as_usize())
870866
};
871867
let l2_entry = &mut l2.entries[l2_idx];
872868
if !l2_entry.is_present() || !l2_entry.is_table_or_4kib_page() {
873869
return false;
874870
}
875871

876872
let l3 = unsafe {
877-
&mut *ptr::with_exposed_provenance_mut::<PageTable<L3Table>>(
878-
l2_entry.address().as_usize(),
879-
)
873+
&mut *ptr::with_exposed_provenance_mut::<PageTable<L3Table>>(l2_entry.address().as_usize())
880874
};
881875
let l3_entry = &mut l3.entries[l3_idx];
882876

@@ -1107,23 +1101,23 @@ pub fn drop_user_space(l0_phys: usize) {
11071101
clear_l0(l0_phys);
11081102

11091103
// The L0 table is not loaded on any core, so no TLB flush is necessary.
1110-
let range =
1111-
free_list::PageRange::new(l0_phys, l0_phys + BasePageSize::SIZE as usize).unwrap();
1104+
let range = free_list::PageRange::new(l0_phys, l0_phys + BasePageSize::SIZE as usize).unwrap();
11121105
unsafe { FrameAlloc::deallocate(range) };
11131106
}
11141107

11151108
/// Clear the user-space portion of the currently active address space.
11161109
#[cfg(feature = "common-os")]
11171110
pub fn clear_user_space() {
1118-
use crate::fd::STDERR_FILENO;
1119-
use crate::core_scheduler;
11201111
use aarch64_cpu::registers::TTBR0_EL1;
11211112

1113+
use crate::core_scheduler;
1114+
use crate::fd::STDERR_FILENO;
1115+
11221116
core_scheduler()
1123-
.get_current_task()
1124-
.borrow()
1125-
.vmas
1126-
.write()
1117+
.get_current_task()
1118+
.borrow()
1119+
.vmas
1120+
.write()
11271121
.clear();
11281122
core_scheduler()
11291123
.get_current_task_object_map()
@@ -1157,8 +1151,7 @@ pub fn create_new_root_page_table() -> usize {
11571151
let new_l0_phys = frame_range.start();
11581152

11591153
let cur_l0_phys = TTBR0_EL1.get_baddr() as usize;
1160-
let cur_l0 =
1161-
unsafe { &*ptr::with_exposed_provenance::<PageTable<L0Table>>(cur_l0_phys) };
1154+
let cur_l0 = unsafe { &*ptr::with_exposed_provenance::<PageTable<L0Table>>(cur_l0_phys) };
11621155

11631156
let new_l0 =
11641157
unsafe { &mut *ptr::with_exposed_provenance_mut::<PageTable<L0Table>>(new_l0_phys) };
@@ -1218,8 +1211,7 @@ pub fn copy_current_root_page_table() -> usize {
12181211
unsafe { &mut *ptr::with_exposed_provenance_mut::<PageTable<L0Table>>(new_l0_phys) };
12191212

12201213
let cur_l0_phys = TTBR0_EL1.get_baddr() as usize;
1221-
let cur_l0 =
1222-
unsafe { &*ptr::with_exposed_provenance::<PageTable<L0Table>>(cur_l0_phys) };
1214+
let cur_l0 = unsafe { &*ptr::with_exposed_provenance::<PageTable<L0Table>>(cur_l0_phys) };
12231215

12241216
// Inherit kernel L0 entries verbatim (sharing the L1/L2/L3 tables
12251217
// below). Only the user-space slot needs a deep copy with COW so
@@ -1247,9 +1239,8 @@ pub fn copy_current_root_page_table() -> usize {
12471239
let cur_l1 = unsafe {
12481240
&*ptr::with_exposed_provenance::<PageTable<L1Table>>(cur_l0_entry.address().as_usize())
12491241
};
1250-
let new_l1 = unsafe {
1251-
&mut *ptr::with_exposed_provenance_mut::<PageTable<L1Table>>(new_l1_phys)
1252-
};
1242+
let new_l1 =
1243+
unsafe { &mut *ptr::with_exposed_provenance_mut::<PageTable<L1Table>>(new_l1_phys) };
12531244

12541245
for l1_idx in 0..512usize {
12551246
let cur_l1_entry = &cur_l1.entries[l1_idx];
@@ -1303,10 +1294,11 @@ pub fn copy_current_root_page_table() -> usize {
13031294
// The child holds an additional reference to every
13041295
// user-space frame in this page table.
13051296
for entry in new_l3.entries.iter() {
1306-
let flags = PageTableEntryFlags::from_bits_truncate(
1307-
entry.physical_address_and_flags,
1308-
);
1309-
if flags.contains(PageTableEntryFlags::PRESENT|PageTableEntryFlags::USER_ACCESSIBLE) {
1297+
let flags =
1298+
PageTableEntryFlags::from_bits_truncate(entry.physical_address_and_flags);
1299+
if flags.contains(
1300+
PageTableEntryFlags::PRESENT | PageTableEntryFlags::USER_ACCESSIBLE,
1301+
) {
13101302
crate::mm::frame_ref_inc(entry.address());
13111303
}
13121304
}

0 commit comments

Comments
 (0)