Bump compiler and dependencies

pull/169/head
Andre Richter 2 years ago
parent 2daf3ea7fd
commit 08439f33d2
No known key found for this signature in database
GPG Key ID: 2116C1AB102F615E

@ -5,5 +5,3 @@ format_code_in_doc_comments = true
normalize_comments = true normalize_comments = true
wrap_comments = true wrap_comments = true
comment_width = 100 comment_width = 100
report_fixme = "Always"
report_todo = "Always"

@ -487,7 +487,7 @@ diff -uNr 08_hw_debug_JTAG/src/exception.rs 09_privilege_level/src/exception.rs
+ +
+/// Kernel privilege levels. +/// Kernel privilege levels.
+#[allow(missing_docs)] +#[allow(missing_docs)]
+#[derive(PartialEq)] +#[derive(Eq, PartialEq)]
+pub enum PrivilegeLevel { +pub enum PrivilegeLevel {
+ User, + User,
+ Kernel, + Kernel,

@ -21,7 +21,7 @@ pub use arch_exception::current_privilege_level;
/// Kernel privilege levels. /// Kernel privilege levels.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(PartialEq)] #[derive(Eq, PartialEq)]
pub enum PrivilegeLevel { pub enum PrivilegeLevel {
User, User,
Kernel, Kernel,

@ -21,7 +21,7 @@ pub use arch_exception::current_privilege_level;
/// Kernel privilege levels. /// Kernel privilege levels.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(PartialEq)] #[derive(Eq, PartialEq)]
pub enum PrivilegeLevel { pub enum PrivilegeLevel {
User, User,
Kernel, Kernel,

@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init};
/// Kernel privilege levels. /// Kernel privilege levels.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(PartialEq)] #[derive(Eq, PartialEq)]
pub enum PrivilegeLevel { pub enum PrivilegeLevel {
User, User,
Kernel, Kernel,

@ -24,9 +24,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.40" version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@ -39,18 +39,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a"
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.20" version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.98" version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -79,6 +79,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e"
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.1" version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"

@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init};
/// Kernel privilege levels. /// Kernel privilege levels.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(PartialEq)] #[derive(Eq, PartialEq)]
pub enum PrivilegeLevel { pub enum PrivilegeLevel {
User, User,
Kernel, Kernel,

@ -24,9 +24,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.40" version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@ -39,18 +39,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a"
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.20" version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.98" version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -79,6 +79,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e"
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.1" version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"

@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init};
/// Kernel privilege levels. /// Kernel privilege levels.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(PartialEq)] #[derive(Eq, PartialEq)]
pub enum PrivilegeLevel { pub enum PrivilegeLevel {
User, User,
Kernel, Kernel,

@ -24,9 +24,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.40" version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@ -39,18 +39,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a"
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.20" version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.98" version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -79,6 +79,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e"
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.1" version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"

@ -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 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 --- 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 +++ 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 +// SPDX-License-Identifier: MIT OR Apache-2.0
+// +//
+// Copyright (c) 2020-2022 Andre Richter <andre.o.richter@gmail.com> +// Copyright (c) 2020-2022 Andre Richter <andre.o.richter@gmail.com>
@ -2531,8 +2531,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/kernel/src/memory/mmu/mapping_reco
+ ) -> Option<&mut MappingRecordEntry> { + ) -> Option<&mut MappingRecordEntry> {
+ self.inner + self.inner
+ .iter_mut() + .iter_mut()
+ .filter(|x| x.is_some()) + .filter_map(|x| x.as_mut())
+ .map(|x| x.as_mut().unwrap())
+ .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) + .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device)
+ .find(|x| { + .find(|x| {
+ if x.phys_start_addr != phys_region.start_addr() { + 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. +/// 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<ATYPE: AddressType> { +pub struct PageAddress<ATYPE: AddressType> {
+ inner: Address<ATYPE>, + inner: Address<ATYPE>,
+} +}
+ +
+/// A type that describes a region of memory in quantities of pages. +/// 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<ATYPE: AddressType> { +pub struct MemoryRegion<ATYPE: AddressType> {
+ start: PageAddress<ATYPE>, + start: PageAddress<ATYPE>,
+ end_exclusive: PageAddress<ATYPE>, + end_exclusive: PageAddress<ATYPE>,
@ -2873,7 +2872,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/kernel/src/memory/mmu/types.rs 14_
+ +
+/// Architecture agnostic memory attributes. +/// Architecture agnostic memory attributes.
+#[allow(missing_docs)] +#[allow(missing_docs)]
+#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
+pub enum MemAttributes { +pub enum MemAttributes {
+ CacheableDRAM, + CacheableDRAM,
+ Device, + Device,
@ -2881,7 +2880,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/kernel/src/memory/mmu/types.rs 14_
+ +
+/// Architecture agnostic access permissions. +/// Architecture agnostic access permissions.
+#[allow(missing_docs)] +#[allow(missing_docs)]
+#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
+pub enum AccessPermissions { +pub enum AccessPermissions {
+ ReadOnly, + ReadOnly,
+ ReadWrite, + ReadWrite,
@ -2889,7 +2888,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/kernel/src/memory/mmu/types.rs 14_
+ +
+/// Collection of memory attributes. +/// Collection of memory attributes.
+#[allow(missing_docs)] +#[allow(missing_docs)]
+#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] +#[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
+pub struct AttributeFields { +pub struct AttributeFields {
+ pub mem_attributes: MemAttributes, + pub mem_attributes: MemAttributes,
+ pub acc_perms: AccessPermissions, + pub acc_perms: AccessPermissions,

@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init};
/// Kernel privilege levels. /// Kernel privilege levels.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(PartialEq)] #[derive(Eq, PartialEq)]
pub enum PrivilegeLevel { pub enum PrivilegeLevel {
User, User,
Kernel, Kernel,

@ -103,8 +103,7 @@ impl MappingRecord {
) -> Option<&mut MappingRecordEntry> { ) -> Option<&mut MappingRecordEntry> {
self.inner self.inner
.iter_mut() .iter_mut()
.filter(|x| x.is_some()) .filter_map(|x| x.as_mut())
.map(|x| x.as_mut().unwrap())
.filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device)
.find(|x| { .find(|x| {
if x.phys_start_addr != phys_region.start_addr() { if x.phys_start_addr != phys_region.start_addr() {

@ -15,13 +15,13 @@ use core::{convert::From, iter::Step, num::NonZeroUsize, ops::Range};
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// A wrapper type around [Address] that ensures page alignment. /// 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<ATYPE: AddressType> { pub struct PageAddress<ATYPE: AddressType> {
inner: Address<ATYPE>, inner: Address<ATYPE>,
} }
/// A type that describes a region of memory in quantities of pages. /// 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<ATYPE: AddressType> { pub struct MemoryRegion<ATYPE: AddressType> {
start: PageAddress<ATYPE>, start: PageAddress<ATYPE>,
end_exclusive: PageAddress<ATYPE>, end_exclusive: PageAddress<ATYPE>,
@ -29,7 +29,7 @@ pub struct MemoryRegion<ATYPE: AddressType> {
/// Architecture agnostic memory attributes. /// Architecture agnostic memory attributes.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub enum MemAttributes { pub enum MemAttributes {
CacheableDRAM, CacheableDRAM,
Device, Device,
@ -37,7 +37,7 @@ pub enum MemAttributes {
/// Architecture agnostic access permissions. /// Architecture agnostic access permissions.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub enum AccessPermissions { pub enum AccessPermissions {
ReadOnly, ReadOnly,
ReadWrite, ReadWrite,
@ -45,7 +45,7 @@ pub enum AccessPermissions {
/// Collection of memory attributes. /// Collection of memory attributes.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub struct AttributeFields { pub struct AttributeFields {
pub mem_attributes: MemAttributes, pub mem_attributes: MemAttributes,
pub acc_perms: AccessPermissions, pub acc_perms: AccessPermissions,

@ -24,9 +24,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.40" version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@ -39,18 +39,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a"
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.20" version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.98" version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -79,6 +79,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e"
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.1" version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"

@ -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(); + let mut tables = MinSizeTranslationTable::new_for_runtime();
- tables.init(); - tables.init();
+ assert!(tables.init().is_ok()); + assert_eq!(tables.init(), Ok(()));
let virt_start_page_addr: PageAddress<Virtual> = PageAddress::from(0); let virt_start_page_addr: PageAddress<Virtual> = PageAddress::from(0);
let virt_end_exclusive_page_addr: PageAddress<Virtual> = let virt_end_exclusive_page_addr: PageAddress<Virtual> =

@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init};
/// Kernel privilege levels. /// Kernel privilege levels.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(PartialEq)] #[derive(Eq, PartialEq)]
pub enum PrivilegeLevel { pub enum PrivilegeLevel {
User, User,
Kernel, Kernel,

@ -103,8 +103,7 @@ impl MappingRecord {
) -> Option<&mut MappingRecordEntry> { ) -> Option<&mut MappingRecordEntry> {
self.inner self.inner
.iter_mut() .iter_mut()
.filter(|x| x.is_some()) .filter_map(|x| x.as_mut())
.map(|x| x.as_mut().unwrap())
.filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device)
.find(|x| { .find(|x| {
if x.phys_start_addr != phys_region.start_addr() { if x.phys_start_addr != phys_region.start_addr() {

@ -97,7 +97,7 @@ mod tests {
// This will occupy a lot of space on the stack. // This will occupy a lot of space on the stack.
let mut tables = MinSizeTranslationTable::new_for_runtime(); let mut tables = MinSizeTranslationTable::new_for_runtime();
assert!(tables.init().is_ok()); assert_eq!(tables.init(), Ok(()));
let virt_start_page_addr: PageAddress<Virtual> = PageAddress::from(0); let virt_start_page_addr: PageAddress<Virtual> = PageAddress::from(0);
let virt_end_exclusive_page_addr: PageAddress<Virtual> = let virt_end_exclusive_page_addr: PageAddress<Virtual> =

@ -15,13 +15,13 @@ use core::{convert::From, iter::Step, num::NonZeroUsize, ops::Range};
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// A wrapper type around [Address] that ensures page alignment. /// 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<ATYPE: AddressType> { pub struct PageAddress<ATYPE: AddressType> {
inner: Address<ATYPE>, inner: Address<ATYPE>,
} }
/// A type that describes a region of memory in quantities of pages. /// 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<ATYPE: AddressType> { pub struct MemoryRegion<ATYPE: AddressType> {
start: PageAddress<ATYPE>, start: PageAddress<ATYPE>,
end_exclusive: PageAddress<ATYPE>, end_exclusive: PageAddress<ATYPE>,
@ -29,7 +29,7 @@ pub struct MemoryRegion<ATYPE: AddressType> {
/// Architecture agnostic memory attributes. /// Architecture agnostic memory attributes.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub enum MemAttributes { pub enum MemAttributes {
CacheableDRAM, CacheableDRAM,
Device, Device,
@ -37,7 +37,7 @@ pub enum MemAttributes {
/// Architecture agnostic access permissions. /// Architecture agnostic access permissions.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub enum AccessPermissions { pub enum AccessPermissions {
ReadOnly, ReadOnly,
ReadWrite, ReadWrite,
@ -45,7 +45,7 @@ pub enum AccessPermissions {
/// Collection of memory attributes. /// Collection of memory attributes.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub struct AttributeFields { pub struct AttributeFields {
pub mem_attributes: MemAttributes, pub mem_attributes: MemAttributes,
pub acc_perms: AccessPermissions, pub acc_perms: AccessPermissions,

@ -24,9 +24,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.40" version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@ -39,18 +39,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a"
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.20" version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.98" version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -79,6 +79,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e"
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.1" version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"

@ -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 +++ 16_virtual_mem_part4_higher_half_kernel/kernel/src/memory/mmu/translation_table.rs
@@ -99,9 +99,9 @@ @@ -99,9 +99,9 @@
assert!(tables.init().is_ok()); assert_eq!(tables.init(), Ok(()));
- let virt_start_page_addr: PageAddress<Virtual> = PageAddress::from(0); - let virt_start_page_addr: PageAddress<Virtual> = PageAddress::from(0);
- let virt_end_exclusive_page_addr: PageAddress<Virtual> = - let virt_end_exclusive_page_addr: PageAddress<Virtual> =

@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init};
/// Kernel privilege levels. /// Kernel privilege levels.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(PartialEq)] #[derive(Eq, PartialEq)]
pub enum PrivilegeLevel { pub enum PrivilegeLevel {
User, User,
Kernel, Kernel,

@ -103,8 +103,7 @@ impl MappingRecord {
) -> Option<&mut MappingRecordEntry> { ) -> Option<&mut MappingRecordEntry> {
self.inner self.inner
.iter_mut() .iter_mut()
.filter(|x| x.is_some()) .filter_map(|x| x.as_mut())
.map(|x| x.as_mut().unwrap())
.filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device)
.find(|x| { .find(|x| {
if x.phys_start_addr != phys_region.start_addr() { if x.phys_start_addr != phys_region.start_addr() {

@ -97,7 +97,7 @@ mod tests {
// This will occupy a lot of space on the stack. // This will occupy a lot of space on the stack.
let mut tables = MinSizeTranslationTable::new_for_runtime(); let mut tables = MinSizeTranslationTable::new_for_runtime();
assert!(tables.init().is_ok()); assert_eq!(tables.init(), Ok(()));
let virt_end_exclusive_page_addr: PageAddress<Virtual> = PageAddress::MAX; let virt_end_exclusive_page_addr: PageAddress<Virtual> = PageAddress::MAX;
let virt_start_page_addr: PageAddress<Virtual> = let virt_start_page_addr: PageAddress<Virtual> =

@ -15,13 +15,13 @@ use core::{convert::From, iter::Step, num::NonZeroUsize, ops::Range};
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// A wrapper type around [Address] that ensures page alignment. /// 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<ATYPE: AddressType> { pub struct PageAddress<ATYPE: AddressType> {
inner: Address<ATYPE>, inner: Address<ATYPE>,
} }
/// A type that describes a region of memory in quantities of pages. /// 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<ATYPE: AddressType> { pub struct MemoryRegion<ATYPE: AddressType> {
start: PageAddress<ATYPE>, start: PageAddress<ATYPE>,
end_exclusive: PageAddress<ATYPE>, end_exclusive: PageAddress<ATYPE>,
@ -29,7 +29,7 @@ pub struct MemoryRegion<ATYPE: AddressType> {
/// Architecture agnostic memory attributes. /// Architecture agnostic memory attributes.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub enum MemAttributes { pub enum MemAttributes {
CacheableDRAM, CacheableDRAM,
Device, Device,
@ -37,7 +37,7 @@ pub enum MemAttributes {
/// Architecture agnostic access permissions. /// Architecture agnostic access permissions.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub enum AccessPermissions { pub enum AccessPermissions {
ReadOnly, ReadOnly,
ReadWrite, ReadWrite,
@ -45,7 +45,7 @@ pub enum AccessPermissions {
/// Collection of memory attributes. /// Collection of memory attributes.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub struct AttributeFields { pub struct AttributeFields {
pub mem_attributes: MemAttributes, pub mem_attributes: MemAttributes,
pub acc_perms: AccessPermissions, pub acc_perms: AccessPermissions,

@ -36,9 +36,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.40" version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@ -51,18 +51,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a"
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.20" version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.98" version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -91,6 +91,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e"
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.1" version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"

@ -183,13 +183,9 @@ Lookup is done by just iterating over the slice:
```rust ```rust
/// Retrieve the symbol corresponding to a virtual address, if any. /// Retrieve the symbol corresponding to a virtual address, if any.
pub fn lookup_symbol(addr: Address<Virtual>) -> Option<&'static Symbol> { pub fn lookup_symbol(addr: Address<Virtual>) -> Option<&'static Symbol> {
for i in kernel_symbols_slice() { kernel_symbols_slice()
if i.contains(addr.as_usize()) { .iter()
return Some(i); .find(|&i| i.contains(addr.as_usize()))
}
}
None
} }
``` ```
@ -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 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 --- 16_virtual_mem_part4_higher_half_kernel/kernel/src/symbols.rs
+++ 17_kernel_symbols/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 +// SPDX-License-Identifier: MIT OR Apache-2.0
+// +//
+// Copyright (c) 2022 Andre Richter <andre.o.richter@gmail.com> +// Copyright (c) 2022 Andre Richter <andre.o.richter@gmail.com>
@ -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. +/// Retrieve the symbol corresponding to a virtual address, if any.
+pub fn lookup_symbol(addr: Address<Virtual>) -> Option<&'static Symbol> { +pub fn lookup_symbol(addr: Address<Virtual>) -> Option<&'static Symbol> {
+ for i in kernel_symbols_slice() { + kernel_symbols_slice()
+ if i.contains(addr.as_usize()) { + .iter()
+ return Some(i); + .find(|&i| i.contains(addr.as_usize()))
+ }
+ }
+
+ None
+} +}
+ +
+//-------------------------------------------------------------------------------------------------- +//--------------------------------------------------------------------------------------------------

@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init};
/// Kernel privilege levels. /// Kernel privilege levels.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(PartialEq)] #[derive(Eq, PartialEq)]
pub enum PrivilegeLevel { pub enum PrivilegeLevel {
User, User,
Kernel, Kernel,

@ -103,8 +103,7 @@ impl MappingRecord {
) -> Option<&mut MappingRecordEntry> { ) -> Option<&mut MappingRecordEntry> {
self.inner self.inner
.iter_mut() .iter_mut()
.filter(|x| x.is_some()) .filter_map(|x| x.as_mut())
.map(|x| x.as_mut().unwrap())
.filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device)
.find(|x| { .find(|x| {
if x.phys_start_addr != phys_region.start_addr() { if x.phys_start_addr != phys_region.start_addr() {

@ -97,7 +97,7 @@ mod tests {
// This will occupy a lot of space on the stack. // This will occupy a lot of space on the stack.
let mut tables = MinSizeTranslationTable::new_for_runtime(); let mut tables = MinSizeTranslationTable::new_for_runtime();
assert!(tables.init().is_ok()); assert_eq!(tables.init(), Ok(()));
let virt_end_exclusive_page_addr: PageAddress<Virtual> = PageAddress::MAX; let virt_end_exclusive_page_addr: PageAddress<Virtual> = PageAddress::MAX;
let virt_start_page_addr: PageAddress<Virtual> = let virt_start_page_addr: PageAddress<Virtual> =

@ -15,13 +15,13 @@ use core::{convert::From, iter::Step, num::NonZeroUsize, ops::Range};
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// A wrapper type around [Address] that ensures page alignment. /// 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<ATYPE: AddressType> { pub struct PageAddress<ATYPE: AddressType> {
inner: Address<ATYPE>, inner: Address<ATYPE>,
} }
/// A type that describes a region of memory in quantities of pages. /// 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<ATYPE: AddressType> { pub struct MemoryRegion<ATYPE: AddressType> {
start: PageAddress<ATYPE>, start: PageAddress<ATYPE>,
end_exclusive: PageAddress<ATYPE>, end_exclusive: PageAddress<ATYPE>,
@ -29,7 +29,7 @@ pub struct MemoryRegion<ATYPE: AddressType> {
/// Architecture agnostic memory attributes. /// Architecture agnostic memory attributes.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub enum MemAttributes { pub enum MemAttributes {
CacheableDRAM, CacheableDRAM,
Device, Device,
@ -37,7 +37,7 @@ pub enum MemAttributes {
/// Architecture agnostic access permissions. /// Architecture agnostic access permissions.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub enum AccessPermissions { pub enum AccessPermissions {
ReadOnly, ReadOnly,
ReadWrite, ReadWrite,
@ -45,7 +45,7 @@ pub enum AccessPermissions {
/// Collection of memory attributes. /// Collection of memory attributes.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub struct AttributeFields { pub struct AttributeFields {
pub mem_attributes: MemAttributes, pub mem_attributes: MemAttributes,
pub acc_perms: AccessPermissions, pub acc_perms: AccessPermissions,

@ -49,13 +49,9 @@ fn kernel_symbols_slice() -> &'static [Symbol] {
/// Retrieve the symbol corresponding to a virtual address, if any. /// Retrieve the symbol corresponding to a virtual address, if any.
pub fn lookup_symbol(addr: Address<Virtual>) -> Option<&'static Symbol> { pub fn lookup_symbol(addr: Address<Virtual>) -> Option<&'static Symbol> {
for i in kernel_symbols_slice() { kernel_symbols_slice()
if i.contains(addr.as_usize()) { .iter()
return Some(i); .find(|&i| i.contains(addr.as_usize()))
}
}
None
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

@ -36,9 +36,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.40" version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@ -51,18 +51,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a"
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.20" version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.98" version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -91,6 +91,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e"
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.1" version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"

@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init};
/// Kernel privilege levels. /// Kernel privilege levels.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(PartialEq)] #[derive(Eq, PartialEq)]
pub enum PrivilegeLevel { pub enum PrivilegeLevel {
User, User,
Kernel, Kernel,

@ -103,8 +103,7 @@ impl MappingRecord {
) -> Option<&mut MappingRecordEntry> { ) -> Option<&mut MappingRecordEntry> {
self.inner self.inner
.iter_mut() .iter_mut()
.filter(|x| x.is_some()) .filter_map(|x| x.as_mut())
.map(|x| x.as_mut().unwrap())
.filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device)
.find(|x| { .find(|x| {
if x.phys_start_addr != phys_region.start_addr() { if x.phys_start_addr != phys_region.start_addr() {

@ -97,7 +97,7 @@ mod tests {
// This will occupy a lot of space on the stack. // This will occupy a lot of space on the stack.
let mut tables = MinSizeTranslationTable::new_for_runtime(); let mut tables = MinSizeTranslationTable::new_for_runtime();
assert!(tables.init().is_ok()); assert_eq!(tables.init(), Ok(()));
let virt_end_exclusive_page_addr: PageAddress<Virtual> = PageAddress::MAX; let virt_end_exclusive_page_addr: PageAddress<Virtual> = PageAddress::MAX;
let virt_start_page_addr: PageAddress<Virtual> = let virt_start_page_addr: PageAddress<Virtual> =

@ -15,13 +15,13 @@ use core::{convert::From, iter::Step, num::NonZeroUsize, ops::Range};
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// A wrapper type around [Address] that ensures page alignment. /// 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<ATYPE: AddressType> { pub struct PageAddress<ATYPE: AddressType> {
inner: Address<ATYPE>, inner: Address<ATYPE>,
} }
/// A type that describes a region of memory in quantities of pages. /// 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<ATYPE: AddressType> { pub struct MemoryRegion<ATYPE: AddressType> {
start: PageAddress<ATYPE>, start: PageAddress<ATYPE>,
end_exclusive: PageAddress<ATYPE>, end_exclusive: PageAddress<ATYPE>,
@ -29,7 +29,7 @@ pub struct MemoryRegion<ATYPE: AddressType> {
/// Architecture agnostic memory attributes. /// Architecture agnostic memory attributes.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub enum MemAttributes { pub enum MemAttributes {
CacheableDRAM, CacheableDRAM,
Device, Device,
@ -37,7 +37,7 @@ pub enum MemAttributes {
/// Architecture agnostic access permissions. /// Architecture agnostic access permissions.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub enum AccessPermissions { pub enum AccessPermissions {
ReadOnly, ReadOnly,
ReadWrite, ReadWrite,
@ -45,7 +45,7 @@ pub enum AccessPermissions {
/// Collection of memory attributes. /// Collection of memory attributes.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub struct AttributeFields { pub struct AttributeFields {
pub mem_attributes: MemAttributes, pub mem_attributes: MemAttributes,
pub acc_perms: AccessPermissions, pub acc_perms: AccessPermissions,

@ -49,13 +49,9 @@ fn kernel_symbols_slice() -> &'static [Symbol] {
/// Retrieve the symbol corresponding to a virtual address, if any. /// Retrieve the symbol corresponding to a virtual address, if any.
pub fn lookup_symbol(addr: Address<Virtual>) -> Option<&'static Symbol> { pub fn lookup_symbol(addr: Address<Virtual>) -> Option<&'static Symbol> {
for i in kernel_symbols_slice() { kernel_symbols_slice()
if i.contains(addr.as_usize()) { .iter()
return Some(i); .find(|&i| i.contains(addr.as_usize()))
}
}
None
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

@ -24,9 +24,9 @@ dependencies = [
[[package]] [[package]]
name = "linked_list_allocator" name = "linked_list_allocator"
version = "0.10.0" version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "222d00bf23b303e0c82c7a4d5f04dc90f33a58b26a3adb1a09c6fbcf56cbd2a9" checksum = "636c3bc929db632724303109c88d5d559a2a60f62243bb041387f03fa081d94a"
[[package]] [[package]]
name = "mingo" name = "mingo"
@ -43,9 +43,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.40" version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@ -58,18 +58,18 @@ checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a"
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.20" version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.98" version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -98,6 +98,6 @@ checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e"
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.1" version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"

@ -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(), phys_start_addr: phys_region.start_addr(),
virt_start_addr: virt_region.start_addr(), virt_start_addr: virt_region.start_addr(),
num_pages: phys_region.num_pages(), 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> { ) -> Option<&mut MappingRecordEntry> {
self.inner self.inner
.iter_mut() .iter_mut()
- .filter(|x| x.is_some()) - .filter_map(|x| x.as_mut())
- .map(|x| x.as_mut().unwrap())
.filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device) .filter(|x| x.attribute_fields.mem_attributes == MemAttributes::Device)
.find(|x| { .find(|x| {
if x.phys_start_addr != phys_region.start_addr() { if x.phys_start_addr != phys_region.start_addr() {
@@ -125,10 +98,8 @@ @@ -124,10 +98,8 @@
virt_region: &MemoryRegion<Virtual>, virt_region: &MemoryRegion<Virtual>,
phys_region: &MemoryRegion<Physical>, phys_region: &MemoryRegion<Physical>,
attr: &AttributeFields, attr: &AttributeFields,
@ -1164,7 +1163,7 @@ diff -uNr 18_backtrace/kernel/src/memory/mmu/mapping_record.rs 19_kernel_heap/ke
name, name,
virt_region, virt_region,
phys_region, phys_region,
@@ -136,8 +107,6 @@ @@ -135,8 +107,6 @@
)); ));
self.sort(); 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) { pub fn print(&self) {
@@ -148,7 +117,7 @@ @@ -147,7 +117,7 @@
); );
info!(" -------------------------------------------------------------------------------------------------------------------------------------------"); 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 size = i.num_pages * bsp::memory::mmu::KernelGranule::SIZE;
let virt_start = i.virt_start_addr; let virt_start = i.virt_start_addr;
let virt_end_inclusive = virt_start + (size - 1); let virt_end_inclusive = virt_start + (size - 1);
@@ -184,16 +153,14 @@ @@ -183,16 +153,14 @@
attr, attr,
acc_p, acc_p,
xn, 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<Virtual>, virt_region: &MemoryRegion<Virtual>,
phys_region: &MemoryRegion<Physical>, phys_region: &MemoryRegion<Physical>,
attr: &AttributeFields, 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)) 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| { KERNEL_MAPPING_RECORD.write(|mr| {
let dup = mr.find_duplicate(&phys_region)?; let dup = mr.find_duplicate(&phys_region)?;

@ -21,7 +21,7 @@ pub use arch_exception::{current_privilege_level, handling_init};
/// Kernel privilege levels. /// Kernel privilege levels.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(PartialEq)] #[derive(Eq, PartialEq)]
pub enum PrivilegeLevel { pub enum PrivilegeLevel {
User, User,
Kernel, Kernel,

@ -97,7 +97,7 @@ mod tests {
// This will occupy a lot of space on the stack. // This will occupy a lot of space on the stack.
let mut tables = MinSizeTranslationTable::new_for_runtime(); let mut tables = MinSizeTranslationTable::new_for_runtime();
assert!(tables.init().is_ok()); assert_eq!(tables.init(), Ok(()));
let virt_end_exclusive_page_addr: PageAddress<Virtual> = PageAddress::MAX; let virt_end_exclusive_page_addr: PageAddress<Virtual> = PageAddress::MAX;
let virt_start_page_addr: PageAddress<Virtual> = let virt_start_page_addr: PageAddress<Virtual> =

@ -15,13 +15,13 @@ use core::{convert::From, iter::Step, num::NonZeroUsize, ops::Range};
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// A wrapper type around [Address] that ensures page alignment. /// 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<ATYPE: AddressType> { pub struct PageAddress<ATYPE: AddressType> {
inner: Address<ATYPE>, inner: Address<ATYPE>,
} }
/// A type that describes a region of memory in quantities of pages. /// 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<ATYPE: AddressType> { pub struct MemoryRegion<ATYPE: AddressType> {
start: PageAddress<ATYPE>, start: PageAddress<ATYPE>,
end_exclusive: PageAddress<ATYPE>, end_exclusive: PageAddress<ATYPE>,
@ -29,7 +29,7 @@ pub struct MemoryRegion<ATYPE: AddressType> {
/// Architecture agnostic memory attributes. /// Architecture agnostic memory attributes.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub enum MemAttributes { pub enum MemAttributes {
CacheableDRAM, CacheableDRAM,
Device, Device,
@ -37,7 +37,7 @@ pub enum MemAttributes {
/// Architecture agnostic access permissions. /// Architecture agnostic access permissions.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub enum AccessPermissions { pub enum AccessPermissions {
ReadOnly, ReadOnly,
ReadWrite, ReadWrite,
@ -45,7 +45,7 @@ pub enum AccessPermissions {
/// Collection of memory attributes. /// Collection of memory attributes.
#[allow(missing_docs)] #[allow(missing_docs)]
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialOrd, PartialEq)]
pub struct AttributeFields { pub struct AttributeFields {
pub mem_attributes: MemAttributes, pub mem_attributes: MemAttributes,
pub acc_perms: AccessPermissions, pub acc_perms: AccessPermissions,

@ -49,13 +49,9 @@ fn kernel_symbols_slice() -> &'static [Symbol] {
/// Retrieve the symbol corresponding to a virtual address, if any. /// Retrieve the symbol corresponding to a virtual address, if any.
pub fn lookup_symbol(addr: Address<Virtual>) -> Option<&'static Symbol> { pub fn lookup_symbol(addr: Address<Virtual>) -> Option<&'static Symbol> {
for i in kernel_symbols_slice() { kernel_symbols_slice()
if i.contains(addr.as_usize()) { .iter()
return Some(i); .find(|&i| i.contains(addr.as_usize()))
}
}
None
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

Binary file not shown.

Binary file not shown.

@ -1,4 +1,4 @@
[toolchain] [toolchain]
channel = "nightly-2022-04-10" channel = "nightly-2022-08-01"
components = ["rust-src", "llvm-tools-preview", "rustfmt"] components = ["rust-src", "llvm-tools-preview", "rustfmt"]
targets = ["aarch64-unknown-none-softfloat"] targets = ["aarch64-unknown-none-softfloat"]

Loading…
Cancel
Save