diff --git a/.rustfmt.toml b/.rustfmt.toml index 33aca681..c05f1817 100644 --- a/.rustfmt.toml +++ b/.rustfmt.toml @@ -5,5 +5,3 @@ format_code_in_doc_comments = true normalize_comments = true wrap_comments = true comment_width = 100 -report_fixme = "Always" -report_todo = "Always" diff --git a/06_uart_chainloader/demo_payload_rpi3.img b/06_uart_chainloader/demo_payload_rpi3.img index c0f226a7..bcb46b61 100755 Binary files a/06_uart_chainloader/demo_payload_rpi3.img and b/06_uart_chainloader/demo_payload_rpi3.img differ diff --git a/06_uart_chainloader/demo_payload_rpi4.img b/06_uart_chainloader/demo_payload_rpi4.img index 82f75d6a..92995703 100755 Binary files a/06_uart_chainloader/demo_payload_rpi4.img and b/06_uart_chainloader/demo_payload_rpi4.img differ diff --git a/09_privilege_level/README.md b/09_privilege_level/README.md index 63cbcb89..dcf0f929 100644 --- a/09_privilege_level/README.md +++ b/09_privilege_level/README.md @@ -487,7 +487,7 @@ diff -uNr 08_hw_debug_JTAG/src/exception.rs 09_privilege_level/src/exception.rs + +/// Kernel privilege levels. +#[allow(missing_docs)] -+#[derive(PartialEq)] ++#[derive(Eq, PartialEq)] +pub enum PrivilegeLevel { + User, + Kernel, diff --git a/09_privilege_level/src/exception.rs b/09_privilege_level/src/exception.rs index b80248f7..d5f2e68e 100644 --- a/09_privilege_level/src/exception.rs +++ b/09_privilege_level/src/exception.rs @@ -21,7 +21,7 @@ pub use arch_exception::current_privilege_level; /// Kernel privilege levels. #[allow(missing_docs)] -#[derive(PartialEq)] +#[derive(Eq, PartialEq)] pub enum PrivilegeLevel { User, Kernel, diff --git a/10_virtual_mem_part1_identity_mapping/src/exception.rs b/10_virtual_mem_part1_identity_mapping/src/exception.rs index b80248f7..d5f2e68e 100644 --- a/10_virtual_mem_part1_identity_mapping/src/exception.rs +++ b/10_virtual_mem_part1_identity_mapping/src/exception.rs @@ -21,7 +21,7 @@ pub use arch_exception::current_privilege_level; /// Kernel privilege levels. #[allow(missing_docs)] -#[derive(PartialEq)] +#[derive(Eq, PartialEq)] pub enum PrivilegeLevel { User, Kernel, diff --git a/11_exceptions_part1_groundwork/src/exception.rs b/11_exceptions_part1_groundwork/src/exception.rs index 696787c1..97fbad6c 100644 --- a/11_exceptions_part1_groundwork/src/exception.rs +++ b/11_exceptions_part1_groundwork/src/exception.rs @@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init}; /// Kernel privilege levels. #[allow(missing_docs)] -#[derive(PartialEq)] +#[derive(Eq, PartialEq)] pub enum PrivilegeLevel { User, Kernel, diff --git a/12_integrated_testing/Cargo.lock b/12_integrated_testing/Cargo.lock index ab04eab7..a4e82af3 100644 --- a/12_integrated_testing/Cargo.lock +++ b/12_integrated_testing/Cargo.lock @@ -24,9 +24,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] @@ -39,18 +39,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a" [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] [[package]] name = "syn" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", @@ -79,6 +79,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" diff --git a/12_integrated_testing/kernel/src/exception.rs b/12_integrated_testing/kernel/src/exception.rs index f4af8144..7ea7cd80 100644 --- a/12_integrated_testing/kernel/src/exception.rs +++ b/12_integrated_testing/kernel/src/exception.rs @@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init}; /// Kernel privilege levels. #[allow(missing_docs)] -#[derive(PartialEq)] +#[derive(Eq, PartialEq)] pub enum PrivilegeLevel { User, Kernel, diff --git a/13_exceptions_part2_peripheral_IRQs/Cargo.lock b/13_exceptions_part2_peripheral_IRQs/Cargo.lock index 05e524aa..12cd705a 100644 --- a/13_exceptions_part2_peripheral_IRQs/Cargo.lock +++ b/13_exceptions_part2_peripheral_IRQs/Cargo.lock @@ -24,9 +24,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] @@ -39,18 +39,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a" [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] [[package]] name = "syn" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", @@ -79,6 +79,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" diff --git a/13_exceptions_part2_peripheral_IRQs/kernel/src/exception.rs b/13_exceptions_part2_peripheral_IRQs/kernel/src/exception.rs index f4af8144..7ea7cd80 100644 --- a/13_exceptions_part2_peripheral_IRQs/kernel/src/exception.rs +++ b/13_exceptions_part2_peripheral_IRQs/kernel/src/exception.rs @@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init}; /// Kernel privilege levels. #[allow(missing_docs)] -#[derive(PartialEq)] +#[derive(Eq, PartialEq)] pub enum PrivilegeLevel { User, Kernel, diff --git a/14_virtual_mem_part2_mmio_remap/Cargo.lock b/14_virtual_mem_part2_mmio_remap/Cargo.lock index c732a7ab..c4b4f779 100644 --- a/14_virtual_mem_part2_mmio_remap/Cargo.lock +++ b/14_virtual_mem_part2_mmio_remap/Cargo.lock @@ -24,9 +24,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] @@ -39,18 +39,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a" [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] [[package]] name = "syn" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", @@ -79,6 +79,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" diff --git a/14_virtual_mem_part2_mmio_remap/README.md b/14_virtual_mem_part2_mmio_remap/README.md index ff6e2416..c6ef13f7 100644 --- a/14_virtual_mem_part2_mmio_remap/README.md +++ b/14_virtual_mem_part2_mmio_remap/README.md @@ -2425,7 +2425,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/kernel/src/main.rs 14_virtual_mem_ diff -uNr 13_exceptions_part2_peripheral_IRQs/kernel/src/memory/mmu/mapping_record.rs 14_virtual_mem_part2_mmio_remap/kernel/src/memory/mmu/mapping_record.rs --- 13_exceptions_part2_peripheral_IRQs/kernel/src/memory/mmu/mapping_record.rs +++ 14_virtual_mem_part2_mmio_remap/kernel/src/memory/mmu/mapping_record.rs -@@ -0,0 +1,239 @@ +@@ -0,0 +1,238 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright (c) 2020-2022 Andre Richter @@ -2531,8 +2531,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/kernel/src/memory/mmu/mapping_reco + ) -> Option<&mut MappingRecordEntry> { + self.inner + .iter_mut() -+ .filter(|x| x.is_some()) -+ .map(|x| x.as_mut().unwrap()) ++ .filter_map(|x| x.as_mut()) + .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) + .find(|x| { + if x.phys_start_addr != phys_region.start_addr() { @@ -2859,13 +2858,13 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/kernel/src/memory/mmu/types.rs 14_ +//-------------------------------------------------------------------------------------------------- + +/// A wrapper type around [Address] that ensures page alignment. -+#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] ++#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] +pub struct PageAddress { + inner: Address, +} + +/// A type that describes a region of memory in quantities of pages. -+#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] ++#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] +pub struct MemoryRegion { + start: PageAddress, + end_exclusive: PageAddress, @@ -2873,7 +2872,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/kernel/src/memory/mmu/types.rs 14_ + +/// Architecture agnostic memory attributes. +#[allow(missing_docs)] -+#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] ++#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] +pub enum MemAttributes { + CacheableDRAM, + Device, @@ -2881,7 +2880,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/kernel/src/memory/mmu/types.rs 14_ + +/// Architecture agnostic access permissions. +#[allow(missing_docs)] -+#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] ++#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] +pub enum AccessPermissions { + ReadOnly, + ReadWrite, @@ -2889,7 +2888,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/kernel/src/memory/mmu/types.rs 14_ + +/// Collection of memory attributes. +#[allow(missing_docs)] -+#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] ++#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] +pub struct AttributeFields { + pub mem_attributes: MemAttributes, + pub acc_perms: AccessPermissions, diff --git a/14_virtual_mem_part2_mmio_remap/kernel/src/exception.rs b/14_virtual_mem_part2_mmio_remap/kernel/src/exception.rs index f4af8144..7ea7cd80 100644 --- a/14_virtual_mem_part2_mmio_remap/kernel/src/exception.rs +++ b/14_virtual_mem_part2_mmio_remap/kernel/src/exception.rs @@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init}; /// Kernel privilege levels. #[allow(missing_docs)] -#[derive(PartialEq)] +#[derive(Eq, PartialEq)] pub enum PrivilegeLevel { User, Kernel, diff --git a/14_virtual_mem_part2_mmio_remap/kernel/src/memory/mmu/mapping_record.rs b/14_virtual_mem_part2_mmio_remap/kernel/src/memory/mmu/mapping_record.rs index 5bc32445..b893fee3 100644 --- a/14_virtual_mem_part2_mmio_remap/kernel/src/memory/mmu/mapping_record.rs +++ b/14_virtual_mem_part2_mmio_remap/kernel/src/memory/mmu/mapping_record.rs @@ -103,8 +103,7 @@ impl MappingRecord { ) -> Option<&mut MappingRecordEntry> { self.inner .iter_mut() - .filter(|x| x.is_some()) - .map(|x| x.as_mut().unwrap()) + .filter_map(|x| x.as_mut()) .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) .find(|x| { if x.phys_start_addr != phys_region.start_addr() { diff --git a/14_virtual_mem_part2_mmio_remap/kernel/src/memory/mmu/types.rs b/14_virtual_mem_part2_mmio_remap/kernel/src/memory/mmu/types.rs index 7a4fb071..362438fd 100644 --- a/14_virtual_mem_part2_mmio_remap/kernel/src/memory/mmu/types.rs +++ b/14_virtual_mem_part2_mmio_remap/kernel/src/memory/mmu/types.rs @@ -15,13 +15,13 @@ use core::{convert::From, iter::Step, num::NonZeroUsize, ops::Range}; //-------------------------------------------------------------------------------------------------- /// A wrapper type around [Address] that ensures page alignment. -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct PageAddress { inner: Address, } /// A type that describes a region of memory in quantities of pages. -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct MemoryRegion { start: PageAddress, end_exclusive: PageAddress, @@ -29,7 +29,7 @@ pub struct MemoryRegion { /// Architecture agnostic memory attributes. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub enum MemAttributes { CacheableDRAM, Device, @@ -37,7 +37,7 @@ pub enum MemAttributes { /// Architecture agnostic access permissions. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub enum AccessPermissions { ReadOnly, ReadWrite, @@ -45,7 +45,7 @@ pub enum AccessPermissions { /// Collection of memory attributes. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct AttributeFields { pub mem_attributes: MemAttributes, pub acc_perms: AccessPermissions, diff --git a/15_virtual_mem_part3_precomputed_tables/Cargo.lock b/15_virtual_mem_part3_precomputed_tables/Cargo.lock index 8aa6b75d..72cc4866 100644 --- a/15_virtual_mem_part3_precomputed_tables/Cargo.lock +++ b/15_virtual_mem_part3_precomputed_tables/Cargo.lock @@ -24,9 +24,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] @@ -39,18 +39,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a" [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] [[package]] name = "syn" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", @@ -79,6 +79,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" diff --git a/15_virtual_mem_part3_precomputed_tables/README.md b/15_virtual_mem_part3_precomputed_tables/README.md index 40f72ba7..25c26c0a 100644 --- a/15_virtual_mem_part3_precomputed_tables/README.md +++ b/15_virtual_mem_part3_precomputed_tables/README.md @@ -1454,7 +1454,7 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/kernel/src/memory/mmu/translation_tabl + let mut tables = MinSizeTranslationTable::new_for_runtime(); - tables.init(); -+ assert!(tables.init().is_ok()); ++ assert_eq!(tables.init(), Ok(())); let virt_start_page_addr: PageAddress = PageAddress::from(0); let virt_end_exclusive_page_addr: PageAddress = diff --git a/15_virtual_mem_part3_precomputed_tables/kernel/src/exception.rs b/15_virtual_mem_part3_precomputed_tables/kernel/src/exception.rs index f4af8144..7ea7cd80 100644 --- a/15_virtual_mem_part3_precomputed_tables/kernel/src/exception.rs +++ b/15_virtual_mem_part3_precomputed_tables/kernel/src/exception.rs @@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init}; /// Kernel privilege levels. #[allow(missing_docs)] -#[derive(PartialEq)] +#[derive(Eq, PartialEq)] pub enum PrivilegeLevel { User, Kernel, diff --git a/15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/mapping_record.rs b/15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/mapping_record.rs index 5bc32445..b893fee3 100644 --- a/15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/mapping_record.rs +++ b/15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/mapping_record.rs @@ -103,8 +103,7 @@ impl MappingRecord { ) -> Option<&mut MappingRecordEntry> { self.inner .iter_mut() - .filter(|x| x.is_some()) - .map(|x| x.as_mut().unwrap()) + .filter_map(|x| x.as_mut()) .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) .find(|x| { if x.phys_start_addr != phys_region.start_addr() { diff --git a/15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/translation_table.rs b/15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/translation_table.rs index 5a34a1e6..c36fb3d6 100644 --- a/15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/translation_table.rs +++ b/15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/translation_table.rs @@ -97,7 +97,7 @@ mod tests { // This will occupy a lot of space on the stack. let mut tables = MinSizeTranslationTable::new_for_runtime(); - assert!(tables.init().is_ok()); + assert_eq!(tables.init(), Ok(())); let virt_start_page_addr: PageAddress = PageAddress::from(0); let virt_end_exclusive_page_addr: PageAddress = diff --git a/15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/types.rs b/15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/types.rs index 7a4fb071..362438fd 100644 --- a/15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/types.rs +++ b/15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/types.rs @@ -15,13 +15,13 @@ use core::{convert::From, iter::Step, num::NonZeroUsize, ops::Range}; //-------------------------------------------------------------------------------------------------- /// A wrapper type around [Address] that ensures page alignment. -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct PageAddress { inner: Address, } /// A type that describes a region of memory in quantities of pages. -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct MemoryRegion { start: PageAddress, end_exclusive: PageAddress, @@ -29,7 +29,7 @@ pub struct MemoryRegion { /// Architecture agnostic memory attributes. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub enum MemAttributes { CacheableDRAM, Device, @@ -37,7 +37,7 @@ pub enum MemAttributes { /// Architecture agnostic access permissions. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub enum AccessPermissions { ReadOnly, ReadWrite, @@ -45,7 +45,7 @@ pub enum AccessPermissions { /// Collection of memory attributes. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct AttributeFields { pub mem_attributes: MemAttributes, pub acc_perms: AccessPermissions, diff --git a/16_virtual_mem_part4_higher_half_kernel/Cargo.lock b/16_virtual_mem_part4_higher_half_kernel/Cargo.lock index 66ac8733..ac4f39a2 100644 --- a/16_virtual_mem_part4_higher_half_kernel/Cargo.lock +++ b/16_virtual_mem_part4_higher_half_kernel/Cargo.lock @@ -24,9 +24,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] @@ -39,18 +39,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a" [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] [[package]] name = "syn" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", @@ -79,6 +79,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" diff --git a/16_virtual_mem_part4_higher_half_kernel/README.md b/16_virtual_mem_part4_higher_half_kernel/README.md index cb50cab0..443c7223 100644 --- a/16_virtual_mem_part4_higher_half_kernel/README.md +++ b/16_virtual_mem_part4_higher_half_kernel/README.md @@ -749,7 +749,7 @@ diff -uNr 15_virtual_mem_part3_precomputed_tables/kernel/src/memory/mmu/translat +++ 16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/translation_table.rs @@ -99,9 +99,9 @@ - assert!(tables.init().is_ok()); + assert_eq!(tables.init(), Ok(())); - let virt_start_page_addr: PageAddress = PageAddress::from(0); - let virt_end_exclusive_page_addr: PageAddress = diff --git a/16_virtual_mem_part4_higher_half_kernel/kernel/src/exception.rs b/16_virtual_mem_part4_higher_half_kernel/kernel/src/exception.rs index f4af8144..7ea7cd80 100644 --- a/16_virtual_mem_part4_higher_half_kernel/kernel/src/exception.rs +++ b/16_virtual_mem_part4_higher_half_kernel/kernel/src/exception.rs @@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init}; /// Kernel privilege levels. #[allow(missing_docs)] -#[derive(PartialEq)] +#[derive(Eq, PartialEq)] pub enum PrivilegeLevel { User, Kernel, diff --git a/16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/mapping_record.rs b/16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/mapping_record.rs index 5bc32445..b893fee3 100644 --- a/16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/mapping_record.rs +++ b/16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/mapping_record.rs @@ -103,8 +103,7 @@ impl MappingRecord { ) -> Option<&mut MappingRecordEntry> { self.inner .iter_mut() - .filter(|x| x.is_some()) - .map(|x| x.as_mut().unwrap()) + .filter_map(|x| x.as_mut()) .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) .find(|x| { if x.phys_start_addr != phys_region.start_addr() { diff --git a/16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/translation_table.rs b/16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/translation_table.rs index 9d627f97..9301bb0c 100644 --- a/16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/translation_table.rs +++ b/16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/translation_table.rs @@ -97,7 +97,7 @@ mod tests { // This will occupy a lot of space on the stack. let mut tables = MinSizeTranslationTable::new_for_runtime(); - assert!(tables.init().is_ok()); + assert_eq!(tables.init(), Ok(())); let virt_end_exclusive_page_addr: PageAddress = PageAddress::MAX; let virt_start_page_addr: PageAddress = diff --git a/16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/types.rs b/16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/types.rs index 85c852b3..62f3926e 100644 --- a/16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/types.rs +++ b/16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/types.rs @@ -15,13 +15,13 @@ use core::{convert::From, iter::Step, num::NonZeroUsize, ops::Range}; //-------------------------------------------------------------------------------------------------- /// A wrapper type around [Address] that ensures page alignment. -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct PageAddress { inner: Address, } /// A type that describes a region of memory in quantities of pages. -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct MemoryRegion { start: PageAddress, end_exclusive: PageAddress, @@ -29,7 +29,7 @@ pub struct MemoryRegion { /// Architecture agnostic memory attributes. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub enum MemAttributes { CacheableDRAM, Device, @@ -37,7 +37,7 @@ pub enum MemAttributes { /// Architecture agnostic access permissions. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub enum AccessPermissions { ReadOnly, ReadWrite, @@ -45,7 +45,7 @@ pub enum AccessPermissions { /// Collection of memory attributes. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct AttributeFields { pub mem_attributes: MemAttributes, pub acc_perms: AccessPermissions, diff --git a/17_kernel_symbols/Cargo.lock b/17_kernel_symbols/Cargo.lock index a0da4e21..cd3793ed 100644 --- a/17_kernel_symbols/Cargo.lock +++ b/17_kernel_symbols/Cargo.lock @@ -36,9 +36,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] @@ -51,18 +51,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a" [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] [[package]] name = "syn" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", @@ -91,6 +91,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" diff --git a/17_kernel_symbols/README.md b/17_kernel_symbols/README.md index b9d21aec..ace1ed6e 100644 --- a/17_kernel_symbols/README.md +++ b/17_kernel_symbols/README.md @@ -183,13 +183,9 @@ Lookup is done by just iterating over the slice: ```rust /// Retrieve the symbol corresponding to a virtual address, if any. pub fn lookup_symbol(addr: Address) -> Option<&'static Symbol> { - for i in kernel_symbols_slice() { - if i.contains(addr.as_usize()) { - return Some(i); - } - } - - None + kernel_symbols_slice() + .iter() + .find(|&i| i.contains(addr.as_usize())) } ``` @@ -342,7 +338,7 @@ diff -uNr 16_virtual_mem_part4_higher_half_kernel/kernel/src/lib.rs 17_kernel_sy diff -uNr 16_virtual_mem_part4_higher_half_kernel/kernel/src/symbols.rs 17_kernel_symbols/kernel/src/symbols.rs --- 16_virtual_mem_part4_higher_half_kernel/kernel/src/symbols.rs +++ 17_kernel_symbols/kernel/src/symbols.rs -@@ -0,0 +1,87 @@ +@@ -0,0 +1,83 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright (c) 2022 Andre Richter @@ -394,13 +390,9 @@ diff -uNr 16_virtual_mem_part4_higher_half_kernel/kernel/src/symbols.rs 17_kerne + +/// Retrieve the symbol corresponding to a virtual address, if any. +pub fn lookup_symbol(addr: Address) -> Option<&'static Symbol> { -+ for i in kernel_symbols_slice() { -+ if i.contains(addr.as_usize()) { -+ return Some(i); -+ } -+ } -+ -+ None ++ kernel_symbols_slice() ++ .iter() ++ .find(|&i| i.contains(addr.as_usize())) +} + +//-------------------------------------------------------------------------------------------------- diff --git a/17_kernel_symbols/kernel/src/exception.rs b/17_kernel_symbols/kernel/src/exception.rs index f4af8144..7ea7cd80 100644 --- a/17_kernel_symbols/kernel/src/exception.rs +++ b/17_kernel_symbols/kernel/src/exception.rs @@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init}; /// Kernel privilege levels. #[allow(missing_docs)] -#[derive(PartialEq)] +#[derive(Eq, PartialEq)] pub enum PrivilegeLevel { User, Kernel, diff --git a/17_kernel_symbols/kernel/src/memory/mmu/mapping_record.rs b/17_kernel_symbols/kernel/src/memory/mmu/mapping_record.rs index 5bc32445..b893fee3 100644 --- a/17_kernel_symbols/kernel/src/memory/mmu/mapping_record.rs +++ b/17_kernel_symbols/kernel/src/memory/mmu/mapping_record.rs @@ -103,8 +103,7 @@ impl MappingRecord { ) -> Option<&mut MappingRecordEntry> { self.inner .iter_mut() - .filter(|x| x.is_some()) - .map(|x| x.as_mut().unwrap()) + .filter_map(|x| x.as_mut()) .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) .find(|x| { if x.phys_start_addr != phys_region.start_addr() { diff --git a/17_kernel_symbols/kernel/src/memory/mmu/translation_table.rs b/17_kernel_symbols/kernel/src/memory/mmu/translation_table.rs index 9d627f97..9301bb0c 100644 --- a/17_kernel_symbols/kernel/src/memory/mmu/translation_table.rs +++ b/17_kernel_symbols/kernel/src/memory/mmu/translation_table.rs @@ -97,7 +97,7 @@ mod tests { // This will occupy a lot of space on the stack. let mut tables = MinSizeTranslationTable::new_for_runtime(); - assert!(tables.init().is_ok()); + assert_eq!(tables.init(), Ok(())); let virt_end_exclusive_page_addr: PageAddress = PageAddress::MAX; let virt_start_page_addr: PageAddress = diff --git a/17_kernel_symbols/kernel/src/memory/mmu/types.rs b/17_kernel_symbols/kernel/src/memory/mmu/types.rs index 85c852b3..62f3926e 100644 --- a/17_kernel_symbols/kernel/src/memory/mmu/types.rs +++ b/17_kernel_symbols/kernel/src/memory/mmu/types.rs @@ -15,13 +15,13 @@ use core::{convert::From, iter::Step, num::NonZeroUsize, ops::Range}; //-------------------------------------------------------------------------------------------------- /// A wrapper type around [Address] that ensures page alignment. -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct PageAddress { inner: Address, } /// A type that describes a region of memory in quantities of pages. -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct MemoryRegion { start: PageAddress, end_exclusive: PageAddress, @@ -29,7 +29,7 @@ pub struct MemoryRegion { /// Architecture agnostic memory attributes. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub enum MemAttributes { CacheableDRAM, Device, @@ -37,7 +37,7 @@ pub enum MemAttributes { /// Architecture agnostic access permissions. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub enum AccessPermissions { ReadOnly, ReadWrite, @@ -45,7 +45,7 @@ pub enum AccessPermissions { /// Collection of memory attributes. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct AttributeFields { pub mem_attributes: MemAttributes, pub acc_perms: AccessPermissions, diff --git a/17_kernel_symbols/kernel/src/symbols.rs b/17_kernel_symbols/kernel/src/symbols.rs index 22001389..7f439ce2 100644 --- a/17_kernel_symbols/kernel/src/symbols.rs +++ b/17_kernel_symbols/kernel/src/symbols.rs @@ -49,13 +49,9 @@ fn kernel_symbols_slice() -> &'static [Symbol] { /// Retrieve the symbol corresponding to a virtual address, if any. pub fn lookup_symbol(addr: Address) -> Option<&'static Symbol> { - for i in kernel_symbols_slice() { - if i.contains(addr.as_usize()) { - return Some(i); - } - } - - None + kernel_symbols_slice() + .iter() + .find(|&i| i.contains(addr.as_usize())) } //-------------------------------------------------------------------------------------------------- diff --git a/18_backtrace/Cargo.lock b/18_backtrace/Cargo.lock index e0ab66b1..3e5338e8 100644 --- a/18_backtrace/Cargo.lock +++ b/18_backtrace/Cargo.lock @@ -36,9 +36,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] @@ -51,18 +51,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a" [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] [[package]] name = "syn" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", @@ -91,6 +91,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" diff --git a/18_backtrace/kernel/src/exception.rs b/18_backtrace/kernel/src/exception.rs index f4af8144..7ea7cd80 100644 --- a/18_backtrace/kernel/src/exception.rs +++ b/18_backtrace/kernel/src/exception.rs @@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init}; /// Kernel privilege levels. #[allow(missing_docs)] -#[derive(PartialEq)] +#[derive(Eq, PartialEq)] pub enum PrivilegeLevel { User, Kernel, diff --git a/18_backtrace/kernel/src/memory/mmu/mapping_record.rs b/18_backtrace/kernel/src/memory/mmu/mapping_record.rs index 5bc32445..b893fee3 100644 --- a/18_backtrace/kernel/src/memory/mmu/mapping_record.rs +++ b/18_backtrace/kernel/src/memory/mmu/mapping_record.rs @@ -103,8 +103,7 @@ impl MappingRecord { ) -> Option<&mut MappingRecordEntry> { self.inner .iter_mut() - .filter(|x| x.is_some()) - .map(|x| x.as_mut().unwrap()) + .filter_map(|x| x.as_mut()) .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) .find(|x| { if x.phys_start_addr != phys_region.start_addr() { diff --git a/18_backtrace/kernel/src/memory/mmu/translation_table.rs b/18_backtrace/kernel/src/memory/mmu/translation_table.rs index 9d627f97..9301bb0c 100644 --- a/18_backtrace/kernel/src/memory/mmu/translation_table.rs +++ b/18_backtrace/kernel/src/memory/mmu/translation_table.rs @@ -97,7 +97,7 @@ mod tests { // This will occupy a lot of space on the stack. let mut tables = MinSizeTranslationTable::new_for_runtime(); - assert!(tables.init().is_ok()); + assert_eq!(tables.init(), Ok(())); let virt_end_exclusive_page_addr: PageAddress = PageAddress::MAX; let virt_start_page_addr: PageAddress = diff --git a/18_backtrace/kernel/src/memory/mmu/types.rs b/18_backtrace/kernel/src/memory/mmu/types.rs index 85c852b3..62f3926e 100644 --- a/18_backtrace/kernel/src/memory/mmu/types.rs +++ b/18_backtrace/kernel/src/memory/mmu/types.rs @@ -15,13 +15,13 @@ use core::{convert::From, iter::Step, num::NonZeroUsize, ops::Range}; //-------------------------------------------------------------------------------------------------- /// A wrapper type around [Address] that ensures page alignment. -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct PageAddress { inner: Address, } /// A type that describes a region of memory in quantities of pages. -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct MemoryRegion { start: PageAddress, end_exclusive: PageAddress, @@ -29,7 +29,7 @@ pub struct MemoryRegion { /// Architecture agnostic memory attributes. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub enum MemAttributes { CacheableDRAM, Device, @@ -37,7 +37,7 @@ pub enum MemAttributes { /// Architecture agnostic access permissions. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub enum AccessPermissions { ReadOnly, ReadWrite, @@ -45,7 +45,7 @@ pub enum AccessPermissions { /// Collection of memory attributes. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct AttributeFields { pub mem_attributes: MemAttributes, pub acc_perms: AccessPermissions, diff --git a/18_backtrace/kernel/src/symbols.rs b/18_backtrace/kernel/src/symbols.rs index 22001389..7f439ce2 100644 --- a/18_backtrace/kernel/src/symbols.rs +++ b/18_backtrace/kernel/src/symbols.rs @@ -49,13 +49,9 @@ fn kernel_symbols_slice() -> &'static [Symbol] { /// Retrieve the symbol corresponding to a virtual address, if any. pub fn lookup_symbol(addr: Address) -> Option<&'static Symbol> { - for i in kernel_symbols_slice() { - if i.contains(addr.as_usize()) { - return Some(i); - } - } - - None + kernel_symbols_slice() + .iter() + .find(|&i| i.contains(addr.as_usize())) } //-------------------------------------------------------------------------------------------------- diff --git a/19_kernel_heap/Cargo.lock b/19_kernel_heap/Cargo.lock index 09f99f4a..1739c78b 100644 --- a/19_kernel_heap/Cargo.lock +++ b/19_kernel_heap/Cargo.lock @@ -24,9 +24,9 @@ dependencies = [ [[package]] name = "linked_list_allocator" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222d00bf23b303e0c82c7a4d5f04dc90f33a58b26a3adb1a09c6fbcf56cbd2a9" +checksum = "636c3bc929db632724303109c88d5d559a2a60f62243bb041387f03fa081d94a" [[package]] name = "mingo" @@ -43,9 +43,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] @@ -58,18 +58,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a" [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] [[package]] name = "syn" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", @@ -98,6 +98,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" diff --git a/19_kernel_heap/README.md b/19_kernel_heap/README.md index 45f5f9e3..ecb3f8f7 100644 --- a/19_kernel_heap/README.md +++ b/19_kernel_heap/README.md @@ -1090,7 +1090,7 @@ diff -uNr 18_backtrace/kernel/src/memory/mmu/mapping_record.rs 19_kernel_heap/ke phys_start_addr: phys_region.start_addr(), virt_start_addr: virt_region.start_addr(), num_pages: phys_region.num_pages(), -@@ -56,55 +56,28 @@ +@@ -56,54 +56,28 @@ } } @@ -1146,12 +1146,11 @@ diff -uNr 18_backtrace/kernel/src/memory/mmu/mapping_record.rs 19_kernel_heap/ke ) -> Option<&mut MappingRecordEntry> { self.inner .iter_mut() -- .filter(|x| x.is_some()) -- .map(|x| x.as_mut().unwrap()) +- .filter_map(|x| x.as_mut()) .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) .find(|x| { if x.phys_start_addr != phys_region.start_addr() { -@@ -125,10 +98,8 @@ +@@ -124,10 +98,8 @@ virt_region: &MemoryRegion, phys_region: &MemoryRegion, attr: &AttributeFields, @@ -1164,7 +1163,7 @@ diff -uNr 18_backtrace/kernel/src/memory/mmu/mapping_record.rs 19_kernel_heap/ke name, virt_region, phys_region, -@@ -136,8 +107,6 @@ +@@ -135,8 +107,6 @@ )); self.sort(); @@ -1173,7 +1172,7 @@ diff -uNr 18_backtrace/kernel/src/memory/mmu/mapping_record.rs 19_kernel_heap/ke } pub fn print(&self) { -@@ -148,7 +117,7 @@ +@@ -147,7 +117,7 @@ ); info!(" -------------------------------------------------------------------------------------------------------------------------------------------"); @@ -1182,7 +1181,7 @@ diff -uNr 18_backtrace/kernel/src/memory/mmu/mapping_record.rs 19_kernel_heap/ke let size = i.num_pages * bsp::memory::mmu::KernelGranule::SIZE; let virt_start = i.virt_start_addr; let virt_end_inclusive = virt_start + (size - 1); -@@ -184,16 +153,14 @@ +@@ -183,16 +153,14 @@ attr, acc_p, xn, @@ -1203,7 +1202,7 @@ diff -uNr 18_backtrace/kernel/src/memory/mmu/mapping_record.rs 19_kernel_heap/ke } } -@@ -212,7 +179,7 @@ +@@ -211,7 +179,7 @@ virt_region: &MemoryRegion, phys_region: &MemoryRegion, attr: &AttributeFields, @@ -1212,7 +1211,7 @@ diff -uNr 18_backtrace/kernel/src/memory/mmu/mapping_record.rs 19_kernel_heap/ke KERNEL_MAPPING_RECORD.write(|mr| mr.add(name, virt_region, phys_region, attr)) } -@@ -225,9 +192,7 @@ +@@ -224,9 +192,7 @@ KERNEL_MAPPING_RECORD.write(|mr| { let dup = mr.find_duplicate(&phys_region)?; diff --git a/19_kernel_heap/kernel/src/exception.rs b/19_kernel_heap/kernel/src/exception.rs index f4af8144..7ea7cd80 100644 --- a/19_kernel_heap/kernel/src/exception.rs +++ b/19_kernel_heap/kernel/src/exception.rs @@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init}; /// Kernel privilege levels. #[allow(missing_docs)] -#[derive(PartialEq)] +#[derive(Eq, PartialEq)] pub enum PrivilegeLevel { User, Kernel, diff --git a/19_kernel_heap/kernel/src/memory/mmu/translation_table.rs b/19_kernel_heap/kernel/src/memory/mmu/translation_table.rs index 9d627f97..9301bb0c 100644 --- a/19_kernel_heap/kernel/src/memory/mmu/translation_table.rs +++ b/19_kernel_heap/kernel/src/memory/mmu/translation_table.rs @@ -97,7 +97,7 @@ mod tests { // This will occupy a lot of space on the stack. let mut tables = MinSizeTranslationTable::new_for_runtime(); - assert!(tables.init().is_ok()); + assert_eq!(tables.init(), Ok(())); let virt_end_exclusive_page_addr: PageAddress = PageAddress::MAX; let virt_start_page_addr: PageAddress = diff --git a/19_kernel_heap/kernel/src/memory/mmu/types.rs b/19_kernel_heap/kernel/src/memory/mmu/types.rs index 85c852b3..62f3926e 100644 --- a/19_kernel_heap/kernel/src/memory/mmu/types.rs +++ b/19_kernel_heap/kernel/src/memory/mmu/types.rs @@ -15,13 +15,13 @@ use core::{convert::From, iter::Step, num::NonZeroUsize, ops::Range}; //-------------------------------------------------------------------------------------------------- /// A wrapper type around [Address] that ensures page alignment. -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct PageAddress { inner: Address, } /// A type that describes a region of memory in quantities of pages. -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct MemoryRegion { start: PageAddress, end_exclusive: PageAddress, @@ -29,7 +29,7 @@ pub struct MemoryRegion { /// Architecture agnostic memory attributes. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub enum MemAttributes { CacheableDRAM, Device, @@ -37,7 +37,7 @@ pub enum MemAttributes { /// Architecture agnostic access permissions. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub enum AccessPermissions { ReadOnly, ReadWrite, @@ -45,7 +45,7 @@ pub enum AccessPermissions { /// Collection of memory attributes. #[allow(missing_docs)] -#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)] pub struct AttributeFields { pub mem_attributes: MemAttributes, pub acc_perms: AccessPermissions, diff --git a/19_kernel_heap/kernel/src/symbols.rs b/19_kernel_heap/kernel/src/symbols.rs index 22001389..7f439ce2 100644 --- a/19_kernel_heap/kernel/src/symbols.rs +++ b/19_kernel_heap/kernel/src/symbols.rs @@ -49,13 +49,9 @@ fn kernel_symbols_slice() -> &'static [Symbol] { /// Retrieve the symbol corresponding to a virtual address, if any. pub fn lookup_symbol(addr: Address) -> Option<&'static Symbol> { - for i in kernel_symbols_slice() { - if i.contains(addr.as_usize()) { - return Some(i); - } - } - - None + kernel_symbols_slice() + .iter() + .find(|&i| i.contains(addr.as_usize())) } //-------------------------------------------------------------------------------------------------- diff --git a/X1_JTAG_boot/jtag_boot_rpi3.img b/X1_JTAG_boot/jtag_boot_rpi3.img index 4f2c13b0..0c43ac46 100755 Binary files a/X1_JTAG_boot/jtag_boot_rpi3.img and b/X1_JTAG_boot/jtag_boot_rpi3.img differ diff --git a/X1_JTAG_boot/jtag_boot_rpi4.img b/X1_JTAG_boot/jtag_boot_rpi4.img index ee1f6fc4..83c4176a 100755 Binary files a/X1_JTAG_boot/jtag_boot_rpi4.img and b/X1_JTAG_boot/jtag_boot_rpi4.img differ diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 9667a009..0a525545 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "nightly-2022-04-10" +channel = "nightly-2022-08-01" components = ["rust-src", "llvm-tools-preview", "rustfmt"] targets = ["aarch64-unknown-none-softfloat"]