From 315d4d3836ed052019602589dfb99e601623fdfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Asensio=20Garc=C3=ADa?= Date: Fri, 27 Jan 2023 16:11:34 +0100 Subject: [PATCH 1/7] Fix clippy in bootloader_api --- api/build.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/api/build.rs b/api/build.rs index 3621eeef..e0b1437d 100644 --- a/api/build.rs +++ b/api/build.rs @@ -34,11 +34,11 @@ fn main() { i = i, j = j, a = (0..i) - .map(|idx| format!("a[{}]", idx)) + .map(|idx| format!("a[{idx}]")) .collect::>() .join(","), b = (0..j) - .map(|idx| format!("b[{}]", idx)) + .map(|idx| format!("b[{idx}]")) .collect::>() .join(","), ); @@ -56,12 +56,11 @@ fn main() { Path::new(&out_dir).join("version_info.rs"), format!( " - pub const VERSION_MAJOR: u16 = {}; - pub const VERSION_MINOR: u16 = {}; - pub const VERSION_PATCH: u16 = {}; - pub const VERSION_PRE: bool = {}; - ", - version_major, version_minor, version_patch, pre_release + pub const VERSION_MAJOR: u16 = {version_major}; + pub const VERSION_MINOR: u16 = {version_minor}; + pub const VERSION_PATCH: u16 = {version_patch}; + pub const VERSION_PRE: bool = {pre_release}; + " ), ) .unwrap(); From 1d9840cd8cb8f840a09d17bd24e388cf8530a32d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Asensio=20Garc=C3=ADa?= Date: Fri, 27 Jan 2023 16:30:41 +0100 Subject: [PATCH 2/7] Fix clippy in tests --- tests/test_kernels/config_file/src/bin/basic_boot.rs | 4 ++-- .../config_file/src/bin/basic_boot_broken_config_file.rs | 4 ++-- tests/test_kernels/default_settings/src/bin/basic_boot.rs | 4 ++-- .../default_settings/src/bin/check_boot_info.rs | 2 +- tests/test_kernels/higher_half/src/bin/check_boot_info.rs | 2 +- .../test_kernels/higher_half/src/bin/verify_higher_half.rs | 2 +- tests/test_kernels/lto/src/bin/basic_boot.rs | 2 +- tests/test_kernels/map_phys_mem/src/bin/access_phys_mem.rs | 2 +- tests/test_kernels/map_phys_mem/src/bin/check_boot_info.rs | 2 +- tests/test_kernels/pie/src/bin/basic_boot.rs | 2 +- tests/test_kernels/pie/src/bin/check_boot_info.rs | 2 +- tests/test_kernels/pie/src/bin/global_variable.rs | 2 +- tests/test_kernels/ramdisk/src/bin/basic_boot.rs | 2 +- tests/test_kernels/ramdisk/src/bin/ramdisk.rs | 6 +++--- 14 files changed, 19 insertions(+), 19 deletions(-) diff --git a/tests/test_kernels/config_file/src/bin/basic_boot.rs b/tests/test_kernels/config_file/src/bin/basic_boot.rs index d6401dc7..5232aa80 100644 --- a/tests/test_kernels/config_file/src/bin/basic_boot.rs +++ b/tests/test_kernels/config_file/src/bin/basic_boot.rs @@ -8,7 +8,7 @@ use test_kernel_config_file::{exit_qemu, serial, QemuExitCode}; entry_point!(kernel_main); fn kernel_main(boot_info: &'static mut BootInfo) -> ! { - writeln!(serial(), "Entered kernel with boot info: {:?}", boot_info).unwrap(); + writeln!(serial(), "Entered kernel with boot info: {boot_info:?}").unwrap(); exit_qemu(QemuExitCode::Success); } @@ -16,6 +16,6 @@ fn kernel_main(boot_info: &'static mut BootInfo) -> ! { #[panic_handler] #[cfg(not(test))] fn panic(info: &core::panic::PanicInfo) -> ! { - let _ = writeln!(serial(), "PANIC: {}", info); + let _ = writeln!(serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/config_file/src/bin/basic_boot_broken_config_file.rs b/tests/test_kernels/config_file/src/bin/basic_boot_broken_config_file.rs index d6401dc7..5232aa80 100644 --- a/tests/test_kernels/config_file/src/bin/basic_boot_broken_config_file.rs +++ b/tests/test_kernels/config_file/src/bin/basic_boot_broken_config_file.rs @@ -8,7 +8,7 @@ use test_kernel_config_file::{exit_qemu, serial, QemuExitCode}; entry_point!(kernel_main); fn kernel_main(boot_info: &'static mut BootInfo) -> ! { - writeln!(serial(), "Entered kernel with boot info: {:?}", boot_info).unwrap(); + writeln!(serial(), "Entered kernel with boot info: {boot_info:?}").unwrap(); exit_qemu(QemuExitCode::Success); } @@ -16,6 +16,6 @@ fn kernel_main(boot_info: &'static mut BootInfo) -> ! { #[panic_handler] #[cfg(not(test))] fn panic(info: &core::panic::PanicInfo) -> ! { - let _ = writeln!(serial(), "PANIC: {}", info); + let _ = writeln!(serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/default_settings/src/bin/basic_boot.rs b/tests/test_kernels/default_settings/src/bin/basic_boot.rs index 8924e1c0..e2b7cc0b 100644 --- a/tests/test_kernels/default_settings/src/bin/basic_boot.rs +++ b/tests/test_kernels/default_settings/src/bin/basic_boot.rs @@ -8,7 +8,7 @@ use test_kernel_default_settings::{exit_qemu, serial, QemuExitCode}; entry_point!(kernel_main); fn kernel_main(boot_info: &'static mut BootInfo) -> ! { - writeln!(serial(), "Entered kernel with boot info: {:?}", boot_info).unwrap(); + writeln!(serial(), "Entered kernel with boot info: {boot_info:?}").unwrap(); exit_qemu(QemuExitCode::Success); } @@ -16,6 +16,6 @@ fn kernel_main(boot_info: &'static mut BootInfo) -> ! { #[panic_handler] #[cfg(not(test))] fn panic(info: &core::panic::PanicInfo) -> ! { - let _ = writeln!(serial(), "PANIC: {}", info); + let _ = writeln!(serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/default_settings/src/bin/check_boot_info.rs b/tests/test_kernels/default_settings/src/bin/check_boot_info.rs index df1721d6..bc8fbad7 100644 --- a/tests/test_kernels/default_settings/src/bin/check_boot_info.rs +++ b/tests/test_kernels/default_settings/src/bin/check_boot_info.rs @@ -45,6 +45,6 @@ fn kernel_main(boot_info: &'static mut BootInfo) -> ! { fn panic(info: &core::panic::PanicInfo) -> ! { use core::fmt::Write; - let _ = writeln!(test_kernel_default_settings::serial(), "PANIC: {}", info); + let _ = writeln!(test_kernel_default_settings::serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/higher_half/src/bin/check_boot_info.rs b/tests/test_kernels/higher_half/src/bin/check_boot_info.rs index c35bb534..3cc96c3c 100644 --- a/tests/test_kernels/higher_half/src/bin/check_boot_info.rs +++ b/tests/test_kernels/higher_half/src/bin/check_boot_info.rs @@ -45,6 +45,6 @@ fn kernel_main(boot_info: &'static mut BootInfo) -> ! { fn panic(info: &core::panic::PanicInfo) -> ! { use core::fmt::Write; - let _ = writeln!(test_kernel_higher_half::serial(), "PANIC: {}", info); + let _ = writeln!(test_kernel_higher_half::serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/higher_half/src/bin/verify_higher_half.rs b/tests/test_kernels/higher_half/src/bin/verify_higher_half.rs index 930ff40d..79a1e964 100644 --- a/tests/test_kernels/higher_half/src/bin/verify_higher_half.rs +++ b/tests/test_kernels/higher_half/src/bin/verify_higher_half.rs @@ -34,6 +34,6 @@ fn kernel_main(boot_info: &'static mut BootInfo) -> ! { fn panic(info: &core::panic::PanicInfo) -> ! { use core::fmt::Write; - let _ = writeln!(test_kernel_higher_half::serial(), "PANIC: {}", info); + let _ = writeln!(test_kernel_higher_half::serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/lto/src/bin/basic_boot.rs b/tests/test_kernels/lto/src/bin/basic_boot.rs index 987f6781..bce7bf23 100644 --- a/tests/test_kernels/lto/src/bin/basic_boot.rs +++ b/tests/test_kernels/lto/src/bin/basic_boot.rs @@ -16,6 +16,6 @@ fn kernel_main(_boot_info: &'static mut BootInfo) -> ! { fn panic(info: &core::panic::PanicInfo) -> ! { use core::fmt::Write; - let _ = writeln!(test_kernel_lto::serial(), "PANIC: {}", info); + let _ = writeln!(test_kernel_lto::serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/map_phys_mem/src/bin/access_phys_mem.rs b/tests/test_kernels/map_phys_mem/src/bin/access_phys_mem.rs index 2b906603..538362fb 100644 --- a/tests/test_kernels/map_phys_mem/src/bin/access_phys_mem.rs +++ b/tests/test_kernels/map_phys_mem/src/bin/access_phys_mem.rs @@ -22,6 +22,6 @@ fn panic(info: &core::panic::PanicInfo) -> ! { use core::fmt::Write; use test_kernel_map_phys_mem::serial; - let _ = writeln!(serial(), "PANIC: {}", info); + let _ = writeln!(serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/map_phys_mem/src/bin/check_boot_info.rs b/tests/test_kernels/map_phys_mem/src/bin/check_boot_info.rs index 7fa487b7..5b3a8610 100644 --- a/tests/test_kernels/map_phys_mem/src/bin/check_boot_info.rs +++ b/tests/test_kernels/map_phys_mem/src/bin/check_boot_info.rs @@ -49,6 +49,6 @@ fn panic(info: &core::panic::PanicInfo) -> ! { use core::fmt::Write; use test_kernel_map_phys_mem::serial; - let _ = writeln!(serial(), "PANIC: {}", info); + let _ = writeln!(serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/pie/src/bin/basic_boot.rs b/tests/test_kernels/pie/src/bin/basic_boot.rs index 2201d179..468dab12 100644 --- a/tests/test_kernels/pie/src/bin/basic_boot.rs +++ b/tests/test_kernels/pie/src/bin/basic_boot.rs @@ -16,6 +16,6 @@ fn kernel_main(_boot_info: &'static mut BootInfo) -> ! { fn panic(info: &core::panic::PanicInfo) -> ! { use core::fmt::Write; - let _ = writeln!(test_kernel_pie::serial(), "PANIC: {}", info); + let _ = writeln!(test_kernel_pie::serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/pie/src/bin/check_boot_info.rs b/tests/test_kernels/pie/src/bin/check_boot_info.rs index a7b3a5e3..eba687e0 100644 --- a/tests/test_kernels/pie/src/bin/check_boot_info.rs +++ b/tests/test_kernels/pie/src/bin/check_boot_info.rs @@ -45,6 +45,6 @@ fn kernel_main(boot_info: &'static mut BootInfo) -> ! { fn panic(info: &core::panic::PanicInfo) -> ! { use core::fmt::Write; - let _ = writeln!(test_kernel_pie::serial(), "PANIC: {}", info); + let _ = writeln!(test_kernel_pie::serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/pie/src/bin/global_variable.rs b/tests/test_kernels/pie/src/bin/global_variable.rs index cba6338b..e349e7ed 100644 --- a/tests/test_kernels/pie/src/bin/global_variable.rs +++ b/tests/test_kernels/pie/src/bin/global_variable.rs @@ -31,6 +31,6 @@ fn kernel_main(_boot_info: &'static mut BootInfo) -> ! { fn panic(info: &core::panic::PanicInfo) -> ! { use core::fmt::Write; - let _ = writeln!(test_kernel_pie::serial(), "PANIC: {}", info); + let _ = writeln!(test_kernel_pie::serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/ramdisk/src/bin/basic_boot.rs b/tests/test_kernels/ramdisk/src/bin/basic_boot.rs index 515cd22d..949c878b 100644 --- a/tests/test_kernels/ramdisk/src/bin/basic_boot.rs +++ b/tests/test_kernels/ramdisk/src/bin/basic_boot.rs @@ -16,6 +16,6 @@ fn kernel_main(_boot_info: &'static mut BootInfo) -> ! { fn panic(info: &core::panic::PanicInfo) -> ! { use core::fmt::Write; - let _ = writeln!(test_kernel_ramdisk::serial(), "PANIC: {}", info); + let _ = writeln!(test_kernel_ramdisk::serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } diff --git a/tests/test_kernels/ramdisk/src/bin/ramdisk.rs b/tests/test_kernels/ramdisk/src/bin/ramdisk.rs index d2bbda87..44fb5cd6 100644 --- a/tests/test_kernels/ramdisk/src/bin/ramdisk.rs +++ b/tests/test_kernels/ramdisk/src/bin/ramdisk.rs @@ -8,7 +8,7 @@ use test_kernel_ramdisk::{exit_qemu, serial, QemuExitCode, RAMDISK_CONTENTS}; entry_point!(kernel_main); fn kernel_main(boot_info: &'static mut BootInfo) -> ! { - writeln!(serial(), "Boot info: {:?}", boot_info).unwrap(); + writeln!(serial(), "Boot info: {boot_info:?}").unwrap(); assert!(boot_info.ramdisk_addr.into_option().is_some()); assert_eq!(boot_info.ramdisk_len as usize, RAMDISK_CONTENTS.len()); let actual_ramdisk = unsafe { @@ -17,7 +17,7 @@ fn kernel_main(boot_info: &'static mut BootInfo) -> ! { boot_info.ramdisk_len as usize, ) }; - writeln!(serial(), "Actual contents: {:?}", actual_ramdisk).unwrap(); + writeln!(serial(), "Actual contents: {actual_ramdisk:?}").unwrap(); assert_eq!(RAMDISK_CONTENTS, actual_ramdisk); exit_qemu(QemuExitCode::Success); @@ -27,6 +27,6 @@ fn kernel_main(boot_info: &'static mut BootInfo) -> ! { #[cfg(not(test))] #[panic_handler] fn panic(info: &core::panic::PanicInfo) -> ! { - let _ = writeln!(test_kernel_ramdisk::serial(), "PANIC: {}", info); + let _ = writeln!(test_kernel_ramdisk::serial(), "PANIC: {info}"); exit_qemu(QemuExitCode::Failed); } From 7fb15e6caf7f3c5dc79af513a44cce41b226b337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Asensio=20Garc=C3=ADa?= Date: Fri, 27 Jan 2023 16:36:29 +0100 Subject: [PATCH 3/7] Fix clippy in common --- common/src/logger.rs | 2 +- common/src/serial.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/logger.rs b/common/src/logger.rs index 582e65e2..c2cfa54c 100644 --- a/common/src/logger.rs +++ b/common/src/logger.rs @@ -27,7 +27,7 @@ impl LockedLogger { }; let serial = match serial_logger_status { - true => Some(Spinlock::new(SerialPort::new())), + true => Some(Spinlock::new(Default::default())), false => None, }; diff --git a/common/src/serial.rs b/common/src/serial.rs index 1da346f2..8d350e18 100644 --- a/common/src/serial.rs +++ b/common/src/serial.rs @@ -4,8 +4,8 @@ pub struct SerialPort { port: uart_16550::SerialPort, } -impl SerialPort { - pub fn new() -> Self { +impl Default for SerialPort { + fn default() -> Self { let mut port = unsafe { uart_16550::SerialPort::new(0x3F8) }; port.init(); Self { port } From 49ed52b444d613e90539108c969a4b10c1dbcd72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Asensio=20Garc=C3=ADa?= Date: Fri, 27 Jan 2023 16:41:43 +0100 Subject: [PATCH 4/7] Fix clippy in bios --- bios/stage-2/src/main.rs | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/bios/stage-2/src/main.rs b/bios/stage-2/src/main.rs index 137ca1a2..4e873699 100644 --- a/bios/stage-2/src/main.rs +++ b/bios/stage-2/src/main.rs @@ -102,11 +102,8 @@ fn start(disk_number: u16, partition_table_start: *const u8) -> ! { let kernel_page_size = (((kernel_len - 1) / 4096) + 1) as usize; let ramdisk_start = KERNEL_DST.wrapping_add(kernel_page_size * 4096); writeln!(screen::Writer, "Loading ramdisk...").unwrap(); - let ramdisk_len = match try_load_file("ramdisk", ramdisk_start, &mut fs, &mut disk, disk_buffer) - { - Some(s) => s, - None => 0u64, - }; + let ramdisk_len = + try_load_file("ramdisk", ramdisk_start, &mut fs, &mut disk, disk_buffer).unwrap_or(0u64); if ramdisk_len == 0 { writeln!(screen::Writer, "No ramdisk found, skipping.").unwrap(); @@ -114,16 +111,14 @@ fn start(disk_number: u16, partition_table_start: *const u8) -> ! { writeln!(screen::Writer, "Loaded ramdisk at {ramdisk_start:#p}").unwrap(); } let config_file_start = ramdisk_start.wrapping_add(ramdisk_len.try_into().unwrap()); - let config_file_len = match try_load_file( + let config_file_len = try_load_file( "config.json", config_file_start, &mut fs, &mut disk, disk_buffer, - ) { - Some(s) => s, - None => 0u64, - }; + ) + .unwrap_or(0); let memory_map = unsafe { memory_map::query_memory_map() }.unwrap(); writeln!(screen::Writer, "{memory_map:x?}").unwrap(); From 63c9810735a20e5f5ac4d8d14689b552167073b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Asensio=20Garc=C3=ADa?= Date: Fri, 27 Jan 2023 16:49:09 +0100 Subject: [PATCH 5/7] Fix clippy in uefi --- uefi/src/main.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/uefi/src/main.rs b/uefi/src/main.rs index 47653ca1..56aea62c 100644 --- a/uefi/src/main.rs +++ b/uefi/src/main.rs @@ -187,8 +187,8 @@ fn main_inner(image: Handle, mut st: SystemTable) -> Status { .or_else(|| config_entries.find(|entry| matches!(entry.guid, cfg::ACPI_GUID))); rsdp.map(|entry| PhysAddr::new(entry.address as u64)) }, - ramdisk_addr: ramdisk_addr, - ramdisk_len: ramdisk_len, + ramdisk_addr, + ramdisk_len, }; bootloader_x86_64_common::load_and_switch_to_kernel( @@ -382,7 +382,7 @@ fn load_file_from_tftp_boot_server( let filename = CStr8::from_bytes_with_nul(name.as_bytes()).unwrap(); // Determine the kernel file size. - let file_size = base_code.tftp_get_file_size(&server_ip, &filename).ok()?; + let file_size = base_code.tftp_get_file_size(&server_ip, filename).ok()?; let kernel_size = usize::try_from(file_size).expect("The file size should fit into usize"); // Allocate some memory for the kernel file. @@ -398,7 +398,7 @@ fn load_file_from_tftp_boot_server( // Load the kernel file. base_code - .tftp_read_file(&server_ip, &filename, Some(slice)) + .tftp_read_file(&server_ip, filename, Some(slice)) .expect("Failed to read kernel file from the TFTP boot server"); Some(slice) From aecd0a4dd9d0c2fd3b053cc4f15f1f28b60d5b48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Asensio=20Garc=C3=ADa?= Date: Fri, 27 Jan 2023 17:08:17 +0100 Subject: [PATCH 6/7] Improve SerialPort constructor --- common/src/logger.rs | 2 +- common/src/serial.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/logger.rs b/common/src/logger.rs index c2cfa54c..a7491c58 100644 --- a/common/src/logger.rs +++ b/common/src/logger.rs @@ -27,7 +27,7 @@ impl LockedLogger { }; let serial = match serial_logger_status { - true => Some(Spinlock::new(Default::default())), + true => Some(Spinlock::new(unsafe { SerialPort::init() })), false => None, }; diff --git a/common/src/serial.rs b/common/src/serial.rs index 8d350e18..59f7b172 100644 --- a/common/src/serial.rs +++ b/common/src/serial.rs @@ -4,8 +4,8 @@ pub struct SerialPort { port: uart_16550::SerialPort, } -impl Default for SerialPort { - fn default() -> Self { +impl SerialPort { + pub unsafe fn init() -> Self { let mut port = unsafe { uart_16550::SerialPort::new(0x3F8) }; port.init(); Self { port } From cfded08f7e8af7d62c4f9901a8de610dd80d1e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Asensio=20Garc=C3=ADa?= <101601871+asensio-project@users.noreply.github.com> Date: Fri, 27 Jan 2023 17:21:04 +0100 Subject: [PATCH 7/7] Add docs for serial port --- common/src/serial.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/common/src/serial.rs b/common/src/serial.rs index 59f7b172..1882e366 100644 --- a/common/src/serial.rs +++ b/common/src/serial.rs @@ -5,6 +5,9 @@ pub struct SerialPort { } impl SerialPort { + /// # Safety + /// + /// unsafe because this function must only be called once pub unsafe fn init() -> Self { let mut port = unsafe { uart_16550::SerialPort::new(0x3F8) }; port.init();