Browse Source

chore: update toolchain version to 2024-11-05 (#1031)

* chore: update toolchain version to 2024-11-05

* update dragon reach to e945c217b3

* update dog to 6f2c0c8f12

---------

Co-authored-by: longjin <longjin@DragonOS.org>
linfeng 5 months ago
parent
commit
7c28051e8c
99 changed files with 242 additions and 379 deletions
  1. 8 8
      .github/workflows/makefile.yml
  2. 1 1
      build-scripts/Makefile
  3. 4 4
      kernel/Makefile
  4. 1 1
      kernel/crates/bitmap/src/alloc_bitmap.rs
  5. 6 6
      kernel/crates/bitmap/src/static_bitmap.rs
  6. 0 1
      kernel/crates/crc/src/lib.rs
  7. 5 2
      kernel/crates/ida/src/lib.rs
  8. 0 1
      kernel/crates/intertrait/macros/src/lib.rs
  9. 1 0
      kernel/crates/intertrait/src/lib.rs
  10. 0 1
      kernel/crates/klog_types/src/lib.rs
  11. 24 24
      kernel/crates/rbpf/src/insn_builder.rs
  12. 4 0
      kernel/crates/rbpf/tests/ubpf_vm.rs
  13. 4 2
      kernel/crates/rust-slabmalloc/src/lib.rs
  14. 4 4
      kernel/crates/rust-slabmalloc/src/pages.rs
  15. 3 0
      kernel/crates/rust-slabmalloc/src/sc.rs
  16. 0 2
      kernel/crates/system_error/Cargo.toml
  17. 1 1
      kernel/crates/system_error/src/lib.rs
  18. 1 1
      kernel/rust-toolchain.toml
  19. 1 1
      kernel/src/Makefile
  20. 8 15
      kernel/src/arch/riscv64/interrupt/entry.rs
  21. 2 3
      kernel/src/arch/riscv64/process/kthread.rs
  22. 5 9
      kernel/src/arch/riscv64/process/mod.rs
  23. 2 3
      kernel/src/arch/x86_64/interrupt/entry.rs
  24. 1 1
      kernel/src/arch/x86_64/mm/mod.rs
  25. 1 4
      kernel/src/arch/x86_64/process/kthread.rs
  26. 2 3
      kernel/src/arch/x86_64/process/mod.rs
  27. 2 4
      kernel/src/arch/x86_64/smp/mod.rs
  28. 2 2
      kernel/src/driver/base/block/block_device.rs
  29. 1 0
      kernel/src/driver/base/block/gendisk.rs
  30. 1 0
      kernel/src/driver/base/block/manager.rs
  31. 1 1
      kernel/src/driver/base/char/mod.rs
  32. 1 0
      kernel/src/driver/block/virtio_blk.rs
  33. 0 153
      kernel/src/driver/disk/ahci/ahci_inode.rs
  34. 1 2
      kernel/src/driver/disk/ahci/hba.rs
  35. 0 1
      kernel/src/driver/disk/ahci/mod.rs
  36. 1 1
      kernel/src/driver/firmware/efi/memmap.rs
  37. 1 2
      kernel/src/driver/firmware/efi/tables.rs
  38. 1 2
      kernel/src/driver/input/serio/serio_driver.rs
  39. 6 2
      kernel/src/driver/net/dma.rs
  40. 8 2
      kernel/src/driver/net/loopback.rs
  41. 8 2
      kernel/src/driver/net/virtio_net.rs
  42. 2 1
      kernel/src/driver/open_firmware/fdt.rs
  43. 1 1
      kernel/src/driver/pci/pci.rs
  44. 1 1
      kernel/src/driver/pci/root.rs
  45. 1 0
      kernel/src/driver/scsi/mod.rs
  46. 1 0
      kernel/src/driver/video/fbdev/base/fbmem.rs
  47. 0 1
      kernel/src/driver/virtio/irq.rs
  48. 6 2
      kernel/src/driver/virtio/virtio_impl.rs
  49. 2 0
      kernel/src/exception/irqdata.rs
  50. 10 0
      kernel/src/exception/irqdesc.rs
  51. 4 0
      kernel/src/exception/irqdomain.rs
  52. 1 0
      kernel/src/exception/manage.rs
  53. 2 2
      kernel/src/exception/softirq.rs
  54. 3 5
      kernel/src/filesystem/fat/bpb.rs
  55. 3 5
      kernel/src/filesystem/fat/entry.rs
  56. 10 8
      kernel/src/filesystem/fat/fs.rs
  57. 1 1
      kernel/src/filesystem/mbr.rs
  58. 2 1
      kernel/src/filesystem/overlayfs/mod.rs
  59. 0 1
      kernel/src/filesystem/procfs/syscall.rs
  60. 1 1
      kernel/src/filesystem/vfs/file.rs
  61. 1 0
      kernel/src/init/boot.rs
  62. 3 0
      kernel/src/init/cmdline.rs
  63. 0 1
      kernel/src/ipc/signal_types.rs
  64. 10 12
      kernel/src/lib.rs
  65. 0 1
      kernel/src/libs/casting.rs
  66. 1 1
      kernel/src/libs/cpumask.rs
  67. 1 1
      kernel/src/libs/futex/futex.rs
  68. 0 2
      kernel/src/libs/lib_ui/screen_manager.rs
  69. 0 6
      kernel/src/libs/lib_ui/textui.rs
  70. 8 8
      kernel/src/libs/rbtree.rs
  71. 7 8
      kernel/src/libs/rwlock.rs
  72. 0 1
      kernel/src/libs/volatile.rs
  73. 2 2
      kernel/src/mm/memblock.rs
  74. 2 0
      kernel/src/perf/bpf.rs
  75. 1 1
      kernel/src/perf/util.rs
  76. 1 1
      kernel/src/process/exit.rs
  77. 1 1
      kernel/src/process/syscall.rs
  78. 1 2
      kernel/src/syscall/misc.rs
  79. 2 2
      kernel/src/syscall/user_access.rs
  80. 1 1
      tools/BUILD_CONTAINER_VERSION
  81. 1 1
      tools/Makefile
  82. 8 8
      tools/bootstrap.sh
  83. 1 1
      tools/debugging/logmonitor/src/app.rs
  84. 1 1
      user/apps/clear/Makefile
  85. 1 1
      user/apps/test-backlog/Makefile
  86. 1 1
      user/apps/test-blockcache/Makefile
  87. 1 1
      user/apps/test-for-robustfutex/Makefile
  88. 1 1
      user/apps/test-mount/Makefile
  89. 1 1
      user/apps/test_alarm/Makefile
  90. 1 1
      user/apps/test_ebpf/Makefile
  91. 1 1
      user/apps/test_ebpf/syscall_ebpf/syscall_ebpf-ebpf/rust-toolchain.toml
  92. 1 1
      user/apps/test_namespace/Makefile
  93. 1 1
      user/apps/test_namespace/makefile.toml
  94. 1 1
      user/apps/test_socket/Makefile
  95. 1 1
      user/apps/test_statx/Makefile
  96. 1 1
      user/apps/test_tokio/Makefile
  97. 1 1
      user/apps/user-manage/Makefile
  98. 1 1
      user/dadk/config/dog_0_1_0.dadk
  99. 1 1
      user/dadk/config/dragon_reach-0.1.0.dadk

+ 8 - 8
.github/workflows/makefile.yml

@@ -12,14 +12,14 @@ jobs:
     name: Format check ${{ matrix.arch }}
     runs-on: ubuntu-latest
     continue-on-error: true
-    container: dragonos/dragonos-dev:v1.5
+    container: dragonos/dragonos-dev:v1.6
 
     strategy:
       matrix:
         arch: [x86_64, riscv64]
 
     steps:
-    - run: echo "Running in dragonos/dragonos-dev:v1.5"
+    - run: echo "Running in dragonos/dragonos-dev:v1.6"
     - uses: actions/checkout@v3
 
     - name: Format check
@@ -35,14 +35,14 @@ jobs:
     name: Kernel static test ${{ matrix.arch }}
     runs-on: ubuntu-latest
     continue-on-error: true
-    container: dragonos/dragonos-dev:v1.5
+    container: dragonos/dragonos-dev:v1.6
 
     strategy:
       matrix:
         arch: [x86_64, riscv64]
 
     steps:
-    - run: echo "Running in dragonos/dragonos-dev:v1.5"
+    - run: echo "Running in dragonos/dragonos-dev:v1.6"
 
     - uses: actions/checkout@v3
 
@@ -56,10 +56,10 @@ jobs:
   build-x86_64:
 
     runs-on: ubuntu-latest
-    container: dragonos/dragonos-dev:v1.5
+    container: dragonos/dragonos-dev:v1.6
 
     steps:
-    - run: echo "Running in dragonos/dragonos-dev:v1.5"
+    - run: echo "Running in dragonos/dragonos-dev:v1.6"
 
     - uses: actions/checkout@v3
     - name: build the DragonOS
@@ -78,10 +78,10 @@ jobs:
   build-riscv64:
 
     runs-on: ubuntu-latest
-    container: dragonos/dragonos-dev:v1.5
+    container: dragonos/dragonos-dev:v1.6
 
     steps:
-    - run: echo "Running in dragonos/dragonos-dev:v1.5"
+    - run: echo "Running in dragonos/dragonos-dev:v1.6"
 
     - uses: actions/checkout@v3
       with:

+ 1 - 1
build-scripts/Makefile

@@ -5,4 +5,4 @@ fmt:
 clean:
 	@cargo clean
 check:
-	@cargo +nightly-2024-07-23 check --workspace $(CARGO_ZBUILD) --message-format=json
+	@cargo +nightly-2024-11-05 check --workspace $(CARGO_ZBUILD) --message-format=json

+ 4 - 4
kernel/Makefile

@@ -36,14 +36,14 @@ check: ECHO
 # @echo "Checking kernel... ARCH=$(ARCH)"
 # @exit 1
 ifeq ($(ARCH), x86_64)
-	RUSTFLAGS="$(RUSTFLAGS)" cargo +nightly-2024-07-23 check --workspace $(CARGO_ZBUILD) --message-format=json --target ./src/$(TARGET_JSON)
+	RUSTFLAGS="$(RUSTFLAGS)" cargo +nightly-2024-11-05 check --workspace $(CARGO_ZBUILD) --message-format=json --target ./src/$(TARGET_JSON)
 else ifeq ($(ARCH), riscv64)
-	RUSTFLAGS="$(RUSTFLAGS)" cargo +nightly-2024-07-23 check --workspace $(CARGO_ZBUILD) --message-format=json --target $(TARGET_JSON)
+	RUSTFLAGS="$(RUSTFLAGS)" cargo +nightly-2024-11-05 check --workspace $(CARGO_ZBUILD) --message-format=json --target $(TARGET_JSON)
 endif
 
 test:
 # 测试内核库
-	RUSTFLAGS="$(RUSTFLAGS)" cargo +nightly-2024-07-23 test --workspace --exclude dragonos_kernel rbpf
+	RUSTFLAGS="$(RUSTFLAGS)" cargo +nightly-2024-11-05 test --workspace --exclude dragonos_kernel rbpf
 
 test-rbpf:
-	cd crates/rbpf && RUSTFLAGS="$(RUSTFLAGS)" cargo +nightly-2024-07-23 test --features=std,user,cranelift
+	cd crates/rbpf && RUSTFLAGS="$(RUSTFLAGS)" cargo +nightly-2024-11-05 test --features=std,user,cranelift

+ 1 - 1
kernel/crates/bitmap/src/alloc_bitmap.rs

@@ -13,7 +13,7 @@ pub struct AllocBitmap {
 
 impl AllocBitmap {
     pub fn new(elements: usize) -> Self {
-        let data = vec![0usize; (elements + usize::BITS as usize - 1) / (usize::BITS as usize)];
+        let data = vec![0usize; elements.div_ceil(usize::BITS as usize)];
         Self {
             elements,
             data,

+ 6 - 6
kernel/crates/bitmap/src/static_bitmap.rs

@@ -8,15 +8,15 @@ use crate::{bitmap_core::BitMapCore, traits::BitMapOps};
 #[derive(Debug, Clone)]
 pub struct StaticBitmap<const N: usize>
 where
-    [(); (N + usize::BITS as usize - 1) / (usize::BITS as usize)]:,
+    [(); N.div_ceil(usize::BITS as usize)]:,
 {
-    pub data: [usize; (N + usize::BITS as usize - 1) / (usize::BITS as usize)],
+    pub data: [usize; N.div_ceil(usize::BITS as usize)],
     core: BitMapCore<usize>,
 }
 
 impl<const N: usize> Default for StaticBitmap<N>
 where
-    [(); (N + usize::BITS as usize - 1) / (usize::BITS as usize)]:,
+    [(); N.div_ceil(usize::BITS as usize)]:,
 {
     fn default() -> Self {
         Self::new()
@@ -25,12 +25,12 @@ where
 
 impl<const N: usize> StaticBitmap<N>
 where
-    [(); (N + usize::BITS as usize - 1) / (usize::BITS as usize)]:,
+    [(); N.div_ceil(usize::BITS as usize)]:,
 {
     /// 创建一个新的静态位图
     pub const fn new() -> Self {
         Self {
-            data: [0; (N + usize::BITS as usize - 1) / (usize::BITS as usize)],
+            data: [0; N.div_ceil(usize::BITS as usize)],
             core: BitMapCore::new(),
         }
     }
@@ -38,7 +38,7 @@ where
 
 impl<const N: usize> BitMapOps<usize> for StaticBitmap<N>
 where
-    [(); (N + usize::BITS as usize - 1) / (usize::BITS as usize)]:,
+    [(); N.div_ceil(usize::BITS as usize)]:,
 {
     #[inline]
     fn get(&self, index: usize) -> Option<bool> {

+ 0 - 1
kernel/crates/crc/src/lib.rs

@@ -1,6 +1,5 @@
 #![cfg_attr(not(test), no_std)]
 #![feature(const_for)]
-#![feature(const_mut_refs)]
 #![feature(const_trait_impl)]
 #![allow(clippy::needless_return)]
 

+ 5 - 2
kernel/crates/ida/src/lib.rs

@@ -16,7 +16,7 @@ struct EmptyIdaItemRef<'a> {
     _marker: PhantomData<&'a EmptyIdaItem>,
 }
 
-impl<'a> Deref for EmptyIdaItemRef<'a> {
+impl Deref for EmptyIdaItemRef<'_> {
     type Target = EmptyIdaItem;
 
     fn deref(&self) -> &Self::Target {
@@ -27,7 +27,10 @@ impl<'a> Deref for EmptyIdaItemRef<'a> {
 struct EmptyIdaItem;
 
 unsafe impl kdepends::xarray::ItemEntry for EmptyIdaItem {
-    type Ref<'a> = EmptyIdaItemRef<'a> where Self: 'a;
+    type Ref<'a>
+        = EmptyIdaItemRef<'a>
+    where
+        Self: 'a;
 
     fn into_raw(self) -> *const () {
         core::ptr::null()

+ 0 - 1
kernel/crates/intertrait/macros/src/lib.rs

@@ -61,7 +61,6 @@ mod item_type;
 /// #[derive(std::fmt::Debug)]
 /// struct Data;
 /// ```
-
 #[proc_macro_attribute]
 pub fn cast_to(args: TokenStream, input: TokenStream) -> TokenStream {
     match parse::<Targets>(args) {

+ 1 - 0
kernel/crates/intertrait/src/lib.rs

@@ -122,6 +122,7 @@ static CASTER_MAP: once_cell::sync::Lazy<HashMap<(TypeId, TypeId), BoxedCaster,
 static mut CASTER_MAP: Option<HashMap<(TypeId, TypeId), BoxedCaster, BuildFastHasher>> = None;
 
 #[cfg(target_os = "none")]
+#[allow(static_mut_refs)]
 pub fn caster_map() -> &'static HashMap<(TypeId, TypeId), BoxedCaster, BuildFastHasher> {
     return unsafe {
         CASTER_MAP.as_ref().unwrap_or_else(|| {

+ 0 - 1
kernel/crates/klog_types/src/lib.rs

@@ -1,5 +1,4 @@
 #![no_std]
-#![feature(const_refs_to_cell)]
 #![feature(const_size_of_val)]
 #![allow(clippy::needless_return)]
 

+ 24 - 24
kernel/crates/rbpf/src/insn_builder.rs

@@ -74,7 +74,7 @@ pub trait IntoBytes {
 }
 
 /// General implementation of `IntoBytes` for `Instruction`
-impl<'i, I: Instruction> IntoBytes for &'i I {
+impl<I: Instruction> IntoBytes for &'_ I {
     type Bytes = Vec<u8>;
 
     /// transform immutable reference of `Instruction` into `Vec<u8>` with size of 8
@@ -347,7 +347,7 @@ impl<'i> Move<'i> {
     }
 }
 
-impl<'i> Instruction for Move<'i> {
+impl Instruction for Move<'_> {
     fn opt_code_byte(&self) -> u8 {
         let op_bits = self.op_bits as u8;
         let src_bit = self.src_bit as u8;
@@ -415,7 +415,7 @@ impl<'i> SwapBytes<'i> {
     }
 }
 
-impl<'i> Instruction for SwapBytes<'i> {
+impl Instruction for SwapBytes<'_> {
     fn opt_code_byte(&self) -> u8 {
         self.endian as u8
     }
@@ -456,20 +456,20 @@ impl<'i> Load<'i> {
     }
 }
 
-impl<'i> Instruction for Load<'i> {
+impl Instruction for Load<'_> {
     fn opt_code_byte(&self) -> u8 {
         let size = self.mem_size as u8;
         let addressing = self.addressing as u8;
         addressing | size | self.source
     }
 
-    fn get_insn_mut(&mut self) -> &mut Insn {
-        &mut self.insn
-    }
-
     fn get_insn(&self) -> &Insn {
         &self.insn
     }
+
+    fn get_insn_mut(&mut self) -> &mut Insn {
+        &mut self.insn
+    }
 }
 
 /// struct representation of STORE instructions
@@ -489,19 +489,19 @@ impl<'i> Store<'i> {
     }
 }
 
-impl<'i> Instruction for Store<'i> {
+impl Instruction for Store<'_> {
     fn opt_code_byte(&self) -> u8 {
         let size = self.mem_size as u8;
         BPF_MEM | BPF_ST | size | self.source
     }
 
-    fn get_insn_mut(&mut self) -> &mut Insn {
-        &mut self.insn
-    }
-
     fn get_insn(&self) -> &Insn {
         &self.insn
     }
+
+    fn get_insn_mut(&mut self) -> &mut Insn {
+        &mut self.insn
+    }
 }
 
 #[derive(Copy, Clone)]
@@ -542,20 +542,20 @@ impl<'i> Jump<'i> {
     }
 }
 
-impl<'i> Instruction for Jump<'i> {
+impl Instruction for Jump<'_> {
     fn opt_code_byte(&self) -> u8 {
         let cmp: u8 = self.cond as u8;
         let src_bit = self.src_bit as u8;
         cmp | src_bit | BPF_JMP
     }
 
-    fn get_insn_mut(&mut self) -> &mut Insn {
-        &mut self.insn
-    }
-
     fn get_insn(&self) -> &Insn {
         &self.insn
     }
+
+    fn get_insn_mut(&mut self) -> &mut Insn {
+        &mut self.insn
+    }
 }
 
 #[derive(Copy, Clone, PartialEq, Eq)]
@@ -602,18 +602,18 @@ impl<'i> FunctionCall<'i> {
     }
 }
 
-impl<'i> Instruction for FunctionCall<'i> {
+impl Instruction for FunctionCall<'_> {
     fn opt_code_byte(&self) -> u8 {
         BPF_CALL | BPF_JMP
     }
 
-    fn get_insn_mut(&mut self) -> &mut Insn {
-        &mut self.insn
-    }
-
     fn get_insn(&self) -> &Insn {
         &self.insn
     }
+
+    fn get_insn_mut(&mut self) -> &mut Insn {
+        &mut self.insn
+    }
 }
 
 /// struct representation of EXIT instruction
@@ -631,7 +631,7 @@ impl<'i> Exit<'i> {
     }
 }
 
-impl<'i> Instruction for Exit<'i> {
+impl Instruction for Exit<'_> {
     fn opt_code_byte(&self) -> u8 {
         BPF_EXIT | BPF_JMP
     }

+ 4 - 0
kernel/crates/rbpf/tests/ubpf_vm.rs

@@ -2316,8 +2316,12 @@ fn test_vm_stdw() {
 // If this case is not handled properly in check_mem(), then we may overflow when adding the
 // context address and the offset, and make the thread panic with "attempt to add with overflow".
 // Check that we panic with the expected out-of-bounds error.
+//
+// The new toolchain introduced `assert_unsafe_precondition` which panics with a different message and can't be
+// caught by `#[should_panic]`. This is why we use `#[ignore]` here.
 #[test]
 #[should_panic(expected = "Error: out of bounds memory store (insn #1)")]
+#[ignore]
 fn test_vm_stdw_add_overflow() {
     let prog = assemble(
         "

+ 4 - 2
kernel/crates/rust-slabmalloc/src/lib.rs

@@ -18,11 +18,9 @@
 //! # Implementing GlobalAlloc
 //! See the [global alloc](https://github.com/gz/rust-slabmalloc/tree/master/examples/global_alloc.rs) example.
 #![allow(unused_features)]
-#![cfg_attr(feature = "unstable", feature(const_mut_refs))]
 #![no_std]
 #![crate_name = "slabmalloc"]
 #![crate_type = "lib"]
-#![feature(new_uninit)]
 #![feature(maybe_uninit_as_bytes)]
 
 extern crate alloc;
@@ -65,6 +63,8 @@ pub enum AllocationError {
 /// Needs to adhere to safety requirements of a rust allocator (see GlobalAlloc et. al.).
 pub unsafe trait Allocator<'a> {
     fn allocate(&mut self, layout: Layout) -> Result<NonNull<u8>, AllocationError>;
+    /// # Safety
+    /// The caller must ensure that the memory is valid and that the layout is correct.
     unsafe fn deallocate(
         &mut self,
         ptr: NonNull<u8>,
@@ -85,5 +85,7 @@ pub unsafe trait Allocator<'a> {
 
 /// 将slab_page归还Buddy的回调函数
 pub trait CallBack: Send + Sync {
+    /// # Safety
+    /// The caller must ensure that the memory is valid and that the size is correct.
     unsafe fn free_slab_page(&self, _: *mut u8, _: usize) {}
 }

+ 4 - 4
kernel/crates/rust-slabmalloc/src/pages.rs

@@ -303,10 +303,10 @@ impl<'a> ObjectPage<'a> {
 }
 
 // These needs some more work to be really safe...
-unsafe impl<'a> Send for ObjectPage<'a> {}
-unsafe impl<'a> Sync for ObjectPage<'a> {}
+unsafe impl Send for ObjectPage<'_> {}
+unsafe impl Sync for ObjectPage<'_> {}
 
-impl<'a> AllocablePage for ObjectPage<'a> {
+impl AllocablePage for ObjectPage<'_> {
     const SIZE: usize = OBJECT_PAGE_SIZE;
 
     fn bitfield(&self) -> &[AtomicU64; 8] {
@@ -331,7 +331,7 @@ impl<'a> Default for ObjectPage<'a> {
     }
 }
 
-impl<'a> fmt::Debug for ObjectPage<'a> {
+impl fmt::Debug for ObjectPage<'_> {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         write!(f, "ObjectPage")
     }

+ 3 - 0
kernel/crates/rust-slabmalloc/src/sc.rs

@@ -314,6 +314,9 @@ impl<'a, P: AllocablePage> SCAllocator<'a, P> {
     /// May return an error in case an invalid `layout` is provided.
     /// The function may also move internal slab pages between lists partial -> empty
     /// or full -> partial lists.
+    ///
+    /// # Safety
+    /// The caller must ensure that the `layout` is valid.
     pub unsafe fn deallocate(
         &mut self,
         ptr: NonNull<u8>,

+ 0 - 2
kernel/crates/system_error/Cargo.toml

@@ -6,7 +6,5 @@ edition = "2021"
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-kdepends = { path = "../kdepends" }
 num-traits = { git = "https://git.mirrors.dragonos.org.cn/DragonOS-Community/num-traits.git", rev="1597c1c", default-features = false }
-num = { version = "0.4.0", default-features = false }
 num-derive = "0.3"

+ 1 - 1
kernel/crates/system_error/src/lib.rs

@@ -1,7 +1,7 @@
 #![no_std]
 #![allow(clippy::needless_return)]
 #![allow(clippy::upper_case_acronyms)]
-
+#![allow(non_local_definitions)]
 use num_derive::{FromPrimitive, ToPrimitive};
 
 #[repr(i32)]

+ 1 - 1
kernel/rust-toolchain.toml

@@ -1,3 +1,3 @@
 [toolchain]
-channel = "nightly-2024-07-23"
+channel = "nightly-2024-11-05"
 components = ["rust-src", "clippy"]

+ 1 - 1
kernel/src/Makefile

@@ -40,7 +40,7 @@ kernel_subdirs := debug
 
 
 kernel_rust:
-	RUSTFLAGS="$(RUSTFLAGS)" cargo +nightly-2024-07-23 $(CARGO_ZBUILD) build --release --target $(TARGET_JSON)
+	RUSTFLAGS="$(RUSTFLAGS)" cargo +nightly-2024-11-05 $(CARGO_ZBUILD) build --release --target $(TARGET_JSON)
 
 
 all: kernel

+ 8 - 15
kernel/src/arch/riscv64/interrupt/entry.rs

@@ -4,7 +4,6 @@ use crate::arch::{
     interrupt::TrapFrame,
 };
 use asm_macros::{restore_from_x6_to_x31, save_from_x6_to_x31};
-use core::arch::asm;
 use kdepends::memoffset::offset_of;
 
 /// Riscv64中断处理入口
@@ -12,7 +11,7 @@ use kdepends::memoffset::offset_of;
 #[no_mangle]
 #[repr(align(4))]
 pub unsafe extern "C" fn handle_exception() -> ! {
-    asm!(
+    core::arch::naked_asm!(
         concat!("
         /*
 	        * If coming from userspace, preserve the user thread pointer and load
@@ -27,15 +26,14 @@ pub unsafe extern "C" fn handle_exception() -> ! {
             j {_restore_kernel_tpsp}
         "),
         csr_scratch = const CSR_SSCRATCH,
-        _restore_kernel_tpsp = sym _restore_kernel_tpsp,
-        options(noreturn),
+        _restore_kernel_tpsp = sym _restore_kernel_tpsp
     )
 }
 
 #[naked]
 #[no_mangle]
 unsafe extern "C" fn _restore_kernel_tpsp() -> ! {
-    asm!(
+    core::arch::naked_asm!(
         concat!("
             // 这次是从内核态进入中断
             // 从sscratch寄存器加载当前cpu的上下文
@@ -48,16 +46,14 @@ unsafe extern "C" fn _restore_kernel_tpsp() -> ! {
         "),
         csr_scratch = const CSR_SSCRATCH,
         lc_off_kernel_sp = const offset_of!(LocalContext, kernel_sp),
-        _save_context = sym _save_context,
-
-        options(noreturn),
+        _save_context = sym _save_context
     )
 }
 
 #[naked]
 #[no_mangle]
 unsafe extern "C" fn _save_context() -> ! {
-    asm!(
+    core::arch::naked_asm!(
         concat!("
 
 
@@ -164,15 +160,14 @@ unsafe extern "C" fn _save_context() -> ! {
         csr_epc = const CSR_SEPC,
         csr_tval = const CSR_STVAL,
         csr_cause = const CSR_SCAUSE,
-        csr_scratch = const CSR_SSCRATCH,
-        options(noreturn),
+        csr_scratch = const CSR_SSCRATCH
     )
 }
 
 #[naked]
 #[no_mangle]
 pub unsafe extern "C" fn ret_from_exception() -> ! {
-    asm!(
+    core::arch::naked_asm!(
         concat!("
             ld s0, {off_status}(sp)
             andi s0, s0, {sr_spp}
@@ -249,8 +244,6 @@ pub unsafe extern "C" fn ret_from_exception() -> ! {
         off_t6 = const offset_of!(TrapFrame, t6),
         off_sp = const offset_of!(TrapFrame, sp),
         off_tp = const offset_of!(TrapFrame, tp),
-        off_epc = const offset_of!(TrapFrame, epc),
-
-        options(noreturn),
+        off_epc = const offset_of!(TrapFrame, epc)
     )
 }

+ 2 - 3
kernel/src/arch/riscv64/process/kthread.rs

@@ -66,7 +66,7 @@ impl KernelThreadMechanism {
 pub(super) unsafe extern "C" fn kernel_thread_bootstrap_stage1() {
     // 这个函数要是naked的,只是因为现在还没有实现,而naked func不能打`unimplemented!()`
     // 所以先写成了普通函数
-    asm!(concat!(
+    core::arch::naked_asm!(concat!(
         "
             ld x3, {off_gp}(sp)
             ld x5, {off_t0}(sp)
@@ -111,8 +111,7 @@ pub(super) unsafe extern "C" fn kernel_thread_bootstrap_stage1() {
         off_t4 = const offset_of!(TrapFrame, t4),
         off_t5 = const offset_of!(TrapFrame, t5),
         off_t6 = const offset_of!(TrapFrame, t6),
-        stage2_func = sym jump_to_stage2,
-        options(noreturn),
+        stage2_func = sym jump_to_stage2
     );
 }
 

+ 5 - 9
kernel/src/arch/riscv64/process/mod.rs

@@ -78,9 +78,8 @@ pub unsafe fn arch_switch_to_user(trap_frame: TrapFrame) -> ! {
 
 #[naked]
 unsafe extern "C" fn ready_to_switch_to_user(trap_frame: usize, new_pc: usize) -> ! {
-    asm!(
-        concat!(
-            "
+    core::arch::naked_asm!(concat!(
+        "
             // 设置trap frame
             mv sp, a0
             // 设置返回地址
@@ -88,9 +87,7 @@ unsafe extern "C" fn ready_to_switch_to_user(trap_frame: usize, new_pc: usize) -
             jr a1
             
             "
-        ),
-        options(noreturn)
-    );
+    ));
 }
 
 impl ProcessManager {
@@ -227,7 +224,7 @@ impl ProcessManager {
 /// 参考 https://code.dragonos.org.cn/xref/linux-6.6.21/arch/riscv/kernel/entry.S#233
 #[naked]
 unsafe extern "C" fn switch_to_inner(prev: *mut ArchPCBInfo, next: *mut ArchPCBInfo) {
-    core::arch::asm!(concat!(
+    core::arch::naked_asm!(concat!(
         "
             sd ra, {off_ra}(a0)
             sd sp, {off_sp}(a0)
@@ -304,8 +301,7 @@ unsafe extern "C" fn switch_to_inner(prev: *mut ArchPCBInfo, next: *mut ArchPCBI
     off_s9 = const(offset_of!(ArchPCBInfo, s9)),
     off_s10 = const(offset_of!(ArchPCBInfo, s10)),
     off_s11 = const(offset_of!(ArchPCBInfo, s11)),
-    before_switch_finish_hook = sym before_switch_finish_hook,
-    options(noreturn));
+    before_switch_finish_hook = sym before_switch_finish_hook);
 }
 
 /// 在切换上下文完成后的钩子函数(必须在这里加一个跳转函数,否则会出现relocation truncated to fit: R_RISCV_JAL错误)

+ 2 - 3
kernel/src/arch/x86_64/interrupt/entry.rs

@@ -45,7 +45,7 @@ macro_rules! interrupt_handler {
             #[naked]
             #[no_mangle]
             unsafe extern "C" fn [<irq_handler $name>]() {
-                core::arch::asm!(
+                core::arch::naked_asm!(
                     concat!(
                         "
                         push 0x0
@@ -60,8 +60,7 @@ macro_rules! interrupt_handler {
                         jmp x86_64_do_irq
                         "
                     ),
-                    irqnum = const($name),
-                    options(noreturn)
+                    irqnum = const($name)
                 );
             }
         }

+ 1 - 1
kernel/src/arch/x86_64/mm/mod.rs

@@ -500,7 +500,7 @@ unsafe fn allocator_init() {
         for i in 0..total_num {
             let area = mem_block_manager().get_initial_memory_region(i).unwrap();
             // debug!("area: base={:?}, size={:#x}, end={:?}", area.base, area.size, area.base + area.size);
-            for i in 0..((area.size + MMArch::PAGE_SIZE - 1) / MMArch::PAGE_SIZE) {
+            for i in 0..area.size.div_ceil(MMArch::PAGE_SIZE) {
                 let paddr = area.base.add(i * MMArch::PAGE_SIZE);
                 let vaddr = unsafe { MMArch::phys_2_virt(paddr) }.unwrap();
                 let flags = kernel_page_flags::<MMArch>(vaddr);

+ 1 - 4
kernel/src/arch/x86_64/process/kthread.rs

@@ -1,5 +1,3 @@
-use core::arch::asm;
-
 use alloc::sync::Arc;
 use system_error::SystemError;
 
@@ -61,7 +59,7 @@ impl KernelThreadMechanism {
 /// 跳转之后,指向Box<KernelThreadClosure>的指针将传入到stage2的函数
 #[naked]
 pub(super) unsafe extern "sysv64" fn kernel_thread_bootstrap_stage1() {
-    asm!(
+    core::arch::naked_asm!(
         concat!(
             "
 
@@ -92,6 +90,5 @@ pub(super) unsafe extern "sysv64" fn kernel_thread_bootstrap_stage1() {
             "
         ),
         stage2_func = sym kernel_thread_bootstrap_stage2,
-        options(noreturn)
     )
 }

+ 2 - 3
kernel/src/arch/x86_64/process/mod.rs

@@ -425,7 +425,7 @@ impl ProcessManager {
 /// 保存上下文,然后切换进程,接着jmp到`switch_finish_hook`钩子函数
 #[naked]
 unsafe extern "sysv64" fn switch_to_inner(prev: *mut ArchPCBInfo, next: *mut ArchPCBInfo) {
-    asm!(
+    core::arch::naked_asm!(
         // As a quick reminder for those who are unfamiliar with the System V ABI (extern "C"):
         //
         // - the current parameters are passed in the registers `rdi`, `rsi`,
@@ -498,13 +498,12 @@ unsafe extern "sysv64" fn switch_to_inner(prev: *mut ArchPCBInfo, next: *mut Arc
         off_gs = const(offset_of!(ArchPCBInfo, gs)),
 
         switch_hook = sym crate::process::switch_finish_hook,
-        options(noreturn),
     );
 }
 
 #[naked]
 unsafe extern "sysv64" fn switch_back() -> ! {
-    asm!("ret", options(noreturn));
+    core::arch::naked_asm!("ret");
 }
 
 pub unsafe fn arch_switch_to_user(trap_frame: TrapFrame) -> ! {

+ 2 - 4
kernel/src/arch/x86_64/smp/mod.rs

@@ -1,5 +1,4 @@
 use core::{
-    arch::asm,
     hint::spin_loop,
     sync::atomic::{compiler_fence, fence, AtomicBool, Ordering},
 };
@@ -65,14 +64,13 @@ unsafe extern "C" fn smp_ap_start() -> ! {
 
 #[naked]
 unsafe extern "sysv64" fn smp_init_switch_stack(st: &ApStartStackInfo) -> ! {
-    asm!(concat!("
+    core::arch::naked_asm!(concat!("
         mov rsp, [rdi + {off_rsp}]
         mov rbp, [rdi + {off_rsp}]
         jmp {stage1}
     "), 
         off_rsp = const(offset_of!(ApStartStackInfo, vaddr)),
-        stage1 = sym smp_ap_start_stage1,
-    options(noreturn));
+        stage1 = sym smp_ap_start_stage1);
 }
 
 unsafe extern "C" fn smp_ap_start_stage1() -> ! {

+ 2 - 2
kernel/src/driver/base/block/block_device.rs

@@ -20,8 +20,8 @@ use system_error::SystemError;
 
 use super::{disk_info::Partition, gendisk::GenDisk, manager::BlockDevMeta};
 
-/// 该文件定义了 Device 和 BlockDevice 的接口
-/// Notice 设备错误码使用 Posix 规定的 int32_t 的错误码表示,而不是自己定义错误enum
+// 该文件定义了 Device 和 BlockDevice 的接口
+// Notice 设备错误码使用 Posix 规定的 int32_t 的错误码表示,而不是自己定义错误enum
 
 // 使用方法:
 // 假设 blk_dev 是块设备

+ 1 - 0
kernel/src/driver/base/block/gendisk.rs

@@ -161,6 +161,7 @@ impl GenDiskMap {
     }
 
     #[inline]
+    #[allow(dead_code)]
     pub fn max_idx(&self) -> u32 {
         self.max_idx.load(Ordering::SeqCst)
     }

+ 1 - 0
kernel/src/driver/base/block/manager.rs

@@ -134,6 +134,7 @@ impl BlockDevManager {
     }
 
     /// 卸载磁盘设备
+    #[allow(dead_code)]
     pub fn unregister(&self, dev: &Arc<dyn BlockDevice>) {
         let mut inner = self.inner();
         inner.disks.remove(dev.dev_name());

+ 1 - 1
kernel/src/driver/base/char/mod.rs

@@ -18,7 +18,7 @@ use super::{
 pub trait CharDevice: Device {
     /// Notice buffer对应设备按字节划分,使用u8类型
     /// Notice offset应该从0开始计数
-
+    ///
     /// @brief: 从设备的第offset个字节开始,读取len个byte,存放到buf中
     /// @parameter offset: 起始字节偏移量
     /// @parameter len: 读取字节的数量

+ 1 - 0
kernel/src/driver/block/virtio_blk.rs

@@ -137,6 +137,7 @@ impl VirtIOBlkManager {
         BlockDevName::new(format!("vd{}", x), id)
     }
 
+    #[allow(dead_code)]
     pub fn free_id(&self, id: usize) {
         if id >= Self::MAX_DEVICES {
             return;

+ 0 - 153
kernel/src/driver/disk/ahci/ahci_inode.rs

@@ -1,153 +0,0 @@
-use crate::driver::base::block::block_device::BlockDevice;
-use crate::driver::base::device::device_number::{DeviceNumber, Major};
-use crate::filesystem::devfs::{DevFS, DeviceINode};
-use crate::filesystem::vfs::file::FileMode;
-use crate::filesystem::vfs::syscall::ModeType;
-use crate::filesystem::vfs::{
-    core::generate_inode_id, FilePrivateData, FileSystem, FileType, IndexNode, Metadata,
-};
-use crate::libs::spinlock::SpinLockGuard;
-use crate::{libs::spinlock::SpinLock, time::PosixTimeSpec};
-use alloc::{
-    string::String,
-    sync::{Arc, Weak},
-    vec::Vec,
-};
-use system_error::SystemError;
-
-use super::ahcidisk::LockedAhciDisk;
-
-#[derive(Debug)]
-pub struct AhciInode {
-    /// uuid 暂时不知道有什么用(x
-    // uuid: Uuid,
-    /// 指向自身的弱引用
-    self_ref: Weak<LockedAhciInode>,
-    /// 指向inode所在的文件系统对象的指针
-    fs: Weak<DevFS>,
-    /// INode 元数据
-    metadata: Metadata,
-    /// INode 对应的磁盘
-    disk: Arc<LockedAhciDisk>,
-}
-
-#[derive(Debug)]
-pub struct LockedAhciInode(pub SpinLock<AhciInode>);
-
-impl LockedAhciInode {
-    pub fn new(disk: Arc<LockedAhciDisk>) -> Arc<Self> {
-        let inode = AhciInode {
-            // uuid: Uuid::new_v5(),
-            self_ref: Weak::default(),
-            fs: Weak::default(),
-            disk,
-            metadata: Metadata {
-                dev_id: 1,
-                inode_id: generate_inode_id(),
-                size: 0,
-                blk_size: 0,
-                blocks: 0,
-                atime: PosixTimeSpec::default(),
-                mtime: PosixTimeSpec::default(),
-                ctime: PosixTimeSpec::default(),
-                file_type: FileType::BlockDevice, // 文件夹,block设备,char设备
-                mode: ModeType::from_bits_truncate(0o666),
-                nlinks: 1,
-                uid: 0,
-                gid: 0,
-                raw_dev: DeviceNumber::new(Major::HD_MAJOR, 0),
-            },
-        };
-
-        let result = Arc::new(LockedAhciInode(SpinLock::new(inode)));
-        result.0.lock().self_ref = Arc::downgrade(&result);
-
-        return result;
-    }
-}
-
-impl DeviceINode for LockedAhciInode {
-    fn set_fs(&self, fs: Weak<DevFS>) {
-        self.0.lock().fs = fs;
-    }
-}
-
-impl IndexNode for LockedAhciInode {
-    fn as_any_ref(&self) -> &dyn core::any::Any {
-        self
-    }
-
-    fn open(
-        &self,
-        _data: SpinLockGuard<FilePrivateData>,
-        _mode: &FileMode,
-    ) -> Result<(), SystemError> {
-        Err(SystemError::ENOSYS)
-    }
-
-    fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> {
-        Err(SystemError::ENOSYS)
-    }
-
-    fn metadata(&self) -> Result<Metadata, SystemError> {
-        return Ok(self.0.lock().metadata.clone());
-    }
-
-    fn fs(&self) -> Arc<dyn FileSystem> {
-        return self.0.lock().fs.upgrade().unwrap();
-    }
-
-    fn list(&self) -> Result<Vec<String>, SystemError> {
-        Err(SystemError::ENOSYS)
-    }
-
-    fn set_metadata(&self, metadata: &Metadata) -> Result<(), SystemError> {
-        let mut inode = self.0.lock();
-        inode.metadata.atime = metadata.atime;
-        inode.metadata.mtime = metadata.mtime;
-        inode.metadata.ctime = metadata.ctime;
-        inode.metadata.mode = metadata.mode;
-        inode.metadata.uid = metadata.uid;
-        inode.metadata.gid = metadata.gid;
-
-        return Ok(());
-    }
-
-    /// 读设备 - 应该调用设备的函数读写,而不是通过文件系统读写
-    fn read_at(
-        &self,
-        offset: usize, // lba地址
-        len: usize,
-        buf: &mut [u8],
-        data: SpinLockGuard<FilePrivateData>,
-    ) -> Result<usize, SystemError> {
-        if buf.len() < len {
-            return Err(SystemError::EINVAL);
-        }
-
-        if let FilePrivateData::Unused = *data {
-            return self.0.lock().disk.read_at_bytes(offset, len, buf);
-        }
-
-        return Err(SystemError::EINVAL);
-    }
-
-    /// 写设备 - 应该调用设备的函数读写,而不是通过文件系统读写
-    fn write_at(
-        &self,
-        offset: usize, // lba地址
-        len: usize,
-        buf: &[u8],
-        data: SpinLockGuard<FilePrivateData>,
-    ) -> Result<usize, SystemError> {
-        if buf.len() < len {
-            return Err(SystemError::EINVAL);
-        }
-
-        if let FilePrivateData::Unused = *data {
-            return self.0.lock().disk.write_at_bytes(offset, len, buf);
-        }
-
-        return Err(SystemError::EINVAL);
-    }
-}

+ 1 - 2
kernel/src/driver/disk/ahci/hba.rs

@@ -1,3 +1,4 @@
+//! 文件说明: 实现了 AHCI 中的控制器 HBA 的相关行为
 use core::{intrinsics::size_of, ptr};
 
 use core::sync::atomic::compiler_fence;
@@ -5,8 +6,6 @@ use core::sync::atomic::compiler_fence;
 use crate::arch::MMArch;
 use crate::mm::{MemoryManagementArch, PhysAddr};
 
-/// 文件说明: 实现了 AHCI 中的控制器 HBA 的相关行为
-
 /// 根据 AHCI 写出 HBA 的 Command
 pub const ATA_CMD_READ_DMA_EXT: u8 = 0x25; // 读操作,并且退出
 pub const ATA_CMD_WRITE_DMA_EXT: u8 = 0x35; // 写操作,并且退出

+ 0 - 1
kernel/src/driver/disk/ahci/mod.rs

@@ -1,5 +1,4 @@
 // 导出 ahci 相关的 module
-pub mod ahci_inode;
 pub mod ahcidisk;
 pub mod hba;
 use crate::arch::MMArch;

+ 1 - 1
kernel/src/driver/firmware/efi/memmap.rs

@@ -67,7 +67,7 @@ impl<'a> EFIMemoryDescIter<'a> {
     }
 }
 
-impl<'a> Iterator for EFIMemoryDescIter<'a> {
+impl Iterator for EFIMemoryDescIter<'_> {
     type Item = MemoryDescriptor;
 
     fn next(&mut self) -> Option<Self::Item> {

+ 1 - 2
kernel/src/driver/firmware/efi/tables.rs

@@ -74,8 +74,7 @@ impl EFIManager {
             warn!("report systable header: failed to map systable header, err: {fw_ptr:?}");
         }
 
-        let s = CStr::from_bytes_with_nul(&tmp_buf)
-            .unwrap_or_else(|_| CStr::from_bytes_with_nul(b"Unknown\0").unwrap());
+        let s = CStr::from_bytes_with_nul(&tmp_buf).unwrap_or(c"Unknown");
         info!("EFI version: {:?}, vendor: {:?}", header.revision, s);
     }
 

+ 1 - 2
kernel/src/driver/input/serio/serio_driver.rs

@@ -45,8 +45,7 @@ pub trait SerioDriver: Driver {
     fn cleanup(&self, device: &Arc<dyn SerioDevice>) -> Result<(), SystemError>;
 }
 
-///todo: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/input/serio/serio.c#810
-
+/// todo: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/input/serio/serio.c#810
 #[allow(dead_code)]
 #[inline(always)]
 pub fn serio_driver_manager() -> &'static SerioDriverManager {

+ 6 - 2
kernel/src/driver/net/dma.rs

@@ -17,7 +17,9 @@ const PAGE_SIZE: usize = 4096;
 /// @return PhysAddr 获得的内存页的初始物理地址
 pub fn dma_alloc(pages: usize) -> (usize, NonNull<u8>) {
     let page_num = PageFrameCount::new(
-        ((pages * PAGE_SIZE + MMArch::PAGE_SIZE - 1) / MMArch::PAGE_SIZE).next_power_of_two(),
+        (pages * PAGE_SIZE)
+            .div_ceil(MMArch::PAGE_SIZE)
+            .next_power_of_two(),
     );
     unsafe {
         let (paddr, count) = allocate_page_frames(page_num).expect("e1000e: alloc page failed");
@@ -44,7 +46,9 @@ pub fn dma_alloc(pages: usize) -> (usize, NonNull<u8>) {
 /// @return i32 0表示成功
 pub unsafe fn dma_dealloc(paddr: usize, vaddr: NonNull<u8>, pages: usize) -> i32 {
     let page_count = PageFrameCount::new(
-        ((pages * PAGE_SIZE + MMArch::PAGE_SIZE - 1) / MMArch::PAGE_SIZE).next_power_of_two(),
+        (pages * PAGE_SIZE)
+            .div_ceil(MMArch::PAGE_SIZE)
+            .next_power_of_two(),
     );
 
     // 恢复页面属性

+ 8 - 2
kernel/src/driver/net/loopback.rs

@@ -186,8 +186,14 @@ impl Clone for LoopbackDriver {
 }
 
 impl phy::Device for LoopbackDriver {
-    type RxToken<'a> = LoopbackRxToken where Self: 'a;
-    type TxToken<'a> = LoopbackTxToken where Self: 'a;
+    type RxToken<'a>
+        = LoopbackRxToken
+    where
+        Self: 'a;
+    type TxToken<'a>
+        = LoopbackTxToken
+    where
+        Self: 'a;
     /// ## 返回设备的物理层特性。
     /// lo设备的最大传输单元为65535,最大突发大小为1,传输介质默认为Ethernet
     fn capabilities(&self) -> phy::DeviceCapabilities {

+ 8 - 2
kernel/src/driver/net/virtio_net.rs

@@ -539,8 +539,14 @@ impl VirtioNetToken {
 }
 
 impl phy::Device for VirtIONicDeviceInner {
-    type RxToken<'a> = VirtioNetToken where Self: 'a;
-    type TxToken<'a> = VirtioNetToken where Self: 'a;
+    type RxToken<'a>
+        = VirtioNetToken
+    where
+        Self: 'a;
+    type TxToken<'a>
+        = VirtioNetToken
+    where
+        Self: 'a;
 
     fn receive(
         &mut self,

+ 2 - 1
kernel/src/driver/open_firmware/fdt.rs

@@ -71,6 +71,7 @@ impl OpenFirmwareFdtDriver {
         return Ok(());
     }
 
+    #[allow(dead_code)]
     pub unsafe fn set_fdt_map_guard(&self, guard: Option<MMIOSpaceGuard>) {
         self.inner.write().fdt_map_guard = guard;
     }
@@ -293,6 +294,7 @@ impl OpenFirmwareFdtDriver {
     /// 在UEFI初始化后,扫描FDT中的`/reserved-memory`节点,设置保留的内存
     ///
     /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/of/fdt.c#634
+    #[allow(dead_code)]
     pub fn early_init_fdt_scan_reserved_mem(&self) {
         let vaddr = boot_params().read().fdt();
         if vaddr.is_none() {
@@ -323,7 +325,6 @@ impl OpenFirmwareFdtDriver {
     }
 
     /// 保留fdt自身的内存空间
-
     fn early_reserve_fdt_itself(&self, fdt: &Fdt) {
         #[cfg(target_arch = "riscv64")]
         {

+ 1 - 1
kernel/src/driver/pci/pci.rs

@@ -1474,7 +1474,7 @@ pub struct ExternalCapabilityIterator<'a> {
     pub bus_device_function: BusDeviceFunction,
     pub next_capability_offset: Option<u16>,
 }
-impl<'a> Iterator for ExternalCapabilityIterator<'a> {
+impl Iterator for ExternalCapabilityIterator<'_> {
     type Item = ExternalCapabilityInfo;
     fn next(&mut self) -> Option<Self::Item> {
         let offset = self.next_capability_offset?;

+ 1 - 1
kernel/src/driver/pci/root.rs

@@ -317,7 +317,7 @@ pub struct PciRootIterator<'a> {
     index: usize,
 }
 
-impl<'a> Iterator for PciRootIterator<'a> {
+impl Iterator for PciRootIterator<'_> {
     type Item = Arc<PciRoot>;
 
     fn next(&mut self) -> Option<Self::Item> {

+ 1 - 0
kernel/src/driver/scsi/mod.rs

@@ -64,6 +64,7 @@ impl ScsiManager {
         BlockDevName::new(format!("sd{}", x), id)
     }
 
+    #[allow(dead_code)]
     pub fn free_id(&self, id: usize) {
         if id >= Self::MAX_DEVICES {
             return;

+ 1 - 0
kernel/src/driver/video/fbdev/base/fbmem.rs

@@ -181,6 +181,7 @@ impl FrameBufferManager {
     }
 
     /// 根据id查找帧缓冲区
+    #[allow(dead_code)]
     pub fn find_fb_by_id(&self, id: FbId) -> Result<Option<Arc<dyn FrameBuffer>>, SystemError> {
         if unlikely(!id.is_valid()) {
             return Err(SystemError::EINVAL);

+ 0 - 1
kernel/src/driver/virtio/irq.rs

@@ -77,7 +77,6 @@ impl VirtIOIrqManager {
     /// # 返回
     /// - 如果找到了设备,返回一个包含设备的`Option<Arc<dyn VirtIODevice>>`。
     /// - 如果没有找到设备,返回`None`。
-
     pub fn lookup_device(&self, dev_id: &Arc<DeviceId>) -> Option<Arc<dyn VirtIODevice>> {
         let map = self.map.read_irqsave();
         map.get(dev_id).cloned()

+ 6 - 2
kernel/src/driver/virtio/virtio_impl.rs

@@ -23,7 +23,9 @@ unsafe impl Hal for HalImpl {
         _direction: BufferDirection,
     ) -> (virtio_drivers::PhysAddr, NonNull<u8>) {
         let page_num = PageFrameCount::new(
-            ((pages * PAGE_SIZE + MMArch::PAGE_SIZE - 1) / MMArch::PAGE_SIZE).next_power_of_two(),
+            (pages * PAGE_SIZE)
+                .div_ceil(MMArch::PAGE_SIZE)
+                .next_power_of_two(),
         );
         unsafe {
             let (paddr, count) =
@@ -55,7 +57,9 @@ unsafe impl Hal for HalImpl {
         pages: usize,
     ) -> i32 {
         let page_count = PageFrameCount::new(
-            ((pages * PAGE_SIZE + MMArch::PAGE_SIZE - 1) / MMArch::PAGE_SIZE).next_power_of_two(),
+            (pages * PAGE_SIZE)
+                .div_ceil(MMArch::PAGE_SIZE)
+                .next_power_of_two(),
         );
 
         // 恢复页面属性

+ 2 - 0
kernel/src/exception/irqdata.rs

@@ -306,6 +306,7 @@ impl IrqCommonData {
         self.inner.lock_irqsave().affinity = affinity;
     }
 
+    #[allow(dead_code)]
     pub fn set_effective_affinity(&self, affinity: CpuMask) {
         self.inner.lock_irqsave().effective_affinity = affinity;
     }
@@ -346,6 +347,7 @@ impl InnerIrqCommonData {
         self.handler_data.clone()
     }
 
+    #[allow(dead_code)]
     pub fn effective_affinity(&self) -> &CpuMask {
         &self.effective_affinity
     }

+ 10 - 0
kernel/src/exception/irqdesc.rs

@@ -286,10 +286,12 @@ impl IrqDesc {
         );
     }
 
+    #[allow(dead_code)]
     pub fn set_probe(&self) {
         self.modify_status(IrqLineStatus::IRQ_NOPROBE, IrqLineStatus::empty());
     }
 
+    #[allow(dead_code)]
     pub fn set_noprobe(&self) {
         self.modify_status(IrqLineStatus::empty(), IrqLineStatus::IRQ_NOPROBE);
     }
@@ -416,6 +418,7 @@ impl InnerIrqDesc {
         self.line_status.insert(IrqLineStatus::IRQ_NOTHREAD);
     }
 
+    #[allow(dead_code)]
     pub fn clear_nothread(&mut self) {
         self.line_status.remove(IrqLineStatus::IRQ_NOTHREAD);
     }
@@ -451,6 +454,7 @@ impl InnerIrqDesc {
         !self.line_status.contains(IrqLineStatus::IRQ_NOAUTOEN)
     }
 
+    #[allow(dead_code)]
     pub fn can_thread(&self) -> bool {
         !self.line_status.contains(IrqLineStatus::IRQ_NOTHREAD)
     }
@@ -486,6 +490,7 @@ impl InnerIrqDesc {
         self.actions.clear();
     }
 
+    #[allow(dead_code)]
     pub fn remove_action(&mut self, action: &Arc<IrqAction>) {
         self.actions.retain(|a| !Arc::ptr_eq(a, action));
     }
@@ -506,14 +511,17 @@ impl InnerIrqDesc {
         &self.common_data
     }
 
+    #[allow(dead_code)]
     pub fn depth(&self) -> u32 {
         self.depth
     }
 
+    #[allow(dead_code)]
     pub fn wake_depth(&self) -> u32 {
         self.wake_depth
     }
 
+    #[allow(dead_code)]
     pub fn set_depth(&mut self, depth: u32) {
         self.depth = depth;
     }
@@ -540,6 +548,7 @@ impl InnerIrqDesc {
         &mut self.percpu_enabled
     }
 
+    #[allow(dead_code)]
     pub fn percpu_affinity(&self) -> &Option<CpuMask> {
         &self.percpu_affinity
     }
@@ -969,6 +978,7 @@ impl IrqDescManager {
     }
 
     /// 设置指定irq的可用cpu为所有cpu
+    #[allow(dead_code)]
     pub fn set_percpu_devid_all(&self, irq: IrqNumber) -> Result<(), SystemError> {
         self.set_percpu_devid(irq, None)
     }

+ 4 - 0
kernel/src/exception/irqdomain.rs

@@ -319,6 +319,7 @@ impl IrqDomainManager {
     /// - `handler_data`: 中断流处理程序数据
     /// - `handler_name`: 中断处理程序名称
     #[allow(clippy::too_many_arguments)]
+    #[allow(dead_code)]
     pub fn domain_set_info(
         &self,
         domain: &Arc<IrqDomain>,
@@ -557,14 +558,17 @@ impl IrqDomain {
     }
 
     /// The number of mapped interrupts
+    #[allow(dead_code)]
     pub fn map_count(&self) -> u32 {
         self.revmap_read_irqsave().map.len() as u32
     }
 
+    #[allow(dead_code)]
     pub fn host_data(&self) -> Option<Arc<dyn IrqChipData>> {
         self.inner.lock_irqsave().host_data.clone()
     }
 
+    #[allow(dead_code)]
     pub fn set_host_data(&self, host_data: Option<Arc<dyn IrqChipData>>) {
         self.inner.lock_irqsave().host_data = host_data;
     }

+ 1 - 0
kernel/src/exception/manage.rs

@@ -785,6 +785,7 @@ impl IrqManager {
         );
     }
 
+    #[allow(dead_code)]
     pub fn irq_set_affinity(
         &self,
         irq_data: &Arc<IrqData>,

+ 2 - 2
kernel/src/exception/softirq.rs

@@ -275,13 +275,13 @@ struct RunningCountGuard<'a> {
 }
 
 impl<'a> RunningCountGuard<'a> {
-    fn new(cpu_running_count: &'a PerCpuVar<AtomicI16>) -> RunningCountGuard {
+    fn new(cpu_running_count: &'a PerCpuVar<AtomicI16>) -> RunningCountGuard<'a> {
         cpu_running_count.get().fetch_add(1, Ordering::SeqCst);
         return RunningCountGuard { cpu_running_count };
     }
 }
 
-impl<'a> Drop for RunningCountGuard<'a> {
+impl Drop for RunningCountGuard<'_> {
     fn drop(&mut self) {
         self.cpu_running_count.get().fetch_sub(1, Ordering::SeqCst);
     }

+ 3 - 5
kernel/src/filesystem/fat/bpb.rs

@@ -266,8 +266,7 @@ impl BiosParameterBlock {
         bpb.trail_sig = cursor.read_u16()?;
 
         // 计算根目录项占用的空间(单位:字节)
-        let root_sectors = ((bpb.root_entries_cnt as u32 * 32) + (bpb.bytes_per_sector as u32 - 1))
-            / (bpb.bytes_per_sector as u32);
+        let root_sectors = (bpb.root_entries_cnt as u32 * 32).div_ceil(bpb.bytes_per_sector as u32);
 
         // 每FAT扇区数
         let fat_size = if bpb.fat_size_16 != 0 {
@@ -347,9 +346,8 @@ impl BiosParameterBlock {
             }
         };
 
-        let root_sectors = ((self.root_entries_cnt as u32 * 32)
-            + (self.bytes_per_sector as u32 - 1))
-            / (self.bytes_per_sector as u32);
+        let root_sectors =
+            (self.root_entries_cnt as u32 * 32).div_ceil(self.bytes_per_sector as u32);
 
         // 当前分区总扇区数
         let total_sectors = if self.total_sectors_16 != 0 {

+ 3 - 5
kernel/src/filesystem/fat/entry.rs

@@ -256,8 +256,7 @@ impl FATFile {
         // 如果还需要更多的簇
         if bytes_remain_in_cluster < extra_bytes {
             let clusters_to_allocate =
-                (extra_bytes - bytes_remain_in_cluster + fs.bytes_per_cluster() - 1)
-                    / fs.bytes_per_cluster();
+                (extra_bytes - bytes_remain_in_cluster).div_ceil(fs.bytes_per_cluster());
             let last_cluster = if let Some(c) = fs.get_last_cluster(self.first_cluster) {
                 c
             } else {
@@ -338,7 +337,7 @@ impl FATFile {
             return Ok(());
         }
 
-        let new_last_cluster = (new_size + fs.bytes_per_cluster() - 1) / fs.bytes_per_cluster();
+        let new_last_cluster = new_size.div_ceil(fs.bytes_per_cluster());
         if let Some(begin_delete) =
             fs.get_cluster_by_relative(self.first_cluster, new_last_cluster as usize)
         {
@@ -463,8 +462,7 @@ impl FATDir {
 
         // 计算需要申请多少个簇
         let clusters_required =
-            (remain_entries * FATRawDirEntry::DIR_ENTRY_LEN + fs.bytes_per_cluster() - 1)
-                / fs.bytes_per_cluster();
+            (remain_entries * FATRawDirEntry::DIR_ENTRY_LEN).div_ceil(fs.bytes_per_cluster());
         let mut first_cluster = Cluster::default();
         let mut prev_cluster = current_cluster;
         // debug!(

+ 10 - 8
kernel/src/filesystem/fat/fs.rs

@@ -326,9 +326,8 @@ impl FATFileSystem {
         };
 
         // 根目录项占用的扇区数(向上取整)
-        let root_dir_sectors: u64 = ((bpb.root_entries_cnt as u64 * 32)
-            + (bpb.bytes_per_sector as u64 - 1))
-            / (bpb.bytes_per_sector as u64);
+        let root_dir_sectors: u64 =
+            (bpb.root_entries_cnt as u64 * 32).div_ceil(bpb.bytes_per_sector as u64);
 
         // FAT表大小(单位:扇区)
         let fat_size = if bpb.fat_size_16 != 0 {
@@ -843,6 +842,7 @@ impl FATFileSystem {
     /// @return Ok(true) 正常
     /// @return Ok(false) 不正常
     /// @return Err(SystemError) 在判断时发生错误
+    #[allow(dead_code)]
     pub fn is_hard_error_bit_ok(&mut self) -> Result<bool, SystemError> {
         match self.bpb.fat_type {
             FATType::FAT32(_) => {
@@ -935,10 +935,8 @@ impl FATFileSystem {
 
             _ => {
                 // FAT12 / FAT16
-                let root_dir_sectors: u64 = (((self.bpb.root_entries_cnt as u64) * 32)
-                    + self.bpb.bytes_per_sector as u64
-                    - 1)
-                    / self.bpb.bytes_per_sector as u64;
+                let root_dir_sectors: u64 = ((self.bpb.root_entries_cnt as u64) * 32)
+                    .div_ceil(self.bpb.bytes_per_sector as u64);
                 // 数据区扇区数
                 let data_sec: u64 = self.bpb.total_sectors_16 as u64
                     - (self.bpb.rsvd_sec_cnt as u64
@@ -1283,6 +1281,7 @@ impl FATFsInfo {
     /// @brief 根据fsinfo的信息,计算当前总的空闲簇数量
     ///
     /// @param 当前文件系统的最大簇号
+    #[allow(dead_code)]
     pub fn count_free_cluster(&self, max_cluster: Cluster) -> Option<u64> {
         let count_clusters = max_cluster.cluster_num - RESERVED_CLUSTERS as u64 + 1;
         // 信息不合理,当前的FsInfo中存储的free count大于计算出来的值
@@ -1301,6 +1300,7 @@ impl FATFsInfo {
     /// @brief 更新FsInfo中的“空闲簇统计信息“为new_count
     ///
     /// 请注意,除非手动调用`flush()`,否则本函数不会将数据刷入磁盘
+    #[allow(dead_code)]
     pub fn update_free_count_abs(&mut self, new_count: u32) {
         self.free_count = new_count;
     }
@@ -1308,6 +1308,7 @@ impl FATFsInfo {
     /// @brief 更新FsInfo中的“空闲簇统计信息“,把它加上delta.
     ///
     /// 请注意,除非手动调用`flush()`,否则本函数不会将数据刷入磁盘
+    #[allow(dead_code)]
     pub fn update_free_count_delta(&mut self, delta: i32) {
         self.free_count = (self.free_count as i32 + delta) as u32;
     }
@@ -1360,6 +1361,7 @@ impl FATFsInfo {
     /// @brief 读取磁盘上的Fs Info扇区,将里面的内容更新到结构体中
     ///
     /// @param partition fs info所在的分区
+    #[allow(dead_code)]
     pub fn update(&mut self, partition: Arc<Partition>) -> Result<(), SystemError> {
         if let Some(off) = self.offset {
             let in_block_offset = off % LBA_SIZE as u64;
@@ -1888,7 +1890,7 @@ struct ClusterIter<'a> {
     fs: &'a FATFileSystem,
 }
 
-impl<'a> Iterator for ClusterIter<'a> {
+impl Iterator for ClusterIter<'_> {
     type Item = Cluster;
 
     fn next(&mut self) -> Option<Self::Item> {

+ 1 - 1
kernel/src/filesystem/mbr.rs

@@ -169,7 +169,7 @@ impl<'a> MbrPartitionIter<'a> {
     }
 }
 
-impl<'a> Iterator for MbrPartitionIter<'a> {
+impl Iterator for MbrPartitionIter<'_> {
     type Item = Partition;
 
     fn next(&mut self) -> Option<Self::Item> {

+ 2 - 1
kernel/src/filesystem/overlayfs/mod.rs

@@ -14,6 +14,7 @@ use alloc::sync::Arc;
 use alloc::sync::Weak;
 use alloc::vec::Vec;
 use entry::{OvlEntry, OvlLayer};
+use linkme::distributed_slice;
 use system_error::SystemError;
 
 const WHITEOUT_MODE: u64 = 0o020000 | 0o600; // whiteout字符设备文件模式与权限
@@ -89,7 +90,7 @@ struct OverlayFS {
 }
 
 #[derive(Debug)]
-struct OvlInode {
+pub struct OvlInode {
     redirect: String, // 重定向路径
     file_type: FileType,
     flags: SpinLock<u64>,

+ 0 - 1
kernel/src/filesystem/procfs/syscall.rs

@@ -51,7 +51,6 @@ impl Syscall {
     /// - 成功,Ok(usize)
     /// - 失败,Err(SystemError) 操作失败,返回posix错误码
     ///
-
     pub fn do_syslog(
         syslog_action_type: usize,
         buf: &mut [u8],

+ 1 - 1
kernel/src/filesystem/vfs/file.rs

@@ -800,7 +800,7 @@ impl<'a> FileDescriptorIterator<'a> {
     }
 }
 
-impl<'a> Iterator for FileDescriptorIterator<'a> {
+impl Iterator for FileDescriptorIterator<'_> {
     type Item = (i32, Arc<File>);
 
     fn next(&mut self) -> Option<Self::Item> {

+ 1 - 0
kernel/src/init/boot.rs

@@ -49,6 +49,7 @@ impl BootParams {
         core::str::from_utf8(&self.boot_cmdline()[..self.boot_cmdline_len()]).unwrap()
     }
 
+    #[allow(dead_code)]
     pub fn bootloader_name(&self) -> Option<&str> {
         self.bootloader_name.as_deref()
     }

+ 3 - 0
kernel/src/init/cmdline.rs

@@ -43,6 +43,7 @@ pub struct KernelCmdlineParamBuilder {
     inv: bool,
 }
 
+#[allow(dead_code)]
 impl KernelCmdlineParamBuilder {
     pub const fn new(name: &'static str, ty: KCmdlineParamType) -> Self {
         Self {
@@ -110,6 +111,7 @@ pub enum KernelCmdlineParameter {
     EarlyKV(&'static KernelCmdlineEarlyKV),
 }
 
+#[allow(dead_code)]
 impl KernelCmdlineParameter {
     pub fn name(&self) -> &str {
         match self {
@@ -195,6 +197,7 @@ pub struct KernelCmdlineEarlyKV {
     default: &'static str,
 }
 
+#[allow(dead_code)]
 impl KernelCmdlineEarlyKV {
     pub const VALUE_MAX_LEN: usize = 256;
 

+ 0 - 1
kernel/src/ipc/signal_types.rs

@@ -297,7 +297,6 @@ pub struct UserSigaction {
  * siginfo中,根据signal的来源不同,该info中对应了不同的数据./=
  * 请注意,该info最大占用16字节
  */
-
 #[repr(C)]
 #[derive(Copy, Clone, Debug)]
 pub struct SigInfo {

+ 10 - 12
kernel/src/lib.rs

@@ -2,20 +2,15 @@
 #![feature(alloc_error_handler)]
 #![feature(allocator_api)]
 #![feature(arbitrary_self_types)]
-#![feature(asm_const)]
 #![feature(concat_idents)]
 #![feature(const_for)]
-#![feature(const_mut_refs)]
-#![feature(const_option)]
 #![feature(const_trait_impl)]
-#![feature(const_refs_to_cell)]
 #![feature(core_intrinsics)]
 #![feature(c_void_variant)]
 #![feature(extract_if)]
 #![feature(fn_align)]
 #![feature(linked_list_retain)]
 #![feature(naked_functions)]
-#![feature(new_uninit)]
 #![feature(ptr_internals)]
 #![feature(trait_upcasting)]
 #![feature(slice_ptr_get)]
@@ -23,16 +18,19 @@
 #![feature(vec_into_raw_parts)]
 #![feature(c_variadic)]
 #![cfg_attr(target_os = "none", no_std)]
-#![allow(internal_features)]
+#![allow(static_mut_refs, non_local_definitions, internal_features)]
 // clippy的配置
 #![deny(clippy::all)]
-#![allow(clippy::bad_bit_mask)]
 // DragonOS允许在函数中使用return语句(尤其是长函数时,我们推荐这么做)
-#![allow(clippy::let_and_return)]
-#![allow(clippy::needless_pass_by_ref_mut)]
-#![allow(clippy::needless_return)]
-#![allow(clippy::single_char_pattern)]
-#![allow(clippy::upper_case_acronyms)]
+#![allow(
+    clippy::macro_metavars_in_unsafe,
+    clippy::upper_case_acronyms,
+    clippy::single_char_pattern,
+    clippy::needless_return,
+    clippy::needless_pass_by_ref_mut,
+    clippy::let_and_return,
+    clippy::bad_bit_mask
+)]
 
 #[cfg(test)]
 #[macro_use]

+ 0 - 1
kernel/src/libs/casting.rs

@@ -47,7 +47,6 @@ use alloc::sync::Arc;
 ///
 /// fn test() {
 ///     let a = A { name: "a".to_string() };
-
 ///     let a_arc: Arc<dyn Base> = Arc::new(a) as Arc<dyn Base>;
 ///     let a_arc2: Option<Arc<A>> = a_arc.downcast_arc::<A>();
 ///     assert!(a_arc2.is_some());

+ 1 - 1
kernel/src/libs/cpumask.rs

@@ -129,7 +129,7 @@ pub struct CpuMaskIter<'a> {
     begin: bool,
 }
 
-impl<'a> Iterator for CpuMaskIter<'a> {
+impl Iterator for CpuMaskIter<'_> {
     type Item = ProcessorId;
 
     fn next(&mut self) -> Option<ProcessorId> {

+ 1 - 1
kernel/src/libs/futex/futex.rs

@@ -844,7 +844,7 @@ impl<'a> FutexIterator<'a> {
     }
 }
 
-impl<'a> Iterator for FutexIterator<'a> {
+impl Iterator for FutexIterator<'_> {
     type Item = VirtAddr;
 
     fn next(&mut self) -> Option<Self::Item> {

+ 0 - 2
kernel/src/libs/lib_ui/screen_manager.rs

@@ -298,7 +298,6 @@ pub fn scm_init(enable_put_to_window: bool) {
 /// ## 参数
 ///
 /// - framework 要启动的ui框架
-
 pub fn scm_framework_enable(framework: Arc<dyn ScmUiFramework>) -> Result<i32, SystemError> {
     // 获取信息
     let metadata = framework.metadata()?;
@@ -321,7 +320,6 @@ pub fn scm_framework_enable(framework: Arc<dyn ScmUiFramework>) -> Result<i32, S
 ///
 /// ## 参数
 /// - framework 框架结构体
-
 pub fn scm_register(framework: Arc<dyn ScmUiFramework>) -> Result<i32, SystemError> {
     // 把ui框架加入链表
 

+ 0 - 6
kernel/src/libs/lib_ui/textui.rs

@@ -595,7 +595,6 @@ impl TextuiWindow {
     /// -flags 标志位
     /// -vlines_num 虚拟行的总数
     /// -chars_num 每行最大的字符数
-
     pub fn new(flags: WindowFlag, vlines_num: i32, chars_num: i32) -> Self {
         let mut initial_vlines = Vec::new();
 
@@ -667,10 +666,8 @@ impl TextuiWindow {
 
     /// 重新渲染某个窗口的某个虚拟行
     /// ## 参数
-
     /// - window 窗口结构体
     /// - vline_id 虚拟行号
-
     fn textui_refresh_vline(&mut self, vline_id: LineId) -> Result<(), SystemError> {
         if self.flags.contains(WindowFlag::TEXTUI_CHROMATIC) {
             return self.textui_refresh_characters(
@@ -788,12 +785,10 @@ impl TextuiWindow {
     }
     /// 根据输入的一个字符在窗口上输出
     /// ## 参数
-
     /// - window 窗口
     /// - character 字符
     /// - FRcolor 前景色(RGB)
     /// - BKcolor 背景色(RGB)
-
     fn textui_putchar_window(
         &mut self,
         character: char,
@@ -1027,7 +1022,6 @@ where
 /// - character 字符
 /// - FRcolor 前景色(RGB)
 /// - BKcolor 背景色(RGB)
-
 #[no_mangle]
 pub extern "C" fn rs_textui_putchar(character: u8, fr_color: u32, bk_color: u32) -> i32 {
     if let Some(current_vc) = vc_manager().current_vc() {

+ 8 - 8
kernel/src/libs/rbtree.rs

@@ -286,7 +286,6 @@ impl<K: Ord + Clone + Debug, V: Clone + Debug> NodePtr<K, V> {
 
 /// A red black tree implemented with Rust
 /// It is required that the keys implement the [`Ord`] traits.
-
 /// # Examples
 /// ```rust
 /// use rbtree::RBTree;
@@ -431,7 +430,7 @@ where
 
 impl<K: Eq + Ord + Debug, V: Eq + Debug> Eq for RBTree<K, V> {}
 
-impl<'a, K: Ord + Debug, V: Debug> Index<&'a K> for RBTree<K, V> {
+impl<K: Ord + Debug, V: Debug> Index<&K> for RBTree<K, V> {
     type Output = V;
 
     #[inline]
@@ -482,7 +481,7 @@ impl<'a, K: Ord + Debug, V: Debug> Clone for Keys<'a, K, V> {
     }
 }
 
-impl<'a, K: Ord + Debug, V: Debug> fmt::Debug for Keys<'a, K, V> {
+impl<K: Ord + Debug, V: Debug> fmt::Debug for Keys<'_, K, V> {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         f.debug_list().entries(self.clone()).finish()
     }
@@ -527,7 +526,7 @@ impl<'a, K: Ord + Debug, V: Debug> Clone for Values<'a, K, V> {
     }
 }
 
-impl<'a, K: Ord + Debug, V: Debug> fmt::Debug for Values<'a, K, V> {
+impl<K: Ord + Debug, V: Debug> fmt::Debug for Values<'_, K, V> {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         f.debug_list().entries(self.clone()).finish()
     }
@@ -575,7 +574,7 @@ impl<'a, K: Ord + Debug, V: Debug> Clone for ValuesMut<'a, K, V> {
     }
 }
 
-impl<'a, K: Ord + Debug, V: Debug> fmt::Debug for ValuesMut<'a, K, V> {
+impl<K: Ord + Debug, V: Debug> fmt::Debug for ValuesMut<'_, K, V> {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         f.debug_list().entries(self.clone()).finish()
     }
@@ -1651,7 +1650,7 @@ mod tests {
         let vec = vec![(1, 1), (2, 2), (3, 3)];
         let mut map: RBTree<_, _> = vec.into_iter().collect();
         for value in map.values_mut() {
-            *value = (*value) * 2
+            *value *= 2
         }
         let values: Vec<_> = map.values().cloned().collect();
         assert_eq!(values.len(), 3);
@@ -1808,7 +1807,7 @@ mod tests {
         b.insert(2, "two");
         b.insert(3, "three");
 
-        a.extend(b.into_iter());
+        a.extend(b);
 
         assert_eq!(a.len(), 3);
         assert_eq!(a[&1], "one");
@@ -1818,6 +1817,7 @@ mod tests {
 
     #[test]
     fn test_rev_iter() {
+        use crate::libs::rbtree::RBTree;
         let mut a = RBTree::new();
         a.insert(1, 1);
         a.insert(2, 2);
@@ -1826,7 +1826,7 @@ mod tests {
         assert_eq!(a.len(), 3);
         let mut cache = vec![];
         for e in a.iter().rev() {
-            cache.push(e.0.clone());
+            cache.push(*e.0);
         }
         assert_eq!(&cache, &vec![3, 2, 1]);
     }

+ 7 - 8
kernel/src/libs/rwlock.rs

@@ -16,7 +16,6 @@ use crate::{
 };
 
 ///RwLock读写锁
-
 /// @brief READER位占据从右往左数第三个比特位
 const READER: u32 = 1 << 2;
 
@@ -548,7 +547,7 @@ impl<'rwlock, T> RwLockWriteGuard<'rwlock, T> {
     }
 }
 
-impl<'rwlock, T> Deref for RwLockReadGuard<'rwlock, T> {
+impl<T> Deref for RwLockReadGuard<'_, T> {
     type Target = T;
 
     fn deref(&self) -> &Self::Target {
@@ -556,7 +555,7 @@ impl<'rwlock, T> Deref for RwLockReadGuard<'rwlock, T> {
     }
 }
 
-impl<'rwlock, T> Deref for RwLockUpgradableGuard<'rwlock, T> {
+impl<T> Deref for RwLockUpgradableGuard<'_, T> {
     type Target = T;
 
     fn deref(&self) -> &Self::Target {
@@ -564,7 +563,7 @@ impl<'rwlock, T> Deref for RwLockUpgradableGuard<'rwlock, T> {
     }
 }
 
-impl<'rwlock, T> Deref for RwLockWriteGuard<'rwlock, T> {
+impl<T> Deref for RwLockWriteGuard<'_, T> {
     type Target = T;
 
     fn deref(&self) -> &Self::Target {
@@ -572,13 +571,13 @@ impl<'rwlock, T> Deref for RwLockWriteGuard<'rwlock, T> {
     }
 }
 
-impl<'rwlock, T> DerefMut for RwLockWriteGuard<'rwlock, T> {
+impl<T> DerefMut for RwLockWriteGuard<'_, T> {
     fn deref_mut(&mut self) -> &mut Self::Target {
         return unsafe { &mut *self.data };
     }
 }
 
-impl<'rwlock, T> Drop for RwLockReadGuard<'rwlock, T> {
+impl<T> Drop for RwLockReadGuard<'_, T> {
     fn drop(&mut self) {
         debug_assert!(self.lock.load(Ordering::Relaxed) & !(WRITER | UPGRADED) > 0);
         self.lock.fetch_sub(READER, Ordering::Release);
@@ -586,7 +585,7 @@ impl<'rwlock, T> Drop for RwLockReadGuard<'rwlock, T> {
     }
 }
 
-impl<'rwlock, T> Drop for RwLockUpgradableGuard<'rwlock, T> {
+impl<T> Drop for RwLockUpgradableGuard<'_, T> {
     fn drop(&mut self) {
         debug_assert_eq!(
             self.inner.lock.load(Ordering::Relaxed) & (WRITER | UPGRADED),
@@ -598,7 +597,7 @@ impl<'rwlock, T> Drop for RwLockUpgradableGuard<'rwlock, T> {
     }
 }
 
-impl<'rwlock, T> Drop for RwLockWriteGuard<'rwlock, T> {
+impl<T> Drop for RwLockWriteGuard<'_, T> {
     fn drop(&mut self) {
         debug_assert_eq!(self.inner.lock.load(Ordering::Relaxed) & WRITER, WRITER);
         self.inner

+ 0 - 1
kernel/src/libs/volatile.rs

@@ -64,7 +64,6 @@ macro_rules! volatile_write_bit {
 /// volwrite!(self.common_cfg, queue_enable, 0);
 ///
 /// 这样做不仅使代码的可读性提高了,也避免了对只读寄存器进行写入的误操作
-
 /// 只读寄存器
 #[derive(Default)]
 #[repr(transparent)]

+ 2 - 2
kernel/src/mm/memblock.rs

@@ -473,7 +473,7 @@ pub struct MemBlockIter<'a> {
 }
 
 #[allow(dead_code)]
-impl<'a> MemBlockIter<'a> {
+impl MemBlockIter<'_> {
     /// 获取内存区域数量
     pub fn total_num(&self) -> usize {
         self.inner.initial_memory_regions_num
@@ -490,7 +490,7 @@ impl<'a> MemBlockIter<'a> {
     }
 }
 
-impl<'a> Iterator for MemBlockIter<'a> {
+impl Iterator for MemBlockIter<'_> {
     type Item = PhysMemoryArea;
 
     fn next(&mut self) -> Option<Self::Item> {

+ 2 - 0
kernel/src/perf/bpf.rs

@@ -208,6 +208,8 @@ impl RingPage {
         let data_head = unsafe { &(*(self.ptr as *mut perf_event_mmap_page)).data_head };
         data_tail != data_head
     }
+
+    #[allow(dead_code)]
     pub fn as_slice(&self) -> &[u8] {
         unsafe { core::slice::from_raw_parts(self.ptr as *const u8, self.size) }
     }

+ 1 - 1
kernel/src/perf/util.rs

@@ -116,7 +116,7 @@ pub struct PerfSample<'a> {
     pub value: &'a [u8],
 }
 
-impl<'a> PerfSample<'a> {
+impl PerfSample<'_> {
     pub fn calculate_size(value_size: usize) -> usize {
         size_of::<SampleHeader>() + value_size
     }

+ 1 - 1
kernel/src/process/exit.rs

@@ -39,7 +39,7 @@ pub struct WaitIdInfo {
     pub cause: i32,
 }
 
-impl<'a> KernelWaitOption<'a> {
+impl KernelWaitOption<'_> {
     pub fn new(pid_type: PidType, pid: Pid, options: WaitOption) -> Self {
         Self {
             pid_type,

+ 1 - 1
kernel/src/process/syscall.rs

@@ -212,7 +212,7 @@ impl Syscall {
         return Ok(target_proc.basic().pgid());
     }
     /// @brief 获取当前进程的父进程id
-
+    ///
     /// 若为initproc则ppid设置为0   
     pub fn getppid() -> Result<Pid, SystemError> {
         let current_pcb = ProcessManager::current_pcb();

+ 1 - 2
kernel/src/syscall/misc.rs

@@ -10,12 +10,11 @@ use system_error::SystemError;
 
 use super::{user_access::UserBufferWriter, Syscall};
 
-#[repr(C)]
-
 /// 系统信息
 ///
 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/uapi/linux/sysinfo.h#8
 #[derive(Debug, Default, Copy, Clone)]
+#[repr(C)]
 pub struct SysInfo {
     uptime: u64,
     loads: [u64; 3],

+ 2 - 2
kernel/src/syscall/user_access.rs

@@ -160,7 +160,7 @@ pub struct UserBufferReader<'a> {
 }
 
 #[allow(dead_code)]
-impl<'a> UserBufferReader<'a> {
+impl UserBufferReader<'_> {
     /// 构造一个指向用户空间位置的BufferReader,为了兼容类似传入 *const u8 的情况,使用单独的泛型来进行初始化
     ///
     /// @param addr 用户空间指针
@@ -321,7 +321,7 @@ impl<'a> UserBufferWriter<'a> {
         return Ok(());
     }
 
-    pub fn buffer<T>(&'a mut self, offset: usize) -> Result<&mut [T], SystemError> {
+    pub fn buffer<T>(&'a mut self, offset: usize) -> Result<&'a mut [T], SystemError> {
         Self::convert_with_offset::<T>(self.buffer, offset).map_err(|_| SystemError::EINVAL)
     }
 

+ 1 - 1
tools/BUILD_CONTAINER_VERSION

@@ -1 +1 @@
-v1.5
+v1.6

+ 1 - 1
tools/Makefile

@@ -6,4 +6,4 @@ clean:
 	@cargo clean
 
 check:
-	@cargo +nightly-2024-07-23 check --workspace --message-format=json
+	@cargo +nightly-2024-11-05 check --workspace --message-format=json

+ 8 - 8
tools/bootstrap.sh

@@ -23,7 +23,7 @@ DEFAULT_INSTALL="false"
 
 export RUSTUP_DIST_SERVER=${RUSTUP_DIST_SERVER:-https://rsproxy.cn}
 export RUSTUP_UPDATE_ROOT=${RUSTUP_UPDATE_ROOT:-https://rsproxy.cn/rustup}
-export RUST_VERSION="${RUST_VERSION:-nightly-2024-07-23}"
+export RUST_VERSION="${RUST_VERSION:-nightly-2024-11-05}"
 
 banner()
 {
@@ -233,21 +233,21 @@ rustInstall() {
         echo "正在安装DragonOS所需的rust组件...首次安装需要一些时间来更新索引,请耐心等待..."
         cargo install cargo-binutils
 		cargo install bpf-linker
-		rustup toolchain install nightly-2023-08-15-x86_64-unknown-linux-gnu
+		rustup toolchain install nightly-2024-11-05-x86_64-unknown-linux-gnu
 		rustup toolchain install $RUST_VERSION-x86_64-unknown-linux-gnu
 		rustup component add rust-src --toolchain $RUST_VERSION-x86_64-unknown-linux-gnu
-		rustup component add rust-src --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu
+		rustup component add rust-src --toolchain nightly-2024-11-05-x86_64-unknown-linux-gnu
 		rustup target add x86_64-unknown-none --toolchain $RUST_VERSION-x86_64-unknown-linux-gnu
-		rustup target add x86_64-unknown-none --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu
-		rustup target add x86_64-unknown-linux-musl --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu
+		rustup target add x86_64-unknown-none --toolchain nightly-2024-11-05-x86_64-unknown-linux-gnu
+		rustup target add x86_64-unknown-linux-musl --toolchain nightly-2024-11-05-x86_64-unknown-linux-gnu
 		rustup target add x86_64-unknown-linux-musl --toolchain $RUST_VERSION-x86_64-unknown-linux-gnu
 
 		rustup toolchain install $RUST_VERSION-riscv64gc-unknown-linux-gnu --force-non-host
-		rustup toolchain install nightly-2023-08-15-riscv64gc-unknown-linux-gnu --force-non-host
+		rustup toolchain install nightly-2024-11-05-riscv64gc-unknown-linux-gnu --force-non-host
 		rustup target add riscv64gc-unknown-none-elf --toolchain $RUST_VERSION-riscv64gc-unknown-linux-gnu
 		rustup target add riscv64imac-unknown-none-elf --toolchain $RUST_VERSION-riscv64gc-unknown-linux-gnu
-		rustup target add riscv64gc-unknown-none-elf --toolchain nightly-2023-08-15-riscv64gc-unknown-linux-gnu
-		rustup target add riscv64imac-unknown-none-elf --toolchain nightly-2023-08-15-riscv64gc-unknown-linux-gnu
+		rustup target add riscv64gc-unknown-none-elf --toolchain nightly-2024-11-05-riscv64gc-unknown-linux-gnu
+		rustup target add riscv64imac-unknown-none-elf --toolchain nightly-2024-11-05-riscv64gc-unknown-linux-gnu
         
 		rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
 		rustup component add rust-src

+ 1 - 1
tools/debugging/logmonitor/src/app.rs

@@ -110,7 +110,7 @@ pub struct TabsState<'a> {
 }
 
 impl<'a> TabsState<'a> {
-    pub fn new(titles: Vec<&'a str>) -> TabsState {
+    pub fn new(titles: Vec<&'a str>) -> TabsState<'a> {
         TabsState { titles, index: 0 }
     }
     pub fn next(&mut self) {

+ 1 - 1
user/apps/clear/Makefile

@@ -1,4 +1,4 @@
-TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu"
+TOOLCHAIN="+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 # RUSTFLAGS+="-C target-feature=+crt-static -C link-arg=-no-pie"
 
 ifdef DADK_CURRENT_BUILD_DIR

+ 1 - 1
user/apps/test-backlog/Makefile

@@ -1,4 +1,4 @@
-TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu"
+TOOLCHAIN="+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 RUSTFLAGS+=""
 
 ifdef DADK_CURRENT_BUILD_DIR

+ 1 - 1
user/apps/test-blockcache/Makefile

@@ -1,6 +1,6 @@
 # The toolchain we use.
 # You can get it by running DragonOS' `tools/bootstrap.sh`
-TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu"
+TOOLCHAIN="+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 RUSTFLAGS+="-C target-feature=+crt-static -C link-arg=-no-pie"
 
 # 如果是在dadk中编译,那么安装到dadk的安装目录中

+ 1 - 1
user/apps/test-for-robustfutex/Makefile

@@ -1,4 +1,4 @@
-TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu"
+TOOLCHAIN="+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 RUSTFLAGS+=""
 
 ifdef DADK_CURRENT_BUILD_DIR

+ 1 - 1
user/apps/test-mount/Makefile

@@ -1,4 +1,4 @@
-TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu"
+TOOLCHAIN="+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 RUSTFLAGS+=""
 
 ifdef DADK_CURRENT_BUILD_DIR

+ 1 - 1
user/apps/test_alarm/Makefile

@@ -1,4 +1,4 @@
-TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu"
+TOOLCHAIN="+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 RUSTFLAGS+=""
 
 ifdef DADK_CURRENT_BUILD_DIR

+ 1 - 1
user/apps/test_ebpf/Makefile

@@ -1,4 +1,4 @@
-TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu"
+TOOLCHAIN="+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 RUSTFLAGS+=""
 
 ifdef DADK_CURRENT_BUILD_DIR

+ 1 - 1
user/apps/test_ebpf/syscall_ebpf/syscall_ebpf-ebpf/rust-toolchain.toml

@@ -1,5 +1,5 @@
 [toolchain]
-channel = "nightly-2024-07-23"
+channel = "nightly-2024-11-05"
 # The source code of rustc, provided by the rust-src component, is needed for
 # building eBPF programs.
 components = [

+ 1 - 1
user/apps/test_namespace/Makefile

@@ -1,4 +1,4 @@
-TOOLCHAIN="+nightly-2023-08-15-x86_64-unknown-linux-gnu"
+TOOLCHAIN="+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 RUSTFLAGS+=""
 
 ifdef DADK_CURRENT_BUILD_DIR

+ 1 - 1
user/apps/test_namespace/makefile.toml

@@ -1,7 +1,7 @@
 # Makefile.toml
 
 [env]
-TOOLCHAIN = "+nightly-2023-08-15-x86_64-unknown-linux-gnu"
+TOOLCHAIN = "+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 
 ARCH = { default = "x86_64" }
 RUST_TARGET = { default = { if = "eq(env.ARCH, 'riscv64')", value = "riscv64gc-unknown-linux-gnu", else = "x86_64-unknown-linux-musl" } }

+ 1 - 1
user/apps/test_socket/Makefile

@@ -1,4 +1,4 @@
-TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu"
+TOOLCHAIN="+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 RUSTFLAGS+=""
 
 ifdef DADK_CURRENT_BUILD_DIR

+ 1 - 1
user/apps/test_statx/Makefile

@@ -1,4 +1,4 @@
-TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu"
+TOOLCHAIN="+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 # RUSTFLAGS+="-C target-feature=+crt-static -C link-arg=-no-pie"
 
 ifdef DADK_CURRENT_BUILD_DIR

+ 1 - 1
user/apps/test_tokio/Makefile

@@ -1,4 +1,4 @@
-TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu"
+TOOLCHAIN="+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 RUSTFLAGS+=""
 
 ifdef DADK_CURRENT_BUILD_DIR

+ 1 - 1
user/apps/user-manage/Makefile

@@ -1,6 +1,6 @@
 # The toolchain we use.
 # You can get it by running DragonOS' `tools/bootstrap.sh`
-TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu"
+TOOLCHAIN="+nightly-2024-11-05-x86_64-unknown-linux-gnu"
 RUSTFLAGS+=""
 
 ifdef DADK_CURRENT_BUILD_DIR

+ 1 - 1
user/dadk/config/dog_0_1_0.dadk

@@ -8,7 +8,7 @@
       "Git": {
         "url": "https://git.mirrors.dragonos.org.cn/DragonOS-Community/dog.git",
         "branch": null,
-        "revision": "4ad6075686"
+        "revision": "6f2c0c8f12"
       }
     }
   },

+ 1 - 1
user/dadk/config/dragon_reach-0.1.0.dadk

@@ -6,7 +6,7 @@
     "BuildFromSource": {
       "Git": {
         "url" : "https://git.mirrors.dragonos.org.cn/DragonOS-Community/DragonReach.git",
-        "revision": "01cdc56863"
+        "revision": "e945c217b3"
       }
     }
   },