From bd70d2d1f490aabd570a5301b858bd5eb04149fa Mon Sep 17 00:00:00 2001 From: LoGin Date: Thu, 25 Jul 2024 00:55:02 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=B0=86=E5=B7=A5=E5=85=B7=E9=93=BE?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=88=B02024-07-23=20(#864)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: 将工具链更新到2024-07-23 --- .github/workflows/cache-toolchain.yml | 21 +++++++++++-------- build-scripts/Makefile | 2 +- build-scripts/kernel_build/src/lib.rs | 2 -- kernel/.cargo/config.toml | 5 +++++ kernel/Cargo.toml | 10 +++++---- kernel/Makefile | 6 +++--- kernel/crates/bitmap/src/lib.rs | 1 + kernel/crates/bitmap/src/static_bitmap.rs | 9 ++++++++ kernel/crates/bitmap/src/traits.rs | 5 ----- .../libs => crates}/intertrait/.gitignore | 0 .../libs => crates}/intertrait/Cargo.toml | 2 +- .../libs => crates}/intertrait/LICENSE-MIT | 0 .../{src/libs => crates}/intertrait/README.md | 2 +- .../intertrait/macros/Cargo.toml | 2 +- .../intertrait/macros/LICENSE-APACHE | 0 .../intertrait/macros/LICENSE-MIT | 0 .../intertrait/macros/src/args.rs | 0 .../intertrait/macros/src/gen_caster.rs | 0 .../intertrait/macros/src/item_impl.rs | 0 .../intertrait/macros/src/item_type.rs | 0 .../intertrait/macros/src/lib.rs | 0 .../libs => crates}/intertrait/src/cast.rs | 0 .../intertrait/src/cast/cast_arc.rs | 0 .../intertrait/src/cast/cast_box.rs | 0 .../intertrait/src/cast/cast_mut.rs | 0 .../intertrait/src/cast/cast_rc.rs | 0 .../intertrait/src/cast/cast_ref.rs | 0 .../libs => crates}/intertrait/src/hasher.rs | 0 .../libs => crates}/intertrait/src/lib.rs | 0 .../intertrait/tests/castable_to.rs | 0 .../intertrait/tests/on-enum.rs | 0 .../intertrait/tests/on-struct.rs | 0 .../tests/on-trait-impl-assoc-type1.rs | 0 .../tests/on-trait-impl-assoc-type2.rs | 0 .../tests/on-trait-impl-assoc-type3.rs | 0 .../intertrait/tests/on-trait-impl.rs | 0 .../intertrait/tests/on-type-multi-traits.rs | 0 .../libs => crates}/intertrait/tests/run.rs | 0 .../intertrait/tests/ui/duplicate-flags.rs | 0 .../tests/ui/duplicate-flags.stderr | 0 .../intertrait/tests/ui/on-generic-type.rs | 0 .../tests/ui/on-generic-type.stderr | 0 .../intertrait/tests/ui/on-type-impl.rs | 0 .../intertrait/tests/ui/on-type-impl.stderr | 0 .../intertrait/tests/ui/unknown-flag.rs | 0 .../intertrait/tests/ui/unknown-flag.stderr | 0 kernel/crates/klog_types/src/lib.rs | 6 ++++++ kernel/crates/rust-slabmalloc/src/pages.rs | 8 ++++--- kernel/crates/unified-init/Cargo.toml | 2 +- kernel/crates/unified-init/macros/Cargo.toml | 2 +- kernel/rust-toolchain.toml | 2 +- kernel/src/Makefile | 4 ++-- kernel/src/arch/io.rs | 1 + .../src/arch/x86_64/driver/apic/apic_timer.rs | 1 + .../arch/x86_64/driver/apic/lapic_vector.rs | 1 + kernel/src/arch/x86_64/init/mod.rs | 2 ++ kernel/src/arch/x86_64/interrupt/entry.rs | 1 + kernel/src/arch/x86_64/interrupt/msi.rs | 1 + kernel/src/arch/x86_64/ipc/signal.rs | 1 + kernel/src/arch/x86_64/kvm/vmx/vcpu.rs | 6 ++++-- .../arch/x86_64/kvm/vmx/vmx_asm_wrapper.rs | 4 ++-- kernel/src/arch/x86_64/mod.rs | 1 + kernel/src/arch/x86_64/process/kthread.rs | 3 +-- kernel/src/arch/x86_64/process/table.rs | 1 + kernel/src/arch/x86_64/smp/mod.rs | 1 + .../src/arch/x86_64/x86_64-unknown-none.json | 2 +- kernel/src/driver/acpi/bus.rs | 2 ++ kernel/src/driver/base/device/bus.rs | 3 +-- kernel/src/driver/base/device/dd.rs | 7 +++---- kernel/src/driver/base/device/driver.rs | 8 +++---- kernel/src/driver/base/device/mod.rs | 12 ++++------- .../driver/base/platform/platform_device.rs | 1 + .../driver/base/platform/platform_driver.rs | 1 + .../driver/block/cache/cached_block_device.rs | 2 ++ kernel/src/driver/disk/ahci/ahcidisk.rs | 5 ++--- kernel/src/driver/disk/ahci/hba.rs | 4 ++++ kernel/src/driver/firmware/efi/init.rs | 3 +-- kernel/src/driver/input/ps2_dev/ps2_device.rs | 1 + .../driver/input/ps2_mouse/ps_mouse_device.rs | 1 + kernel/src/driver/input/serio/i8042/mod.rs | 10 +++++---- kernel/src/driver/input/serio/serio_device.rs | 1 + kernel/src/driver/input/serio/serio_driver.rs | 1 + kernel/src/driver/net/e1000e/e1000e.rs | 3 ++- kernel/src/driver/net/loopback.rs | 1 - kernel/src/driver/net/mod.rs | 2 +- kernel/src/driver/open_firmware/fdt.rs | 3 +-- kernel/src/driver/pci/driver.rs | 1 + kernel/src/driver/rtc/mod.rs | 1 + kernel/src/driver/serial/mod.rs | 2 ++ kernel/src/driver/serial/serial8250/mod.rs | 1 + .../serial/serial8250/serial8250_pio.rs | 2 ++ kernel/src/driver/tty/console.rs | 1 + kernel/src/driver/tty/tty_core.rs | 12 ----------- kernel/src/driver/tty/tty_ldisc/ntty.rs | 4 ++-- .../tty/virtual_terminal/virtual_console.rs | 2 +- .../src/driver/video/fbdev/base/fbcon/mod.rs | 2 +- kernel/src/driver/video/fbdev/base/mod.rs | 3 +++ kernel/src/driver/virtio/mod.rs | 1 + kernel/src/exception/irqchip.rs | 3 +++ kernel/src/exception/irqdomain.rs | 2 ++ kernel/src/exception/msi.rs | 1 + kernel/src/filesystem/fat/entry.rs | 1 + kernel/src/filesystem/fat/fs.rs | 3 ++- kernel/src/filesystem/mbr.rs | 4 ++-- kernel/src/filesystem/procfs/syscall.rs | 2 -- kernel/src/filesystem/ramfs/mod.rs | 3 +++ kernel/src/filesystem/sysfs/group.rs | 3 +-- kernel/src/filesystem/vfs/mount.rs | 19 ----------------- kernel/src/filesystem/vfs/syscall.rs | 4 ++-- kernel/src/filesystem/vfs/utils.rs | 9 ++++---- kernel/src/init/mod.rs | 1 + kernel/src/ipc/signal_types.rs | 1 + kernel/src/lib.rs | 16 +++----------- kernel/src/libs/ffi_convert.rs | 15 ------------- kernel/src/libs/font/mod.rs | 1 + kernel/src/libs/ida/src/lib.rs | 1 + kernel/src/libs/lib_ui/screen_manager.rs | 1 + kernel/src/libs/lib_ui/textui.rs | 2 +- kernel/src/libs/lib_ui/textui_no_alloc.rs | 2 +- kernel/src/libs/mod.rs | 1 - kernel/src/libs/rwlock.rs | 2 +- kernel/src/mm/allocator/kernel_allocator.rs | 1 + kernel/src/mm/mmio_buddy.rs | 9 +++++--- kernel/src/mm/mod.rs | 1 + kernel/src/mm/ucontext.rs | 9 ++++---- kernel/src/net/net_core.rs | 1 + kernel/src/net/socket/inet.rs | 18 ++++++++-------- kernel/src/process/exec.rs | 2 +- kernel/src/process/exit.rs | 1 + kernel/src/process/fork.rs | 1 + kernel/src/process/mod.rs | 9 +++++--- kernel/src/sched/completion.rs | 4 ++-- kernel/src/sched/fair.rs | 11 ++++++++-- kernel/src/sched/mod.rs | 13 ++++++++++-- kernel/src/time/clocksource.rs | 2 ++ kernel/src/time/mod.rs | 2 -- kernel/src/time/timekeeping.rs | 1 - kernel/src/virt/kvm/vcpu.rs | 1 + kernel/src/virt/kvm/vm.rs | 1 + tools/Makefile | 2 +- tools/bootstrap.sh | 13 ++++++------ user/apps/clear/Makefile | 2 +- user/apps/test-backlog/Makefile | 2 +- user/apps/test-blockcache/Makefile | 2 +- user/apps/test-for-robustfutex/Makefile | 2 +- user/apps/test-mount/Makefile | 2 +- user/apps/test_alarm/Makefile | 2 +- user/apps/test_socket/Makefile | 2 +- user/apps/test_statx/Makefile | 2 +- user/apps/user-manage/Makefile | 2 +- 150 files changed, 237 insertions(+), 200 deletions(-) rename kernel/{src/libs => crates}/intertrait/.gitignore (100%) rename kernel/{src/libs => crates}/intertrait/Cargo.toml (97%) rename kernel/{src/libs => crates}/intertrait/LICENSE-MIT (100%) rename kernel/{src/libs => crates}/intertrait/README.md (99%) rename kernel/{src/libs => crates}/intertrait/macros/Cargo.toml (97%) rename kernel/{src/libs => crates}/intertrait/macros/LICENSE-APACHE (100%) rename kernel/{src/libs => crates}/intertrait/macros/LICENSE-MIT (100%) rename kernel/{src/libs => crates}/intertrait/macros/src/args.rs (100%) rename kernel/{src/libs => crates}/intertrait/macros/src/gen_caster.rs (100%) rename kernel/{src/libs => crates}/intertrait/macros/src/item_impl.rs (100%) rename kernel/{src/libs => crates}/intertrait/macros/src/item_type.rs (100%) rename kernel/{src/libs => crates}/intertrait/macros/src/lib.rs (100%) rename kernel/{src/libs => crates}/intertrait/src/cast.rs (100%) rename kernel/{src/libs => crates}/intertrait/src/cast/cast_arc.rs (100%) rename kernel/{src/libs => crates}/intertrait/src/cast/cast_box.rs (100%) rename kernel/{src/libs => crates}/intertrait/src/cast/cast_mut.rs (100%) rename kernel/{src/libs => crates}/intertrait/src/cast/cast_rc.rs (100%) rename kernel/{src/libs => crates}/intertrait/src/cast/cast_ref.rs (100%) rename kernel/{src/libs => crates}/intertrait/src/hasher.rs (100%) rename kernel/{src/libs => crates}/intertrait/src/lib.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/castable_to.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/on-enum.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/on-struct.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/on-trait-impl-assoc-type1.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/on-trait-impl-assoc-type2.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/on-trait-impl-assoc-type3.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/on-trait-impl.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/on-type-multi-traits.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/run.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/ui/duplicate-flags.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/ui/duplicate-flags.stderr (100%) rename kernel/{src/libs => crates}/intertrait/tests/ui/on-generic-type.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/ui/on-generic-type.stderr (100%) rename kernel/{src/libs => crates}/intertrait/tests/ui/on-type-impl.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/ui/on-type-impl.stderr (100%) rename kernel/{src/libs => crates}/intertrait/tests/ui/unknown-flag.rs (100%) rename kernel/{src/libs => crates}/intertrait/tests/ui/unknown-flag.stderr (100%) delete mode 100644 kernel/src/libs/ffi_convert.rs diff --git a/.github/workflows/cache-toolchain.yml b/.github/workflows/cache-toolchain.yml index a58b700f..94519c83 100644 --- a/.github/workflows/cache-toolchain.yml +++ b/.github/workflows/cache-toolchain.yml @@ -51,17 +51,17 @@ jobs: cargo install cargo-binutils rustup toolchain install nightly-x86_64-unknown-linux-gnu - rustup toolchain install nightly-2023-01-21-x86_64-unknown-linux-gnu + rustup toolchain install nightly-2024-07-23-x86_64-unknown-linux-gnu rustup toolchain install nightly-2023-08-15-x86_64-unknown-linux-gnu - rustup component add rust-src --toolchain nightly-2023-01-21-x86_64-unknown-linux-gnu + rustup component add rust-src --toolchain nightly-2024-07-23-x86_64-unknown-linux-gnu rustup component add rust-src --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu - rustup target add x86_64-unknown-none --toolchain nightly-2023-01-21-x86_64-unknown-linux-gnu + rustup target add x86_64-unknown-none --toolchain nightly-2024-07-23-x86_64-unknown-linux-gnu rustup target add x86_64-unknown-none --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu - rustup toolchain install nightly-2023-01-21-riscv64gc-unknown-linux-gnu --force-non-host + rustup toolchain install nightly-2024-07-23-riscv64gc-unknown-linux-gnu --force-non-host rustup toolchain install nightly-2023-08-15-riscv64gc-unknown-linux-gnu --force-non-host - rustup target add riscv64gc-unknown-none-elf --toolchain nightly-2023-01-21-riscv64gc-unknown-linux-gnu - rustup target add riscv64imac-unknown-none-elf --toolchain nightly-2023-01-21-riscv64gc-unknown-linux-gnu + rustup target add riscv64gc-unknown-none-elf --toolchain nightly-2024-07-23-riscv64gc-unknown-linux-gnu + rustup target add riscv64imac-unknown-none-elf --toolchain nightly-2024-07-23-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 @@ -71,12 +71,12 @@ jobs: rustup component add rustfmt rustup component add rustfmt --toolchain nightly-x86_64-unknown-linux-gnu - rustup component add rustfmt --toolchain nightly-2023-01-21-x86_64-unknown-linux-gnu + rustup component add rustfmt --toolchain nightly-2024-07-23-x86_64-unknown-linux-gnu rustup component add rustfmt --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu - rustup component add rustfmt --toolchain nightly-2023-01-21-riscv64gc-unknown-linux-gnu + rustup component add rustfmt --toolchain nightly-2024-07-23-riscv64gc-unknown-linux-gnu rustup component add rustfmt --toolchain nightly-2023-08-15-riscv64gc-unknown-linux-gnu - rustup default nightly + rustup default nightly-2024-07-23 cargo install dadk --version 0.1.11 @@ -86,6 +86,9 @@ jobs: rustup toolchain install ${userapp_musl_toolchain} rustup component add --toolchain ${userapp_musl_toolchain} rust-src rustup target add --toolchain ${userapp_musl_toolchain} x86_64-unknown-linux-musl + + rustup target add x86_64-unknown-linux-musl --toolchain nightly-2024-07-23-x86_64-unknown-linux-gnu + rustup component add rust-src --toolchain nightly-2024-07-23-x86_64-unknown-linux-gnu diff --git a/build-scripts/Makefile b/build-scripts/Makefile index d39559ff..14c1bd93 100644 --- a/build-scripts/Makefile +++ b/build-scripts/Makefile @@ -5,4 +5,4 @@ fmt: clean: @cargo clean check: - @cargo +nightly-2023-08-15 check --workspace $(CARGO_ZBUILD) --message-format=json + @cargo +nightly-2024-07-23 check --workspace $(CARGO_ZBUILD) --message-format=json diff --git a/build-scripts/kernel_build/src/lib.rs b/build-scripts/kernel_build/src/lib.rs index d0de77f8..21844c53 100644 --- a/build-scripts/kernel_build/src/lib.rs +++ b/build-scripts/kernel_build/src/lib.rs @@ -1,5 +1,3 @@ -#![feature(cfg_target_abi)] - #[macro_use] extern crate lazy_static; extern crate cc; diff --git a/kernel/.cargo/config.toml b/kernel/.cargo/config.toml index 146246b4..5c216cc9 100644 --- a/kernel/.cargo/config.toml +++ b/kernel/.cargo/config.toml @@ -5,4 +5,9 @@ [target.'cfg(target_os = "none")'] runner = "bootimage runner" +[build] +# '-Zlinker-features=-lld' 禁用rustlld(20240723),因为它与linkme0.3版本冲突 +rustflags = ["-Zlinker-features=-lld"] +rustdocflags = ["-Zlinker-features=-lld"] + [env] diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index 30883437..1edffba5 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -12,16 +12,18 @@ crate-type = ["staticlib"] [workspace] members = [ "crates/*", - "src/libs/intertrait" ] [features] -default = ["backtrace", "kvm"] +default = ["backtrace", "kvm", "fatfs", "fatfs-secure"] # 内核栈回溯 backtrace = [] # kvm kvm = [] +fatfs = [] +fatfs-secure = ["fatfs"] + # 运行时依赖项 [dependencies] @@ -37,10 +39,10 @@ driver_base_macros = { "path" = "crates/driver_base_macros" } elf = { version = "=0.7.2", default-features = false } hashbrown = "=0.13.2" ida = { path = "src/libs/ida" } -intertrait = { path = "src/libs/intertrait" } +intertrait = { path = "crates/intertrait" } kdepends = { path = "crates/kdepends" } klog_types = { path = "crates/klog_types" } -linkme = "=0.2" +linkme = "=0.3.27" num = { version = "=0.4.0", default-features = false } num-derive = "=0.3" num-traits = { git = "https://git.mirrors.dragonos.org.cn/DragonOS-Community/num-traits.git", rev="1597c1c", default-features = false } diff --git a/kernel/Makefile b/kernel/Makefile index c50007c6..c9e28ed2 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -36,12 +36,12 @@ check: ECHO # @echo "Checking kernel... ARCH=$(ARCH)" # @exit 1 ifeq ($(ARCH), x86_64) - @cargo +nightly-2023-08-15 check --workspace $(CARGO_ZBUILD) --message-format=json --target ./src/$(TARGET_JSON) + @cargo +nightly-2024-07-23 check --workspace $(CARGO_ZBUILD) --message-format=json --target ./src/$(TARGET_JSON) else ifeq ($(ARCH), riscv64) - @cargo +nightly-2023-08-15 check --workspace $(CARGO_ZBUILD) --message-format=json --target $(TARGET_JSON) + @cargo +nightly-2024-07-23 check --workspace $(CARGO_ZBUILD) --message-format=json --target $(TARGET_JSON) endif test: # 测试内核库 - @cargo +nightly-2023-08-15 test --workspace --exclude dragonos_kernel + @cargo +nightly-2024-07-23 test --workspace --exclude dragonos_kernel diff --git a/kernel/crates/bitmap/src/lib.rs b/kernel/crates/bitmap/src/lib.rs index 7af67331..4d799131 100644 --- a/kernel/crates/bitmap/src/lib.rs +++ b/kernel/crates/bitmap/src/lib.rs @@ -2,6 +2,7 @@ #![feature(core_intrinsics)] #![allow(incomplete_features)] // for const generics #![feature(generic_const_exprs)] +#![allow(internal_features)] #![allow(clippy::needless_return)] #[macro_use] diff --git a/kernel/crates/bitmap/src/static_bitmap.rs b/kernel/crates/bitmap/src/static_bitmap.rs index 96281aaf..c391a7da 100644 --- a/kernel/crates/bitmap/src/static_bitmap.rs +++ b/kernel/crates/bitmap/src/static_bitmap.rs @@ -14,6 +14,15 @@ where core: BitMapCore, } +impl Default for StaticBitmap +where + [(); (N + usize::BITS as usize - 1) / (usize::BITS as usize)]:, +{ + fn default() -> Self { + Self::new() + } +} + impl StaticBitmap where [(); (N + usize::BITS as usize - 1) / (usize::BITS as usize)]:, diff --git a/kernel/crates/bitmap/src/traits.rs b/kernel/crates/bitmap/src/traits.rs index 8fc3a4ca..ba7cfd88 100644 --- a/kernel/crates/bitmap/src/traits.rs +++ b/kernel/crates/bitmap/src/traits.rs @@ -182,11 +182,6 @@ macro_rules! bitops_for { } } - #[cfg(feature = "std")] - fn to_hex(bits: &Self) -> String { - format!("{:x}", bits) - } - #[inline] fn bit_size() -> usize { <$target>::BITS as usize diff --git a/kernel/src/libs/intertrait/.gitignore b/kernel/crates/intertrait/.gitignore similarity index 100% rename from kernel/src/libs/intertrait/.gitignore rename to kernel/crates/intertrait/.gitignore diff --git a/kernel/src/libs/intertrait/Cargo.toml b/kernel/crates/intertrait/Cargo.toml similarity index 97% rename from kernel/src/libs/intertrait/Cargo.toml rename to kernel/crates/intertrait/Cargo.toml index fe7febd7..697bccc2 100644 --- a/kernel/src/libs/intertrait/Cargo.toml +++ b/kernel/crates/intertrait/Cargo.toml @@ -14,7 +14,7 @@ include = ["src/**/*", "Cargo.toml", "LICENSE-*", "README.md"] [dependencies] -linkme = "0.2" +linkme = "=0.3.27" hashbrown = "0.13.2" intertrait-macros = { version = "=0.2.2", path = "macros" } diff --git a/kernel/src/libs/intertrait/LICENSE-MIT b/kernel/crates/intertrait/LICENSE-MIT similarity index 100% rename from kernel/src/libs/intertrait/LICENSE-MIT rename to kernel/crates/intertrait/LICENSE-MIT diff --git a/kernel/src/libs/intertrait/README.md b/kernel/crates/intertrait/README.md similarity index 99% rename from kernel/src/libs/intertrait/README.md rename to kernel/crates/intertrait/README.md index f4db2953..6f22c661 100644 --- a/kernel/src/libs/intertrait/README.md +++ b/kernel/crates/intertrait/README.md @@ -23,7 +23,7 @@ Add the following two dependencies to your `Cargo.toml`: ```toml [dependencies] intertrait = "0.2" -linkme = "0.2" +linkme = "=0.3.27" ``` The `linkme` dependency is required due to the use of `linkme` macro in the output of `intertrait` macros. diff --git a/kernel/src/libs/intertrait/macros/Cargo.toml b/kernel/crates/intertrait/macros/Cargo.toml similarity index 97% rename from kernel/src/libs/intertrait/macros/Cargo.toml rename to kernel/crates/intertrait/macros/Cargo.toml index 6e05adf2..769db833 100644 --- a/kernel/src/libs/intertrait/macros/Cargo.toml +++ b/kernel/crates/intertrait/macros/Cargo.toml @@ -20,4 +20,4 @@ uuid = { version = "0.8", features = ["v4"] } [dev-dependencies] intertrait = { version = "=0.2.2", path = ".." } -linkme = "0.2" +linkme = "=0.3.27" diff --git a/kernel/src/libs/intertrait/macros/LICENSE-APACHE b/kernel/crates/intertrait/macros/LICENSE-APACHE similarity index 100% rename from kernel/src/libs/intertrait/macros/LICENSE-APACHE rename to kernel/crates/intertrait/macros/LICENSE-APACHE diff --git a/kernel/src/libs/intertrait/macros/LICENSE-MIT b/kernel/crates/intertrait/macros/LICENSE-MIT similarity index 100% rename from kernel/src/libs/intertrait/macros/LICENSE-MIT rename to kernel/crates/intertrait/macros/LICENSE-MIT diff --git a/kernel/src/libs/intertrait/macros/src/args.rs b/kernel/crates/intertrait/macros/src/args.rs similarity index 100% rename from kernel/src/libs/intertrait/macros/src/args.rs rename to kernel/crates/intertrait/macros/src/args.rs diff --git a/kernel/src/libs/intertrait/macros/src/gen_caster.rs b/kernel/crates/intertrait/macros/src/gen_caster.rs similarity index 100% rename from kernel/src/libs/intertrait/macros/src/gen_caster.rs rename to kernel/crates/intertrait/macros/src/gen_caster.rs diff --git a/kernel/src/libs/intertrait/macros/src/item_impl.rs b/kernel/crates/intertrait/macros/src/item_impl.rs similarity index 100% rename from kernel/src/libs/intertrait/macros/src/item_impl.rs rename to kernel/crates/intertrait/macros/src/item_impl.rs diff --git a/kernel/src/libs/intertrait/macros/src/item_type.rs b/kernel/crates/intertrait/macros/src/item_type.rs similarity index 100% rename from kernel/src/libs/intertrait/macros/src/item_type.rs rename to kernel/crates/intertrait/macros/src/item_type.rs diff --git a/kernel/src/libs/intertrait/macros/src/lib.rs b/kernel/crates/intertrait/macros/src/lib.rs similarity index 100% rename from kernel/src/libs/intertrait/macros/src/lib.rs rename to kernel/crates/intertrait/macros/src/lib.rs diff --git a/kernel/src/libs/intertrait/src/cast.rs b/kernel/crates/intertrait/src/cast.rs similarity index 100% rename from kernel/src/libs/intertrait/src/cast.rs rename to kernel/crates/intertrait/src/cast.rs diff --git a/kernel/src/libs/intertrait/src/cast/cast_arc.rs b/kernel/crates/intertrait/src/cast/cast_arc.rs similarity index 100% rename from kernel/src/libs/intertrait/src/cast/cast_arc.rs rename to kernel/crates/intertrait/src/cast/cast_arc.rs diff --git a/kernel/src/libs/intertrait/src/cast/cast_box.rs b/kernel/crates/intertrait/src/cast/cast_box.rs similarity index 100% rename from kernel/src/libs/intertrait/src/cast/cast_box.rs rename to kernel/crates/intertrait/src/cast/cast_box.rs diff --git a/kernel/src/libs/intertrait/src/cast/cast_mut.rs b/kernel/crates/intertrait/src/cast/cast_mut.rs similarity index 100% rename from kernel/src/libs/intertrait/src/cast/cast_mut.rs rename to kernel/crates/intertrait/src/cast/cast_mut.rs diff --git a/kernel/src/libs/intertrait/src/cast/cast_rc.rs b/kernel/crates/intertrait/src/cast/cast_rc.rs similarity index 100% rename from kernel/src/libs/intertrait/src/cast/cast_rc.rs rename to kernel/crates/intertrait/src/cast/cast_rc.rs diff --git a/kernel/src/libs/intertrait/src/cast/cast_ref.rs b/kernel/crates/intertrait/src/cast/cast_ref.rs similarity index 100% rename from kernel/src/libs/intertrait/src/cast/cast_ref.rs rename to kernel/crates/intertrait/src/cast/cast_ref.rs diff --git a/kernel/src/libs/intertrait/src/hasher.rs b/kernel/crates/intertrait/src/hasher.rs similarity index 100% rename from kernel/src/libs/intertrait/src/hasher.rs rename to kernel/crates/intertrait/src/hasher.rs diff --git a/kernel/src/libs/intertrait/src/lib.rs b/kernel/crates/intertrait/src/lib.rs similarity index 100% rename from kernel/src/libs/intertrait/src/lib.rs rename to kernel/crates/intertrait/src/lib.rs diff --git a/kernel/src/libs/intertrait/tests/castable_to.rs b/kernel/crates/intertrait/tests/castable_to.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/castable_to.rs rename to kernel/crates/intertrait/tests/castable_to.rs diff --git a/kernel/src/libs/intertrait/tests/on-enum.rs b/kernel/crates/intertrait/tests/on-enum.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/on-enum.rs rename to kernel/crates/intertrait/tests/on-enum.rs diff --git a/kernel/src/libs/intertrait/tests/on-struct.rs b/kernel/crates/intertrait/tests/on-struct.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/on-struct.rs rename to kernel/crates/intertrait/tests/on-struct.rs diff --git a/kernel/src/libs/intertrait/tests/on-trait-impl-assoc-type1.rs b/kernel/crates/intertrait/tests/on-trait-impl-assoc-type1.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/on-trait-impl-assoc-type1.rs rename to kernel/crates/intertrait/tests/on-trait-impl-assoc-type1.rs diff --git a/kernel/src/libs/intertrait/tests/on-trait-impl-assoc-type2.rs b/kernel/crates/intertrait/tests/on-trait-impl-assoc-type2.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/on-trait-impl-assoc-type2.rs rename to kernel/crates/intertrait/tests/on-trait-impl-assoc-type2.rs diff --git a/kernel/src/libs/intertrait/tests/on-trait-impl-assoc-type3.rs b/kernel/crates/intertrait/tests/on-trait-impl-assoc-type3.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/on-trait-impl-assoc-type3.rs rename to kernel/crates/intertrait/tests/on-trait-impl-assoc-type3.rs diff --git a/kernel/src/libs/intertrait/tests/on-trait-impl.rs b/kernel/crates/intertrait/tests/on-trait-impl.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/on-trait-impl.rs rename to kernel/crates/intertrait/tests/on-trait-impl.rs diff --git a/kernel/src/libs/intertrait/tests/on-type-multi-traits.rs b/kernel/crates/intertrait/tests/on-type-multi-traits.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/on-type-multi-traits.rs rename to kernel/crates/intertrait/tests/on-type-multi-traits.rs diff --git a/kernel/src/libs/intertrait/tests/run.rs b/kernel/crates/intertrait/tests/run.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/run.rs rename to kernel/crates/intertrait/tests/run.rs diff --git a/kernel/src/libs/intertrait/tests/ui/duplicate-flags.rs b/kernel/crates/intertrait/tests/ui/duplicate-flags.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/ui/duplicate-flags.rs rename to kernel/crates/intertrait/tests/ui/duplicate-flags.rs diff --git a/kernel/src/libs/intertrait/tests/ui/duplicate-flags.stderr b/kernel/crates/intertrait/tests/ui/duplicate-flags.stderr similarity index 100% rename from kernel/src/libs/intertrait/tests/ui/duplicate-flags.stderr rename to kernel/crates/intertrait/tests/ui/duplicate-flags.stderr diff --git a/kernel/src/libs/intertrait/tests/ui/on-generic-type.rs b/kernel/crates/intertrait/tests/ui/on-generic-type.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/ui/on-generic-type.rs rename to kernel/crates/intertrait/tests/ui/on-generic-type.rs diff --git a/kernel/src/libs/intertrait/tests/ui/on-generic-type.stderr b/kernel/crates/intertrait/tests/ui/on-generic-type.stderr similarity index 100% rename from kernel/src/libs/intertrait/tests/ui/on-generic-type.stderr rename to kernel/crates/intertrait/tests/ui/on-generic-type.stderr diff --git a/kernel/src/libs/intertrait/tests/ui/on-type-impl.rs b/kernel/crates/intertrait/tests/ui/on-type-impl.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/ui/on-type-impl.rs rename to kernel/crates/intertrait/tests/ui/on-type-impl.rs diff --git a/kernel/src/libs/intertrait/tests/ui/on-type-impl.stderr b/kernel/crates/intertrait/tests/ui/on-type-impl.stderr similarity index 100% rename from kernel/src/libs/intertrait/tests/ui/on-type-impl.stderr rename to kernel/crates/intertrait/tests/ui/on-type-impl.stderr diff --git a/kernel/src/libs/intertrait/tests/ui/unknown-flag.rs b/kernel/crates/intertrait/tests/ui/unknown-flag.rs similarity index 100% rename from kernel/src/libs/intertrait/tests/ui/unknown-flag.rs rename to kernel/crates/intertrait/tests/ui/unknown-flag.rs diff --git a/kernel/src/libs/intertrait/tests/ui/unknown-flag.stderr b/kernel/crates/intertrait/tests/ui/unknown-flag.stderr similarity index 100% rename from kernel/src/libs/intertrait/tests/ui/unknown-flag.stderr rename to kernel/crates/intertrait/tests/ui/unknown-flag.stderr diff --git a/kernel/crates/klog_types/src/lib.rs b/kernel/crates/klog_types/src/lib.rs index a9b180d7..22db1068 100644 --- a/kernel/crates/klog_types/src/lib.rs +++ b/kernel/crates/klog_types/src/lib.rs @@ -175,6 +175,12 @@ impl MMLogCycle { } } +impl Default for MMLogCycle { + fn default() -> Self { + Self::new() + } +} + impl kdepends::thingbuf::Recycle for MMLogCycle { fn new_element(&self) -> AllocatorLog { AllocatorLog::zeroed() diff --git a/kernel/crates/rust-slabmalloc/src/pages.rs b/kernel/crates/rust-slabmalloc/src/pages.rs index ba667148..6d2f6516 100644 --- a/kernel/crates/rust-slabmalloc/src/pages.rs +++ b/kernel/crates/rust-slabmalloc/src/pages.rs @@ -38,7 +38,7 @@ impl Bitfield for [AtomicU64] { fn initialize(&mut self, for_size: usize, capacity: usize) { // Set everything to allocated for bitmap in self.iter_mut() { - *bitmap = AtomicU64::new(u64::max_value()); + *bitmap = AtomicU64::new(u64::MAX); } // Mark actual slots as free @@ -64,7 +64,7 @@ impl Bitfield for [AtomicU64] { for (base_idx, b) in self.iter().enumerate() { let bitval = b.load(Ordering::Relaxed); - if bitval == u64::max_value() { + if bitval == u64::MAX { continue; } else { let negated = !bitval; @@ -125,7 +125,7 @@ impl Bitfield for [AtomicU64] { #[inline(always)] fn is_full(&self) -> bool { self.iter() - .filter(|&x| x.load(Ordering::Relaxed) != u64::max_value()) + .filter(|&x| x.load(Ordering::Relaxed) != u64::MAX) .count() == 0 } @@ -410,6 +410,7 @@ impl<'a, T: AllocablePage> PageList<'a, T> { } /// Removes `slab_page` from the list. + #[allow(clippy::manual_inspect)] pub(crate) fn pop<'b>(&'b mut self) -> Option<&'a mut T> { match self.head { None => None, @@ -453,6 +454,7 @@ impl<'a, P: AllocablePage + 'a> Iterator for ObjectPageIterMut<'a, P> { type Item = &'a mut P; #[inline] + #[allow(clippy::manual_inspect)] fn next(&mut self) -> Option<&'a mut P> { unsafe { self.head.resolve_mut().map(|next| { diff --git a/kernel/crates/unified-init/Cargo.toml b/kernel/crates/unified-init/Cargo.toml index 89381997..d52fce58 100644 --- a/kernel/crates/unified-init/Cargo.toml +++ b/kernel/crates/unified-init/Cargo.toml @@ -10,5 +10,5 @@ path = "src/main.rs" [dependencies] unified-init-macros = { path = "macros" } -linkme = "0.2" +linkme = "=0.3.27" system_error = { path = "../system_error" } \ No newline at end of file diff --git a/kernel/crates/unified-init/macros/Cargo.toml b/kernel/crates/unified-init/macros/Cargo.toml index 0fe25a1f..a6a746f9 100644 --- a/kernel/crates/unified-init/macros/Cargo.toml +++ b/kernel/crates/unified-init/macros/Cargo.toml @@ -16,5 +16,5 @@ uuid = { version = "0.8", features = ["v4"] } [dev-dependencies] unified-init = { path = ".." } -linkme = "0.2" +linkme = "=0.3.27" system_error = { path = "../../system_error" } diff --git a/kernel/rust-toolchain.toml b/kernel/rust-toolchain.toml index ddfcd41a..32573182 100644 --- a/kernel/rust-toolchain.toml +++ b/kernel/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "nightly-2023-08-15" +channel = "nightly-2024-07-23" components = ["rust-src", "clippy"] \ No newline at end of file diff --git a/kernel/src/Makefile b/kernel/src/Makefile index 40299bc9..e9da4b02 100644 --- a/kernel/src/Makefile +++ b/kernel/src/Makefile @@ -21,7 +21,7 @@ ifeq ($(ARCH), x86_64) endif endif -RUSTFLAGS = $(RUSTFLAGS_UNWIND) +RUSTFLAGS += $(RUSTFLAGS_UNWIND) CFLAGS = $(GLOBAL_CFLAGS) -fno-pie $(CFLAGS_UNWIND) -I $(shell pwd) -I $(shell pwd)/include @@ -40,7 +40,7 @@ kernel_subdirs := common driver debug syscall libs kernel_rust: - RUSTFLAGS="$(RUSTFLAGS)" cargo +nightly-2023-08-15 $(CARGO_ZBUILD) build --release --target $(TARGET_JSON) + RUSTFLAGS="$(RUSTFLAGS)" cargo +nightly-2024-07-23 $(CARGO_ZBUILD) build --release --target $(TARGET_JSON) all: kernel diff --git a/kernel/src/arch/io.rs b/kernel/src/arch/io.rs index 498f5793..4b6384b6 100644 --- a/kernel/src/arch/io.rs +++ b/kernel/src/arch/io.rs @@ -1,4 +1,5 @@ /// 每个架构都需要实现的IO接口 +#[allow(unused)] pub trait PortIOArch { unsafe fn in8(port: u16) -> u8; unsafe fn in16(port: u16) -> u16; diff --git a/kernel/src/arch/x86_64/driver/apic/apic_timer.rs b/kernel/src/arch/x86_64/driver/apic/apic_timer.rs index 35acebf0..1a18e543 100644 --- a/kernel/src/arch/x86_64/driver/apic/apic_timer.rs +++ b/kernel/src/arch/x86_64/driver/apic/apic_timer.rs @@ -156,6 +156,7 @@ impl LocalApicTimerIntrController { local_apic_timer.start_current(); } + #[allow(dead_code)] pub(super) fn disable(&self) { let cpu_id = smp_get_processor_id(); let local_apic_timer = local_apic_timer_instance_mut(cpu_id); diff --git a/kernel/src/arch/x86_64/driver/apic/lapic_vector.rs b/kernel/src/arch/x86_64/driver/apic/lapic_vector.rs index a267346a..8b46f040 100644 --- a/kernel/src/arch/x86_64/driver/apic/lapic_vector.rs +++ b/kernel/src/arch/x86_64/driver/apic/lapic_vector.rs @@ -179,6 +179,7 @@ bitflags! { } } +#[allow(dead_code)] pub(super) fn irq_msi_compose_msg(cfg: &HardwareIrqConfig, msg: &mut MsiMsg, dmar: bool) { *msg = MsiMsg::new_zeroed(); diff --git a/kernel/src/arch/x86_64/init/mod.rs b/kernel/src/arch/x86_64/init/mod.rs index 534b92cf..c1ae2d8d 100644 --- a/kernel/src/arch/x86_64/init/mod.rs +++ b/kernel/src/arch/x86_64/init/mod.rs @@ -35,6 +35,7 @@ extern "C" { } #[no_mangle] +#[allow(static_mut_refs)] unsafe extern "C" fn kernel_main( mb2_info: u64, mb2_magic: u64, @@ -66,6 +67,7 @@ unsafe extern "C" fn kernel_main( /// 在内存管理初始化之前的架构相关的早期初始化 #[inline(never)] +#[allow(static_mut_refs)] pub fn early_setup_arch() -> Result<(), SystemError> { let stack_start = unsafe { *(head_stack_start as *const u64) } as usize; debug!("head_stack_start={:#x}\n", stack_start); diff --git a/kernel/src/arch/x86_64/interrupt/entry.rs b/kernel/src/arch/x86_64/interrupt/entry.rs index da092192..3d8637a3 100644 --- a/kernel/src/arch/x86_64/interrupt/entry.rs +++ b/kernel/src/arch/x86_64/interrupt/entry.rs @@ -564,6 +564,7 @@ pub unsafe fn set_system_trap_gate(irq: u32, ist: u8, vaddr: VirtAddr) { set_gate(idt_entry, 0xEF, ist, vaddr); } +#[allow(static_mut_refs)] unsafe fn get_idt_entry(irq: u32) -> &'static mut [u64] { assert!(irq < 256); let mut idt_vaddr = diff --git a/kernel/src/arch/x86_64/interrupt/msi.rs b/kernel/src/arch/x86_64/interrupt/msi.rs index 34d6c420..84c73918 100644 --- a/kernel/src/arch/x86_64/interrupt/msi.rs +++ b/kernel/src/arch/x86_64/interrupt/msi.rs @@ -26,6 +26,7 @@ pub struct X86MsiDataNormal { } #[derive(Debug)] +#[allow(dead_code)] pub struct X86MsiDataDmar { pub dmar_subhandle: u32, } diff --git a/kernel/src/arch/x86_64/ipc/signal.rs b/kernel/src/arch/x86_64/ipc/signal.rs index caf44b53..c9d0af99 100644 --- a/kernel/src/arch/x86_64/ipc/signal.rs +++ b/kernel/src/arch/x86_64/ipc/signal.rs @@ -396,6 +396,7 @@ impl SigContext { } } /// @brief 信号处理备用栈的信息 +#[allow(dead_code)] #[derive(Debug, Clone, Copy)] pub struct SigStack { pub sp: *mut c_void, diff --git a/kernel/src/arch/x86_64/kvm/vmx/vcpu.rs b/kernel/src/arch/x86_64/kvm/vmx/vcpu.rs index 46f2ed53..f35d59e6 100644 --- a/kernel/src/arch/x86_64/kvm/vmx/vcpu.rs +++ b/kernel/src/arch/x86_64/kvm/vmx/vcpu.rs @@ -42,6 +42,7 @@ pub struct MSRBitmap { pub data: [u8; PAGE_SIZE], } +#[allow(dead_code)] #[derive(Debug)] pub struct VcpuData { /// The virtual and physical address of the Vmxon naturally aligned 4-KByte region of memory @@ -73,6 +74,7 @@ pub enum VcpuState { Act = 2, } +#[allow(dead_code)] #[derive(Debug)] pub struct VmxVcpu { pub vcpu_id: u32, @@ -318,13 +320,13 @@ impl VmxVcpu { )?; vmx_vmwrite( VmcsFields::HOST_GDTR_BASE as u32, - pseudo_descriptpr.base.to_bits() as u64, + pseudo_descriptpr.base as usize as u64, )?; vmx_vmwrite(VmcsFields::HOST_IDTR_BASE as u32, unsafe { let mut pseudo_descriptpr: x86::dtables::DescriptorTablePointer = Default::default(); x86::dtables::sidt(&mut pseudo_descriptpr); - pseudo_descriptpr.base.to_bits() as u64 + pseudo_descriptpr.base as usize as u64 })?; // fast entry into the kernel diff --git a/kernel/src/arch/x86_64/kvm/vmx/vmx_asm_wrapper.rs b/kernel/src/arch/x86_64/kvm/vmx/vmx_asm_wrapper.rs index 2402b07f..0540846a 100644 --- a/kernel/src/arch/x86_64/kvm/vmx/vmx_asm_wrapper.rs +++ b/kernel/src/arch/x86_64/kvm/vmx/vmx_asm_wrapper.rs @@ -64,10 +64,10 @@ pub fn vmx_vmlaunch() -> Result<(), SystemError> { "push rsi", "push rdi", "vmwrite {0:r}, rsp", - "lea rax, 1f[rip]", + "lea rax, 2f[rip]", "vmwrite {1:r}, rax", "vmlaunch", - "1:", + "2:", "pop rdi", "pop rsi", "pop rdx", diff --git a/kernel/src/arch/x86_64/mod.rs b/kernel/src/arch/x86_64/mod.rs index b2069f08..ff95ab1d 100644 --- a/kernel/src/arch/x86_64/mod.rs +++ b/kernel/src/arch/x86_64/mod.rs @@ -30,6 +30,7 @@ pub use interrupt::X86_64InterruptArch as CurrentIrqArch; pub use crate::arch::asm::pio::X86_64PortIOArch as CurrentPortIOArch; pub use kvm::X86_64KVMArch as KVMArch; +#[allow(unused_imports)] pub use crate::arch::ipc::signal::X86_64SignalArch as CurrentSignalArch; pub use crate::arch::time::X86_64TimeArch as CurrentTimeArch; diff --git a/kernel/src/arch/x86_64/process/kthread.rs b/kernel/src/arch/x86_64/process/kthread.rs index 1c0517d2..58f6df1f 100644 --- a/kernel/src/arch/x86_64/process/kthread.rs +++ b/kernel/src/arch/x86_64/process/kthread.rs @@ -42,9 +42,8 @@ impl KernelThreadMechanism { frame.rip = kernel_thread_bootstrap_stage1 as usize as u64; // fork失败的话,子线程不会执行。否则将导致内存安全问题。 - let pid = ProcessManager::fork(&frame, clone_flags).map_err(|e| { + let pid = ProcessManager::fork(&frame, clone_flags).inspect_err(|_e| { unsafe { KernelThreadCreateInfo::parse_unsafe_arc_ptr(create_info) }; - e })?; ProcessManager::find(pid) diff --git a/kernel/src/arch/x86_64/process/table.rs b/kernel/src/arch/x86_64/process/table.rs index e28c922c..cbe5d787 100644 --- a/kernel/src/arch/x86_64/process/table.rs +++ b/kernel/src/arch/x86_64/process/table.rs @@ -59,6 +59,7 @@ impl TSSManager { x86::task::load_tr(selector); } + #[allow(static_mut_refs)] unsafe fn set_tss_descriptor(index: u16, vaddr: VirtAddr) { const LIMIT: u64 = 103; let gdt_vaddr = VirtAddr::new(&GDT_Table as *const _ as usize); diff --git a/kernel/src/arch/x86_64/smp/mod.rs b/kernel/src/arch/x86_64/smp/mod.rs index 1068c8b7..2eaa5fc7 100644 --- a/kernel/src/arch/x86_64/smp/mod.rs +++ b/kernel/src/arch/x86_64/smp/mod.rs @@ -259,6 +259,7 @@ impl X86_64SMPArch { } impl SmpCpuManager { + #[allow(static_mut_refs)] pub fn arch_init(_boot_cpu: ProcessorId) { assert!(smp_get_processor_id().data() == 0); // 写入APU_START_CR3,这个值会在AP处理器启动时设置到CR3寄存器 diff --git a/kernel/src/arch/x86_64/x86_64-unknown-none.json b/kernel/src/arch/x86_64/x86_64-unknown-none.json index a24b9878..fbc13a4a 100644 --- a/kernel/src/arch/x86_64/x86_64-unknown-none.json +++ b/kernel/src/arch/x86_64/x86_64-unknown-none.json @@ -1,6 +1,6 @@ { "llvm-target": "x86_64-unknown-none", - "data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128", + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", "arch": "x86_64", "target-endian": "little", "target-pointer-width": "64", diff --git a/kernel/src/driver/acpi/bus.rs b/kernel/src/driver/acpi/bus.rs index 46869d11..f91c2784 100644 --- a/kernel/src/driver/acpi/bus.rs +++ b/kernel/src/driver/acpi/bus.rs @@ -111,6 +111,7 @@ impl Bus for AcpiBus { /// /// /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/acpi/acpi_bus.h#364 +#[allow(unused)] pub trait AcpiDevice: Device {} /// Acpi驱动应当实现的trait @@ -120,4 +121,5 @@ pub trait AcpiDevice: Device {} /// todo: 仿照linux的acpi_driver去设计这个trait /// /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/acpi/acpi_bus.h#163 +#[allow(unused)] pub trait AcpiDriver: Driver {} diff --git a/kernel/src/driver/base/device/bus.rs b/kernel/src/driver/base/device/bus.rs index e56e7f1e..b7e70f89 100644 --- a/kernel/src/driver/base/device/bus.rs +++ b/kernel/src/driver/base/device/bus.rs @@ -478,9 +478,8 @@ impl BusManager { driver_manager() .create_attr_file(driver, &DriverAttrBind) - .map_err(|e| { + .inspect_err(|_e| { driver_manager().remove_attr_file(driver, &DriverAttrUnbind); - e })?; return Ok(()); diff --git a/kernel/src/driver/base/device/dd.rs b/kernel/src/driver/base/device/dd.rs index 92505e78..358c5195 100644 --- a/kernel/src/driver/base/device/dd.rs +++ b/kernel/src/driver/base/device/dd.rs @@ -142,6 +142,7 @@ impl DeviceManager { /// - Ok(true): 匹配成功 /// - Ok(false): 没有匹配成功 /// - Err(SystemError): 匹配过程中出现意外错误,没有匹配成功 + /// /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c#899 fn do_device_attach_driver( &self, @@ -484,17 +485,15 @@ impl DriverManager { sysfs_instance() .create_link(Some(&device_kobj), &driver_kobj, "driver".to_string()) - .map_err(|e| { + .inspect_err(|_e| { fail_rm_dev_link(); - e })?; device_manager() .create_file(device, &DeviceAttrCoredump) - .map_err(|e| { + .inspect_err(|_e| { sysfs_instance().remove_link(&device_kobj, "driver".to_string()); fail_rm_dev_link(); - e })?; return Ok(()); diff --git a/kernel/src/driver/base/device/driver.rs b/kernel/src/driver/base/device/driver.rs index 256db75c..c2f77a59 100644 --- a/kernel/src/driver/base/device/driver.rs +++ b/kernel/src/driver/base/device/driver.rs @@ -213,10 +213,10 @@ impl DriverManager { bus_manager().add_driver(&driver)?; - self.add_groups(&driver, driver.groups()).map_err(|e| { - bus_manager().remove_driver(&driver); - e - })?; + self.add_groups(&driver, driver.groups()) + .inspect_err(|_e| { + bus_manager().remove_driver(&driver); + })?; // todo: 发送uevent diff --git a/kernel/src/driver/base/device/mod.rs b/kernel/src/driver/base/device/mod.rs index 6149257a..8803b02b 100644 --- a/kernel/src/driver/base/device/mod.rs +++ b/kernel/src/driver/base/device/mod.rs @@ -646,18 +646,16 @@ impl DeviceManager { let parent_kobj = parent.clone() as Arc; sysfs_instance() .create_link(Some(&dev_kobj), &parent_kobj, "device".to_string()) - .map_err(|e| { + .inspect_err(|_e| { err_remove_subsystem(&dev_kobj); - e })?; } sysfs_instance() .create_link(Some(&subsys_kobj), &dev_kobj, dev.name()) - .map_err(|e| { + .inspect_err(|_e| { err_remove_device(&dev_kobj); err_remove_subsystem(&dev_kobj); - e })?; return Ok(()); @@ -695,18 +693,16 @@ impl DeviceManager { // 添加kobj_type的属性文件 if let Some(kobj_type) = dev.kobj_type() { self.add_groups(dev, kobj_type.attribute_groups().unwrap_or(&[])) - .map_err(|e| { + .inspect_err(|_e| { err_remove_class_groups(dev); - e })?; } // 添加设备本身的属性文件 self.add_groups(dev, dev.attribute_groups().unwrap_or(&[])) - .map_err(|e| { + .inspect_err(|_e| { err_remove_kobj_type_groups(dev); err_remove_class_groups(dev); - e })?; return Ok(()); diff --git a/kernel/src/driver/base/platform/platform_device.rs b/kernel/src/driver/base/platform/platform_device.rs index 50701f5c..32163e00 100644 --- a/kernel/src/driver/base/platform/platform_device.rs +++ b/kernel/src/driver/base/platform/platform_device.rs @@ -64,6 +64,7 @@ pub trait PlatformDevice: Device { /// @brief: 判断设备是否初始化 /// @parameter: None /// @return: 如果已经初始化,返回true,否则,返回false + #[allow(dead_code)] fn is_initialized(&self) -> bool; /// @brief: 设置设备状态 diff --git a/kernel/src/driver/base/platform/platform_driver.rs b/kernel/src/driver/base/platform/platform_driver.rs index b9cda0f7..d0d78686 100644 --- a/kernel/src/driver/base/platform/platform_driver.rs +++ b/kernel/src/driver/base/platform/platform_driver.rs @@ -16,6 +16,7 @@ use super::{platform_bus, platform_device::PlatformDevice}; /// /// 应当在所有实现这个trait的结构体上方,添加 `#[cast_to([sync] PlatformDriver)]`, /// 否则运行时将报错“该对象不是PlatformDriver” +#[allow(dead_code)] pub trait PlatformDriver: Driver { /// 检测设备是否能绑定到这个驱动 /// diff --git a/kernel/src/driver/block/cache/cached_block_device.rs b/kernel/src/driver/block/cache/cached_block_device.rs index d7f19497..9d7f2020 100644 --- a/kernel/src/driver/block/cache/cached_block_device.rs +++ b/kernel/src/driver/block/cache/cached_block_device.rs @@ -16,6 +16,7 @@ static mut CMAPPER: Option = None; /// 该结构体向外提供BlockCache服务 pub struct BlockCache; +#[allow(static_mut_refs)] unsafe fn mapper() -> Result<&'static mut LockedCacheMapper, BlockCacheError> { unsafe { match &mut CMAPPER { @@ -25,6 +26,7 @@ unsafe fn mapper() -> Result<&'static mut LockedCacheMapper, BlockCacheError> { }; } +#[allow(static_mut_refs)] unsafe fn space() -> Result<&'static mut LockedCacheSpace, BlockCacheError> { unsafe { match &mut CSPACE { diff --git a/kernel/src/driver/disk/ahci/ahcidisk.rs b/kernel/src/driver/disk/ahci/ahcidisk.rs index a57b2bb2..7d982060 100644 --- a/kernel/src/driver/disk/ahci/ahcidisk.rs +++ b/kernel/src/driver/disk/ahci/ahcidisk.rs @@ -195,9 +195,8 @@ impl AhciDisk { return Err(SystemError::EIO); } } - - if kbuf.is_some() { - buf.copy_from_slice(kbuf.as_ref().unwrap()); + if let Some(kbuf) = &kbuf { + buf.copy_from_slice(kbuf); } compiler_fence(Ordering::SeqCst); diff --git a/kernel/src/driver/disk/ahci/hba.rs b/kernel/src/driver/disk/ahci/hba.rs index 2aa50440..849017a9 100644 --- a/kernel/src/driver/disk/ahci/hba.rs +++ b/kernel/src/driver/disk/ahci/hba.rs @@ -43,6 +43,7 @@ pub enum HbaPortType { /// 声明了 HBA 的所有属性 #[repr(packed)] +#[allow(dead_code)] pub struct HbaPort { pub clb: u64, // 0x00, command list base address, 1K-byte aligned pub fb: u64, // 0x08, FIS base address, 256-byte aligned @@ -65,6 +66,7 @@ pub struct HbaPort { /// 全称 HBA Memory Register,是HBA的寄存器在内存中的映射 #[repr(packed)] +#[allow(dead_code)] pub struct HbaMem { pub cap: u32, // 0x00, Host capability pub ghc: u32, // 0x04, Global host control @@ -94,6 +96,7 @@ pub struct HbaPrdtEntry { /// HAB Command Table /// 每个 Port 一个 Table,主机和设备的交互都靠这个数据结构 #[repr(packed)] +#[allow(dead_code)] pub struct HbaCmdTable { // 0x00 pub cfis: [u8; 64], // Command FIS @@ -262,6 +265,7 @@ pub enum FisType { } #[repr(packed)] +#[allow(dead_code)] pub struct FisRegH2D { // DWORD 0 pub fis_type: u8, // FIS_TYPE_REG_H2D diff --git a/kernel/src/driver/firmware/efi/init.rs b/kernel/src/driver/firmware/efi/init.rs index 0f25a002..33a89213 100644 --- a/kernel/src/driver/firmware/efi/init.rs +++ b/kernel/src/driver/firmware/efi/init.rs @@ -168,9 +168,8 @@ fn uefi_init(system_table: PhysAddr) -> Result<(), SystemError> { let st_ptr = st_vaddr.data() as *const uefi_raw::table::system::SystemTable; efi_manager() .check_system_table_header(unsafe { &st_ptr.as_ref().unwrap().header }, 2) - .map_err(|e| { + .inspect_err(|_| { err_unmap_systable(st_vaddr); - e })?; let st_ref = unsafe { st_ptr.as_ref().unwrap() }; diff --git a/kernel/src/driver/input/ps2_dev/ps2_device.rs b/kernel/src/driver/input/ps2_dev/ps2_device.rs index 26050c7d..a8a00d90 100644 --- a/kernel/src/driver/input/ps2_dev/ps2_device.rs +++ b/kernel/src/driver/input/ps2_dev/ps2_device.rs @@ -1,4 +1,5 @@ use crate::driver::{base::device::Device, input::serio::serio_device::SerioDevice}; // todo: https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/libps2.h#33 +#[allow(unused)] pub trait Ps2Device: Device + SerioDevice {} diff --git a/kernel/src/driver/input/ps2_mouse/ps_mouse_device.rs b/kernel/src/driver/input/ps2_mouse/ps_mouse_device.rs index d78c70b1..8da1c9fd 100644 --- a/kernel/src/driver/input/ps2_mouse/ps_mouse_device.rs +++ b/kernel/src/driver/input/ps2_mouse/ps_mouse_device.rs @@ -387,6 +387,7 @@ impl Ps2MouseDevice { Ok(()) } + #[allow(dead_code)] fn wait_for_read(&self) -> Result<(), SystemError> { let timeout = 100_000; for _ in 0..timeout { diff --git a/kernel/src/driver/input/serio/i8042/mod.rs b/kernel/src/driver/input/serio/i8042/mod.rs index 8c612d74..a65453ac 100644 --- a/kernel/src/driver/input/serio/i8042/mod.rs +++ b/kernel/src/driver/input/serio/i8042/mod.rs @@ -47,14 +47,16 @@ pub fn i8042_init() -> Result<(), SystemError> { Ok(()) } -// TODO: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/input/serio/i8042.c#441 +/// TODO: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/input/serio/i8042.c#441 +#[allow(dead_code)] pub fn i8042_start(_serio: &Arc) -> Result<(), SystemError> { - todo!() + todo!("i8042_start") } -// TODO: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/input/serio/i8042.c#471 +/// TODO: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/input/serio/i8042.c#471 +#[allow(dead_code)] pub fn i8042_stop(_serio: &Arc) -> Result<(), SystemError> { - todo!() + todo!("i8042_stop") } /// # 函数的功能 diff --git a/kernel/src/driver/input/serio/serio_device.rs b/kernel/src/driver/input/serio/serio_device.rs index cb610ab2..a2041f42 100644 --- a/kernel/src/driver/input/serio/serio_device.rs +++ b/kernel/src/driver/input/serio/serio_device.rs @@ -8,6 +8,7 @@ use super::serio_bus; /// 串行设备,实现该trait的设备实例挂载在serio总线上,同时应该实现Device trait /// /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/serio.h#20 +#[allow(dead_code)] pub trait SerioDevice: Device { /// # 函数功能 /// diff --git a/kernel/src/driver/input/serio/serio_driver.rs b/kernel/src/driver/input/serio/serio_driver.rs index 8cc3c572..c076a5c4 100644 --- a/kernel/src/driver/input/serio/serio_driver.rs +++ b/kernel/src/driver/input/serio/serio_driver.rs @@ -11,6 +11,7 @@ use super::{serio_bus, serio_device::SerioDevice}; /// 实现该trait的设备驱动实例应挂载在serio总线上,同时应该实现Driver trait /// /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/serio.h#67 +#[allow(dead_code)] pub trait SerioDriver: Driver { // 写入时唤醒设备 fn write_wakeup(&self, device: &Arc) -> Result<(), SystemError>; diff --git a/kernel/src/driver/net/e1000e/e1000e.rs b/kernel/src/driver/net/e1000e/e1000e.rs index 475823bd..a144b138 100644 --- a/kernel/src/driver/net/e1000e/e1000e.rs +++ b/kernel/src/driver/net/e1000e/e1000e.rs @@ -780,7 +780,8 @@ const E1000E_TXD_CMD_EOP: u8 = 1 << 0; const E1000E_TXD_CMD_IFCS: u8 = 1 << 1; const E1000E_TXD_CMD_RS: u8 = 1 << 3; -// E1000E驱动初始化过程中可能的错误 +/// E1000E驱动初始化过程中可能的错误 +#[allow(dead_code)] pub enum E1000EPciError { // 获取到错误类型的BAR(IO BAR) // An IO BAR was provided rather than a memory BAR. diff --git a/kernel/src/driver/net/loopback.rs b/kernel/src/driver/net/loopback.rs index 475c9e32..32e4f07b 100644 --- a/kernel/src/driver/net/loopback.rs +++ b/kernel/src/driver/net/loopback.rs @@ -15,7 +15,6 @@ use alloc::sync::{Arc, Weak}; use alloc::vec::Vec; use core::cell::UnsafeCell; use core::ops::{Deref, DerefMut}; -use log::debug; use smoltcp::wire::HardwareAddress; use smoltcp::{ phy::{self}, diff --git a/kernel/src/driver/net/mod.rs b/kernel/src/driver/net/mod.rs index deb81020..18e5a3fe 100644 --- a/kernel/src/driver/net/mod.rs +++ b/kernel/src/driver/net/mod.rs @@ -13,7 +13,7 @@ pub mod e1000e; pub mod irq_handle; pub mod loopback; pub mod virtio_net; - +#[allow(dead_code)] pub trait NetDevice: Device { /// @brief 获取网卡的MAC地址 fn mac(&self) -> EthernetAddress; diff --git a/kernel/src/driver/open_firmware/fdt.rs b/kernel/src/driver/open_firmware/fdt.rs index 4b68e78e..aff55017 100644 --- a/kernel/src/driver/open_firmware/fdt.rs +++ b/kernel/src/driver/open_firmware/fdt.rs @@ -468,8 +468,7 @@ fn read_cell(reg_value: &[u8], base_index: usize, cells: usize) -> (u64, usize) 1 => { return ( u32::from_be_bytes(reg_value[base_index..base_index + 4].try_into().unwrap()) - .try_into() - .unwrap(), + .into(), next_base_index, ); } diff --git a/kernel/src/driver/pci/driver.rs b/kernel/src/driver/pci/driver.rs index 27d7b91a..0643f2cb 100644 --- a/kernel/src/driver/pci/driver.rs +++ b/kernel/src/driver/pci/driver.rs @@ -12,6 +12,7 @@ use super::{dev_id::PciDeviceID, device::PciDevice, subsys::pci_bus}; /// Pci驱动应该实现的trait /// /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/pci.h#907 +#[allow(dead_code)] pub trait PciDriver: Driver { /// # 函数的功能 /// 对设备进行probe操作 diff --git a/kernel/src/driver/rtc/mod.rs b/kernel/src/driver/rtc/mod.rs index 7031c0ba..80f99d5b 100644 --- a/kernel/src/driver/rtc/mod.rs +++ b/kernel/src/driver/rtc/mod.rs @@ -47,6 +47,7 @@ pub trait RtcDevice: Device { fn class_ops(&self) -> &'static dyn RtcClassOps; } +#[allow(dead_code)] pub trait RtcClassOps: Send + Sync + Debug { fn read_time(&self, dev: &Arc) -> Result; fn set_time(&self, dev: &Arc, time: &RtcTime) -> Result<(), SystemError>; diff --git a/kernel/src/driver/serial/mod.rs b/kernel/src/driver/serial/mod.rs index 53af56d8..77bc956f 100644 --- a/kernel/src/driver/serial/mod.rs +++ b/kernel/src/driver/serial/mod.rs @@ -9,6 +9,7 @@ use self::serial8250::serial8250_manager; pub mod serial8250; +#[allow(dead_code)] pub trait UartDriver: Debug + Send + Sync { fn device_number(&self) -> DeviceNumber; @@ -21,6 +22,7 @@ pub trait UartDriver: Debug + Send + Sync { /// 串口端口应当实现的trait /// /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/serial_core.h#428 +#[allow(dead_code)] pub trait UartPort { fn iobase(&self) -> Option { None diff --git a/kernel/src/driver/serial/serial8250/mod.rs b/kernel/src/driver/serial/serial8250/mod.rs index 519ff21c..f12fe63c 100644 --- a/kernel/src/driver/serial/serial8250/mod.rs +++ b/kernel/src/driver/serial/serial8250/mod.rs @@ -141,6 +141,7 @@ impl Serial8250Manager { } /// 所有的8250串口设备都应该实现的trait +#[allow(dead_code)] trait Serial8250Port: UartPort { fn device(&self) -> Option> { None diff --git a/kernel/src/driver/serial/serial8250/serial8250_pio.rs b/kernel/src/driver/serial/serial8250/serial8250_pio.rs index fbf909ce..54760ad9 100644 --- a/kernel/src/driver/serial/serial8250/serial8250_pio.rs +++ b/kernel/src/driver/serial/serial8250/serial8250_pio.rs @@ -20,6 +20,7 @@ static mut PIO_PORTS: [Option; 8] = [None, None, None, None, None, None, None, None]; impl Serial8250Manager { + #[allow(static_mut_refs)] pub(super) fn bind_pio_ports( &self, uart_driver: &Arc, @@ -251,6 +252,7 @@ impl Serial8250PIOPortInner { Self { device: None } } + #[allow(dead_code)] pub fn device(&self) -> Option> { if let Some(device) = self.device.as_ref() { return device.upgrade(); diff --git a/kernel/src/driver/tty/console.rs b/kernel/src/driver/tty/console.rs index a9064ccb..f127900d 100644 --- a/kernel/src/driver/tty/console.rs +++ b/kernel/src/driver/tty/console.rs @@ -10,6 +10,7 @@ pub trait ConsoleSwitch: Sync + Send { fn con_init(&self, vc_data: &mut VirtualConsoleData, init: bool) -> Result<(), SystemError>; /// 进行释放等系列操作,目前未使用 + #[allow(dead_code)] fn con_deinit(&self) -> Result<(), SystemError>; /// ## 清空console的一片区域 diff --git a/kernel/src/driver/tty/tty_core.rs b/kernel/src/driver/tty/tty_core.rs index ecd7ee0c..90da3be6 100644 --- a/kernel/src/driver/tty/tty_core.rs +++ b/kernel/src/driver/tty/tty_core.rs @@ -7,7 +7,6 @@ use alloc::{ collections::LinkedList, string::String, sync::{Arc, Weak}, - vec::Vec, }; use system_error::SystemError; @@ -277,14 +276,6 @@ pub struct TtyContorlInfo { pub packet: bool, } -#[derive(Debug, Default)] -pub struct TtyCoreWriteData { - /// 写缓冲区 - pub write_buf: Vec, - /// 写入数量 - pub write_cnt: usize, -} - #[derive(Debug, Default)] pub struct TtyFlowState { /// 表示流控是否被停止 @@ -465,9 +456,6 @@ impl TtyCoreData { } } -/// TTY 核心接口,不同的tty需要各自实现这个trait -pub trait TtyCoreFuncs: Debug + Send + Sync {} - impl TtyOperation for TtyCore { #[inline] fn open(&self, tty: &TtyCoreData) -> Result<(), SystemError> { diff --git a/kernel/src/driver/tty/tty_ldisc/ntty.rs b/kernel/src/driver/tty/tty_ldisc/ntty.rs index 9253a0e5..e5b63422 100644 --- a/kernel/src/driver/tty/tty_ldisc/ntty.rs +++ b/kernel/src/driver/tty/tty_ldisc/ntty.rs @@ -1344,7 +1344,7 @@ impl NTtyData { tty.write(core, &[8], 1)?; } if tty.put_char(tty.core(), b' ').is_err() { - tty.write(core, &[b' '], 1)?; + tty.write(core, b" ", 1)?; } self.cursor_column -= 1; space -= 1; @@ -1357,7 +1357,7 @@ impl NTtyData { } if tty.put_char(tty.core(), b'^').is_err() { - tty.write(core, &[b'^'], 1)?; + tty.write(core, b"^", 1)?; } if tty.put_char(tty.core(), ch ^ 0o100).is_err() { diff --git a/kernel/src/driver/tty/virtual_terminal/virtual_console.rs b/kernel/src/driver/tty/virtual_terminal/virtual_console.rs index c0ee17c4..992659c4 100644 --- a/kernel/src/driver/tty/virtual_terminal/virtual_console.rs +++ b/kernel/src/driver/tty/virtual_terminal/virtual_console.rs @@ -132,7 +132,6 @@ pub struct VirtualConsoleData { pub utf_char: u32, /// 构建utf时需要的参数,表示目前接收了多少个字节的数据来构建utf字符 pub npar: u32, - /// pub par: [u32; NPAR], /// 字符转换表 用于将输入字符映射到特定的字符 @@ -1786,6 +1785,7 @@ impl VirtualConsoleData { draw.size = 0; } + #[allow(clippy::manual_rotate)] fn build_attr( &self, color: u8, diff --git a/kernel/src/driver/video/fbdev/base/fbcon/mod.rs b/kernel/src/driver/video/fbdev/base/fbcon/mod.rs index 2c1fbccb..ac6e50cf 100644 --- a/kernel/src/driver/video/fbdev/base/fbcon/mod.rs +++ b/kernel/src/driver/video/fbdev/base/fbcon/mod.rs @@ -341,12 +341,12 @@ impl Attribute for AttrCursorBlink { } #[derive(Debug, Default)] +#[allow(dead_code)] pub struct FrameBufferConsoleData { /// 光标闪烁间隔 pub cursor_blink_jiffies: i64, /// 是否刷新光标 pub cursor_flash: bool, - /// pub display: FbConsoleDisplay, /// 光标状态 pub cursor_state: FbCursor, diff --git a/kernel/src/driver/video/fbdev/base/mod.rs b/kernel/src/driver/video/fbdev/base/mod.rs index c5a4c7a6..a266b363 100644 --- a/kernel/src/driver/video/fbdev/base/mod.rs +++ b/kernel/src/driver/video/fbdev/base/mod.rs @@ -301,6 +301,7 @@ impl FrameBufferInfoData { } /// 帧缓冲区信息 +#[allow(dead_code)] pub trait FrameBufferInfo: FrameBufferOps { fn framebuffer_info_data(&self) -> &RwLock; @@ -377,6 +378,7 @@ pub trait FrameBufferInfo: FrameBufferOps { /// 帧缓冲区操作 /// /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/fb.h#237 +#[allow(dead_code)] pub trait FrameBufferOps { fn fb_open(&self, user: bool); fn fb_release(&self, user: bool); @@ -1063,6 +1065,7 @@ pub enum FbAccel { // Add other accelerators here } +#[allow(dead_code)] #[derive(Debug, Copy, Clone)] pub struct BootTimeScreenInfo { pub origin_x: u8, diff --git a/kernel/src/driver/virtio/mod.rs b/kernel/src/driver/virtio/mod.rs index 9498dcb2..024d4407 100644 --- a/kernel/src/driver/virtio/mod.rs +++ b/kernel/src/driver/virtio/mod.rs @@ -18,6 +18,7 @@ pub mod virtio_impl; /// virtio 设备厂商ID pub const VIRTIO_VENDOR_ID: u16 = 0x1af4; +#[allow(dead_code)] pub trait VirtIODevice: Device { fn handle_irq(&self, _irq: IrqNumber) -> Result; diff --git a/kernel/src/exception/irqchip.rs b/kernel/src/exception/irqchip.rs index 033f8488..06499486 100644 --- a/kernel/src/exception/irqchip.rs +++ b/kernel/src/exception/irqchip.rs @@ -35,6 +35,7 @@ use super::{ }; /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/irq.h#506 +#[allow(dead_code)] pub trait IrqChip: Sync + Send + Any + Debug { fn name(&self) -> &'static str; /// start up the interrupt (defaults to ->enable if ENOSYS) @@ -127,6 +128,7 @@ pub trait IrqChip: Sync + Send + Any + Debug { } /// enable/disable power management wake-on of an interrupt + #[allow(dead_code)] fn irq_set_wake(&self, _irq_data: &Arc, _on: bool) -> Result<(), SystemError> { Err(SystemError::ENOSYS) } @@ -281,6 +283,7 @@ struct InnerIrqChipGeneric { chip_types: Vec, } +#[allow(dead_code)] pub trait IrqChipGenericOps: Debug + Send + Sync { /// Alternate I/O accessor (defaults to readl if NULL) unsafe fn reg_readl(&self, addr: VirtAddr) -> u32; diff --git a/kernel/src/exception/irqdomain.rs b/kernel/src/exception/irqdomain.rs index 994506a2..021979dd 100644 --- a/kernel/src/exception/irqdomain.rs +++ b/kernel/src/exception/irqdomain.rs @@ -644,6 +644,7 @@ pub enum IrqDomainBusToken { /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/irqdomain.h#107 pub trait IrqDomainOps: Debug + Send + Sync { /// 匹配一个中断控制器设备节点到一个主机。 + #[allow(dead_code)] fn match_node( &self, _irq_domain: &Arc, @@ -667,6 +668,7 @@ pub trait IrqDomainOps: Debug + Send + Sync { } /// 删除一个虚拟中断号与一个硬件中断号之间的映射。 + #[allow(dead_code)] fn unmap(&self, irq_domain: &Arc, virq: IrqNumber); fn activate( diff --git a/kernel/src/exception/msi.rs b/kernel/src/exception/msi.rs index f521d117..ef0993eb 100644 --- a/kernel/src/exception/msi.rs +++ b/kernel/src/exception/msi.rs @@ -124,6 +124,7 @@ impl MsiDesc { } } +#[allow(dead_code)] pub trait MsiDescFunc: Debug + Send + Sync { /// Callback that may be called when the MSI message /// address or data changes. diff --git a/kernel/src/filesystem/fat/entry.rs b/kernel/src/filesystem/fat/entry.rs index 4b79ce7c..cafb3dc4 100644 --- a/kernel/src/filesystem/fat/entry.rs +++ b/kernel/src/filesystem/fat/entry.rs @@ -1328,6 +1328,7 @@ impl ShortDirEntry { } /// @brief 计算短目录项的名称的校验和 + #[allow(clippy::manual_rotate)] fn checksum(&self) -> u8 { let mut result = 0; diff --git a/kernel/src/filesystem/fat/fs.rs b/kernel/src/filesystem/fat/fs.rs index 0c2ff956..61eb1617 100644 --- a/kernel/src/filesystem/fat/fs.rs +++ b/kernel/src/filesystem/fat/fs.rs @@ -45,6 +45,7 @@ pub const MAX_FILE_SIZE: u64 = 0xffff_ffff; /// @brief 表示当前簇和上一个簇的关系的结构体 /// 定义这样一个结构体的原因是,FAT文件系统的文件中,前后两个簇具有关联关系。 +#[allow(dead_code)] #[derive(Debug, Clone, Copy, Default)] pub struct Cluster { pub cluster_num: u64, @@ -642,7 +643,7 @@ impl FATFileSystem { self.set_entry(cluster, FATEntry::Unused)?; self.fs_info.0.lock().update_free_count_delta(1); // 安全选项:清空被释放的簇 - #[cfg(feature = "secure")] + #[cfg(feature = "fatfs-secure")] self.zero_cluster(cluster)?; return Ok(()); } else { diff --git a/kernel/src/filesystem/mbr.rs b/kernel/src/filesystem/mbr.rs index 2f867536..b3e900de 100644 --- a/kernel/src/filesystem/mbr.rs +++ b/kernel/src/filesystem/mbr.rs @@ -55,7 +55,7 @@ impl MbrDiskPartitionTableEntry { #[repr(packed)] #[derive(Debug, Clone, Copy)] pub struct MbrDiskPartionTable { - pub reserved: [u8; 446], + pub _reserved: [u8; 446], pub dpte: [MbrDiskPartitionTableEntry; 4], // 磁盘分区表项 pub bs_trailsig: u16, } @@ -63,7 +63,7 @@ pub struct MbrDiskPartionTable { impl Default for MbrDiskPartionTable { fn default() -> Self { MbrDiskPartionTable { - reserved: [0; 446], + _reserved: [0; 446], dpte: [Default::default(); 4], bs_trailsig: Default::default(), } diff --git a/kernel/src/filesystem/procfs/syscall.rs b/kernel/src/filesystem/procfs/syscall.rs index 2c4aa041..f80365cc 100644 --- a/kernel/src/filesystem/procfs/syscall.rs +++ b/kernel/src/filesystem/procfs/syscall.rs @@ -1,5 +1,3 @@ -use core::usize; - use system_error::SystemError; use crate::syscall::Syscall; diff --git a/kernel/src/filesystem/ramfs/mod.rs b/kernel/src/filesystem/ramfs/mod.rs index c2435ff3..5f1ec486 100644 --- a/kernel/src/filesystem/ramfs/mod.rs +++ b/kernel/src/filesystem/ramfs/mod.rs @@ -25,6 +25,9 @@ use super::vfs::{ file::FilePrivateData, syscall::ModeType, utils::DName, FileSystem, FileSystemMaker, FsInfo, IndexNode, InodeId, Metadata, SpecialNodeData, }; + +use linkme::distributed_slice; + use super::vfs::{Magic, SuperBlock}; /// RamFS的inode名称的最大长度 diff --git a/kernel/src/filesystem/sysfs/group.rs b/kernel/src/filesystem/sysfs/group.rs index 2fd3f397..f1dff750 100644 --- a/kernel/src/filesystem/sysfs/group.rs +++ b/kernel/src/filesystem/sysfs/group.rs @@ -136,9 +136,8 @@ impl SysFS { if let Some(name) = group.name() { parent_inode = inode .find(name) - .map_err(|e| { + .inspect_err(|_e| { warn!("sysfs group '{name}' not found for kobject {kobj:?}"); - e })? .downcast_arc() .unwrap(); diff --git a/kernel/src/filesystem/vfs/mount.rs b/kernel/src/filesystem/vfs/mount.rs index 54c07ad5..27084a0f 100644 --- a/kernel/src/filesystem/vfs/mount.rs +++ b/kernel/src/filesystem/vfs/mount.rs @@ -160,25 +160,6 @@ impl MountFSInode { } } - /// 将新的挂载点-挂载文件系统添加到父级的挂载树 - pub(super) fn do_mount( - &self, - inode_id: InodeId, - new_mount_fs: Arc, - ) -> Result<(), SystemError> { - let mut guard = self.mount_fs.mountpoints.lock(); - if guard.contains_key(&inode_id) { - return Err(SystemError::EBUSY); - } - guard.insert(inode_id, new_mount_fs); - - return Ok(()); - } - - pub(super) fn inode_id(&self) -> InodeId { - self.metadata().map(|x| x.inode_id).unwrap() - } - fn do_find(&self, name: &str) -> Result, SystemError> { // 直接调用当前inode所在的文件系统的find方法进行查找 // 由于向下查找可能会跨越文件系统的边界,因此需要尝试替换inode diff --git a/kernel/src/filesystem/vfs/syscall.rs b/kernel/src/filesystem/vfs/syscall.rs index e6eeb67b..63d90d4b 100644 --- a/kernel/src/filesystem/vfs/syscall.rs +++ b/kernel/src/filesystem/vfs/syscall.rs @@ -398,6 +398,7 @@ impl PosixOpenHow { } } +#[allow(dead_code)] #[derive(Debug, Clone, Copy)] pub struct OpenHow { pub o_flags: FileMode, @@ -1707,8 +1708,7 @@ impl IoVecs { // 将用户空间的IoVec转换为引用(注意:这里的引用是静态的,因为用户空间的IoVec不会被释放) let iovs: &[IoVec] = core::slice::from_raw_parts(iov, iovcnt); - let mut slices: Vec<&mut [u8]> = vec![]; - slices.reserve(iovs.len()); + let mut slices: Vec<&mut [u8]> = Vec::with_capacity(iovs.len()); for iov in iovs.iter() { if iov.iov_len == 0 { diff --git a/kernel/src/filesystem/vfs/utils.rs b/kernel/src/filesystem/vfs/utils.rs index 7e9ce6c7..770de48d 100644 --- a/kernel/src/filesystem/vfs/utils.rs +++ b/kernel/src/filesystem/vfs/utils.rs @@ -1,8 +1,7 @@ use core::cmp::Ordering; -use core::fmt::Debug; +use core::fmt::{self, Debug}; use core::hash::Hash; -use alloc::string::ToString; use alloc::{string::String, sync::Arc}; use system_error::SystemError; @@ -135,9 +134,9 @@ impl Clone for DName { } } -impl ToString for DName { - fn to_string(&self) -> String { - (*self.0).clone() +impl fmt::Display for DName { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.0) } } diff --git a/kernel/src/init/mod.rs b/kernel/src/init/mod.rs index c67a9001..b5241610 100644 --- a/kernel/src/init/mod.rs +++ b/kernel/src/init/mod.rs @@ -27,6 +27,7 @@ fn init_intertrait() { #[derive(Debug)] pub struct BootParams { pub screen_info: BootTimeScreenInfo, + #[allow(dead_code)] pub arch: ArchBootParams, boot_command_line: [u8; Self::BOOT_COMMAND_LINE_SIZE], } diff --git a/kernel/src/ipc/signal_types.rs b/kernel/src/ipc/signal_types.rs index d5622a8f..be0bab08 100644 --- a/kernel/src/ipc/signal_types.rs +++ b/kernel/src/ipc/signal_types.rs @@ -64,6 +64,7 @@ pub struct SignalStruct { } #[derive(Debug)] +#[allow(dead_code)] pub struct InnerSignalStruct { pub cnt: AtomicI64, /// 如果对应linux,这部分会有一个引用计数,但是没发现在哪里有用到需要计算引用的地方,因此 diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs index fce70b46..688c88d7 100644 --- a/kernel/src/lib.rs +++ b/kernel/src/lib.rs @@ -7,22 +7,20 @@ #![feature(const_for)] #![feature(const_mut_refs)] #![feature(const_trait_impl)] -#![feature(const_transmute_copy)] #![feature(const_refs_to_cell)] #![feature(core_intrinsics)] #![feature(c_void_variant)] #![feature(extract_if)] #![feature(fn_align)] -#![feature(inline_const)] #![feature(naked_functions)] #![feature(new_uninit)] -#![feature(panic_info_message)] #![feature(ptr_internals)] -#![feature(ptr_to_from_bits)] #![feature(trait_upcasting)] #![feature(slice_ptr_get)] +#![feature(sync_unsafe_cell)] #![feature(vec_into_raw_parts)] #![cfg_attr(target_os = "none", no_std)] +#![allow(internal_features)] // clippy的配置 #![deny(clippy::all)] #![allow(clippy::bad_bit_mask)] @@ -123,15 +121,7 @@ pub fn panic(info: &PanicInfo) -> ! { println!("No location info"); } } - - match info.message() { - Some(msg) => { - println!("Message:\n\t{}", msg); - } - None => { - println!("No panic message."); - } - } + println!("Message:\n\t{}", info.message()); #[cfg(all(feature = "backtrace", target_arch = "x86_64"))] { diff --git a/kernel/src/libs/ffi_convert.rs b/kernel/src/libs/ffi_convert.rs deleted file mode 100644 index 4e39d51a..00000000 --- a/kernel/src/libs/ffi_convert.rs +++ /dev/null @@ -1,15 +0,0 @@ -/// @brief 由bindgen生成的结构体转换成rust原生定义的结构体的特性 -pub trait FFIBind2Rust { - /// 转换为不可变引用 - fn convert_ref(src: *const T) -> Option<&'static Self>; - /// 转换为可变引用 - fn convert_mut(src: *mut T) -> Option<&'static mut Self>; -} - -pub fn __convert_mut<'a, S, D>(src: *mut S) -> Option<&'a mut D> { - return unsafe { core::mem::transmute::<*mut S, *mut D>(src).as_mut() }; -} - -pub fn __convert_ref<'a, S, D>(src: *const S) -> Option<&'a D> { - return unsafe { core::mem::transmute::<*const S, *const D>(src).as_ref() }; -} diff --git a/kernel/src/libs/font/mod.rs b/kernel/src/libs/font/mod.rs index 02309e63..90eeeb35 100644 --- a/kernel/src/libs/font/mod.rs +++ b/kernel/src/libs/font/mod.rs @@ -2,6 +2,7 @@ use self::font_type::vga8x16::FONT_VGA_8X16; pub mod font_type; +#[allow(dead_code)] pub struct FontDesc { pub index: usize, pub name: &'static str, diff --git a/kernel/src/libs/ida/src/lib.rs b/kernel/src/libs/ida/src/lib.rs index eb7d8622..8a7082ea 100644 --- a/kernel/src/libs/ida/src/lib.rs +++ b/kernel/src/libs/ida/src/lib.rs @@ -1,5 +1,6 @@ #![no_std] #![feature(core_intrinsics)] +#![allow(internal_features)] #![allow(clippy::needless_return)] use core::intrinsics::unlikely; diff --git a/kernel/src/libs/lib_ui/screen_manager.rs b/kernel/src/libs/lib_ui/screen_manager.rs index 5ed9d49a..00f0bf96 100644 --- a/kernel/src/libs/lib_ui/screen_manager.rs +++ b/kernel/src/libs/lib_ui/screen_manager.rs @@ -240,6 +240,7 @@ pub trait ScmUiFramework: Sync + Send + Debug { return Err(SystemError::ENOSYS); } // 卸载ui框架的回调函数 + #[allow(dead_code)] fn uninstall(&self) -> Result { return Err(SystemError::ENOSYS); } diff --git a/kernel/src/libs/lib_ui/textui.rs b/kernel/src/libs/lib_ui/textui.rs index 546e558b..d04b64bb 100644 --- a/kernel/src/libs/lib_ui/textui.rs +++ b/kernel/src/libs/lib_ui/textui.rs @@ -822,7 +822,7 @@ impl TextuiWindow { //进行换行操作 if character == '\n' { // 换行时还需要输出\r - send_to_default_serial8250_port(&[b'\r']); + send_to_default_serial8250_port(b"\r"); if is_enable_window { self.textui_new_line()?; } diff --git a/kernel/src/libs/lib_ui/textui_no_alloc.rs b/kernel/src/libs/lib_ui/textui_no_alloc.rs index 9387cdc5..36718f93 100644 --- a/kernel/src/libs/lib_ui/textui_no_alloc.rs +++ b/kernel/src/libs/lib_ui/textui_no_alloc.rs @@ -54,7 +54,7 @@ pub fn no_init_textui_putchar_window( match character { // 进行换行操作 '\n' => { - send_to_default_serial8250_port(&[b'\r']); + send_to_default_serial8250_port(b"\r"); if is_put_to_window { next_line(); } diff --git a/kernel/src/libs/mod.rs b/kernel/src/libs/mod.rs index f15630bd..c864d605 100644 --- a/kernel/src/libs/mod.rs +++ b/kernel/src/libs/mod.rs @@ -2,7 +2,6 @@ pub mod align; pub mod casting; pub mod cpumask; pub mod elf; -pub mod ffi_convert; #[macro_use] pub mod int_like; pub mod keyboard_parser; diff --git a/kernel/src/libs/rwlock.rs b/kernel/src/libs/rwlock.rs index 08161604..63af797f 100644 --- a/kernel/src/libs/rwlock.rs +++ b/kernel/src/libs/rwlock.rs @@ -101,7 +101,7 @@ impl RwLock { #[inline] /// @brief 获取实时的读者数并尝试加1,如果增加值成功则返回增加1后的读者数,否则panic fn current_reader(&self) -> Result { - const MAX_READERS: u32 = core::u32::MAX >> READER_BIT >> 1; //右移3位 + const MAX_READERS: u32 = u32::MAX >> READER_BIT >> 1; //右移3位 let value = self.lock.fetch_add(READER, Ordering::Acquire); //value二进制形式的MSB不能为1, 否则导致溢出 diff --git a/kernel/src/mm/allocator/kernel_allocator.rs b/kernel/src/mm/allocator/kernel_allocator.rs index 9e55a4ab..6201fef3 100644 --- a/kernel/src/mm/allocator/kernel_allocator.rs +++ b/kernel/src/mm/allocator/kernel_allocator.rs @@ -20,6 +20,7 @@ use super::{ /// 类kmalloc的分配器应当实现的trait pub trait LocalAlloc { + #[allow(dead_code)] unsafe fn local_alloc(&self, layout: Layout) -> *mut u8; unsafe fn local_alloc_zeroed(&self, layout: Layout) -> *mut u8; unsafe fn local_dealloc(&self, ptr: *mut u8, layout: Layout); diff --git a/kernel/src/mm/mmio_buddy.rs b/kernel/src/mm/mmio_buddy.rs index 99e845d3..6f7805b9 100644 --- a/kernel/src/mm/mmio_buddy.rs +++ b/kernel/src/mm/mmio_buddy.rs @@ -55,9 +55,12 @@ impl MmioBuddyMemPool { free_regions[i as usize] = MaybeUninit::new(SpinLock::new(MmioFreeRegionList::new())); } let free_regions = unsafe { - mem::transmute::<_, [SpinLock; MMIO_BUDDY_REGION_COUNT as usize]>( - free_regions, - ) + mem::transmute::< + [core::mem::MaybeUninit< + crate::libs::spinlock::SpinLock, + >; MMIO_BUDDY_REGION_COUNT as usize], + [SpinLock; MMIO_BUDDY_REGION_COUNT as usize], + >(free_regions) }; let pool = MmioBuddyMemPool { diff --git a/kernel/src/mm/mod.rs b/kernel/src/mm/mod.rs index 49e61fcd..8f976a1d 100644 --- a/kernel/src/mm/mod.rs +++ b/kernel/src/mm/mod.rs @@ -427,6 +427,7 @@ impl Default for PhysMemoryArea { } } +#[allow(dead_code)] pub trait MemoryManagementArch: Clone + Copy + Debug { /// 是否支持缺页中断 const PAGE_FAULT_ENABLED: bool; diff --git a/kernel/src/mm/ucontext.rs b/kernel/src/mm/ucontext.rs index 8664cee3..635213ff 100644 --- a/kernel/src/mm/ucontext.rs +++ b/kernel/src/mm/ucontext.rs @@ -516,7 +516,7 @@ impl InnerAddressSpace { // page_count // ); let (mut active, mut inactive); - let mut flusher = if self.is_current() { + let flusher = if self.is_current() { active = PageFlushAll::new(); &mut active as &mut dyn Flusher } else { @@ -563,7 +563,7 @@ impl InnerAddressSpace { .set_execute(prot_flags.contains(ProtFlags::PROT_EXEC)) .set_write(prot_flags.contains(ProtFlags::PROT_WRITE)); - r_guard.remap(new_flags, mapper, &mut flusher)?; + r_guard.remap(new_flags, mapper, &mut *flusher)?; drop(r_guard); self.mappings.insert_vma(r); } @@ -578,7 +578,7 @@ impl InnerAddressSpace { behavior: MadvFlags, ) -> Result<(), SystemError> { let (mut active, mut inactive); - let mut flusher = if self.is_current() { + let flusher = if self.is_current() { active = PageFlushAll::new(); &mut active as &mut dyn Flusher } else { @@ -606,7 +606,7 @@ impl InnerAddressSpace { if let Some(after) = split_result.after { self.mappings.insert_vma(after); } - r.do_madvise(behavior, mapper, &mut flusher)?; + r.do_madvise(behavior, mapper, &mut *flusher)?; self.mappings.insert_vma(r); } Ok(()) @@ -1207,6 +1207,7 @@ impl Drop for LockedVMA { } /// VMA切分结果 +#[allow(dead_code)] pub struct VMASplitResult { pub prev: Option>, pub middle: Arc, diff --git a/kernel/src/net/net_core.rs b/kernel/src/net/net_core.rs index e08e43bc..da1486da 100644 --- a/kernel/src/net/net_core.rs +++ b/kernel/src/net/net_core.rs @@ -19,6 +19,7 @@ use super::{ /// /// The main purpose of this function is to poll all network interfaces. #[derive(Debug)] +#[allow(dead_code)] struct NetWorkPollFunc; impl TimerFunction for NetWorkPollFunc { diff --git a/kernel/src/net/socket/inet.rs b/kernel/src/net/socket/inet.rs index 4832dcab..a7cb975c 100644 --- a/kernel/src/net/socket/inet.rs +++ b/kernel/src/net/socket/inet.rs @@ -632,7 +632,7 @@ impl Socket for TcpSocket { let mut socket_set_guard = SOCKET_SET.lock_irqsave(); let socket = socket_set_guard - .get_mut::(self.handles.get(0).unwrap().smoltcp_handle().unwrap()); + .get_mut::(self.handles.first().unwrap().smoltcp_handle().unwrap()); // 如果socket已经关闭,返回错误 if !socket.is_active() { @@ -694,7 +694,7 @@ impl Socket for TcpSocket { let mut socket_set_guard = SOCKET_SET.lock_irqsave(); let socket = socket_set_guard - .get_mut::(self.handles.get(0).unwrap().smoltcp_handle().unwrap()); + .get_mut::(self.handles.first().unwrap().smoltcp_handle().unwrap()); if socket.is_open() { if socket.can_send() { @@ -730,7 +730,7 @@ impl Socket for TcpSocket { // debug!("tcp socket:poll, socket'len={}",self.handle.len()); let socket = socket_set_guard - .get_mut::(self.handles.get(0).unwrap().smoltcp_handle().unwrap()); + .get_mut::(self.handles.first().unwrap().smoltcp_handle().unwrap()); let handle_map_guard = HANDLE_MAP.read_irqsave(); let handle_item = handle_map_guard.get(&self.socket_handle()).unwrap(); let shutdown_type = handle_item.shutdown_type(); @@ -745,7 +745,7 @@ impl Socket for TcpSocket { // debug!("tcp socket:connect, socket'len={}", self.handles.len()); let socket = - sockets.get_mut::(self.handles.get(0).unwrap().smoltcp_handle().unwrap()); + sockets.get_mut::(self.handles.first().unwrap().smoltcp_handle().unwrap()); if let Endpoint::Ip(Some(ip)) = endpoint { let temp_port = PORT_MANAGER.get_ephemeral_port(self.metadata.socket_type)?; @@ -767,7 +767,7 @@ impl Socket for TcpSocket { poll_ifaces(); let mut sockets = SOCKET_SET.lock_irqsave(); let socket = sockets.get_mut::( - self.handles.get(0).unwrap().smoltcp_handle().unwrap(), + self.handles.first().unwrap().smoltcp_handle().unwrap(), ); match socket.state() { @@ -957,7 +957,7 @@ impl Socket for TcpSocket { drop(sockset); - // debug!("[TCP] [Accept] sleeping socket with handle: {:?}", self.handles.get(0).unwrap().smoltcp_handle().unwrap()); + // debug!("[TCP] [Accept] sleeping socket with handle: {:?}", self.handles.first().unwrap().smoltcp_handle().unwrap()); self.posix_item.sleep(Self::CAN_ACCPET); // debug!("tcp socket:after sleep, handle_guard'len={}",HANDLE_MAP.write_irqsave().len()); } @@ -971,7 +971,7 @@ impl Socket for TcpSocket { // debug!("tcp socket:endpoint, socket'len={}",self.handle.len()); let socket = - sockets.get::(self.handles.get(0).unwrap().smoltcp_handle().unwrap()); + sockets.get::(self.handles.first().unwrap().smoltcp_handle().unwrap()); if let Some(ep) = socket.local_endpoint() { result = Some(Endpoint::Ip(Some(ep))); } @@ -984,7 +984,7 @@ impl Socket for TcpSocket { // debug!("tcp socket:peer_endpoint, socket'len={}",self.handle.len()); let socket = - sockets.get::(self.handles.get(0).unwrap().smoltcp_handle().unwrap()); + sockets.get::(self.handles.first().unwrap().smoltcp_handle().unwrap()); return socket.remote_endpoint().map(|x| Endpoint::Ip(Some(x))); } @@ -999,7 +999,7 @@ impl Socket for TcpSocket { fn socket_handle(&self) -> GlobalSocketHandle { // debug!("tcp socket:socket_handle, socket'len={}",self.handle.len()); - *self.handles.get(0).unwrap() + *self.handles.first().unwrap() } fn as_any_ref(&self) -> &dyn core::any::Any { diff --git a/kernel/src/process/exec.rs b/kernel/src/process/exec.rs index 7be01374..94e21929 100644 --- a/kernel/src/process/exec.rs +++ b/kernel/src/process/exec.rs @@ -281,7 +281,7 @@ impl ProcInitInfo { } fn push_str(&self, ustack: &mut UserStack, s: &str) -> Result<(), SystemError> { - self.push_slice(ustack, &[b'\0'])?; + self.push_slice(ustack, &[b"\0"])?; self.push_slice(ustack, s.as_bytes())?; return Ok(()); } diff --git a/kernel/src/process/exit.rs b/kernel/src/process/exit.rs index bd87a466..c88a9493 100644 --- a/kernel/src/process/exit.rs +++ b/kernel/src/process/exit.rs @@ -32,6 +32,7 @@ pub struct KernelWaitOption<'a> { } #[derive(Debug, Clone)] +#[allow(dead_code)] pub struct WaitIdInfo { pub pid: Pid, pub status: i32, diff --git a/kernel/src/process/fork.rs b/kernel/src/process/fork.rs index 6380f5e1..2ad49fe9 100644 --- a/kernel/src/process/fork.rs +++ b/kernel/src/process/fork.rs @@ -85,6 +85,7 @@ bitflags! { /// /// 仅仅作为参数传递 #[derive(Debug, Clone, Copy)] +#[allow(dead_code)] pub struct KernelCloneArgs { pub flags: CloneFlags, diff --git a/kernel/src/process/mod.rs b/kernel/src/process/mod.rs index 31c92c80..f4be134e 100644 --- a/kernel/src/process/mod.rs +++ b/kernel/src/process/mod.rs @@ -1,4 +1,5 @@ use core::{ + fmt, hash::Hash, hint::spin_loop, intrinsics::{likely, unlikely}, @@ -512,9 +513,9 @@ pub unsafe fn switch_finish_hook() { int_like!(Pid, AtomicPid, usize, AtomicUsize); -impl ToString for Pid { - fn to_string(&self) -> String { - self.0.to_string() +impl fmt::Display for Pid { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.0) } } @@ -1142,6 +1143,7 @@ pub struct ProcessSchedulerInfo { } #[derive(Debug, Default)] +#[allow(dead_code)] pub struct SchedInfo { /// 记录任务在特定 CPU 上运行的次数 pub pcount: usize, @@ -1154,6 +1156,7 @@ pub struct SchedInfo { } #[derive(Debug)] +#[allow(dead_code)] pub struct PrioData { pub prio: i32, pub static_prio: i32, diff --git a/kernel/src/sched/completion.rs b/kernel/src/sched/completion.rs index 2d3450f2..61488c25 100644 --- a/kernel/src/sched/completion.rs +++ b/kernel/src/sched/completion.rs @@ -7,8 +7,8 @@ use crate::{ time::timer::schedule_timeout, }; -const COMPLETE_ALL: u32 = core::u32::MAX; -const MAX_TIMEOUT: i64 = core::i64::MAX; +const COMPLETE_ALL: u32 = u32::MAX; +const MAX_TIMEOUT: i64 = i64::MAX; #[derive(Debug)] pub struct Completion { diff --git a/kernel/src/sched/fair.rs b/kernel/src/sched/fair.rs index 54dd5cdb..eb5d1a22 100644 --- a/kernel/src/sched/fair.rs +++ b/kernel/src/sched/fair.rs @@ -144,7 +144,10 @@ impl FairSchedEntity { #[allow(clippy::mut_from_ref)] pub fn force_mut(&self) -> &mut Self { - unsafe { &mut *(self as *const Self as usize as *mut Self) } + unsafe { + let p = self as *const Self as usize; + (p as *mut Self).as_mut().unwrap() + } } /// 判断是否是进程持有的调度实体 @@ -416,7 +419,11 @@ impl CfsRunQueue { #[inline] #[allow(clippy::mut_from_ref)] pub fn force_mut(&self) -> &mut Self { - unsafe { &mut *(self as *const Self as usize as *mut Self) } + unsafe { + (self as *const Self as usize as *mut Self) + .as_mut() + .unwrap() + } } #[inline] diff --git a/kernel/src/sched/mod.rs b/kernel/src/sched/mod.rs index dbe262ec..3930f11f 100644 --- a/kernel/src/sched/mod.rs +++ b/kernel/src/sched/mod.rs @@ -272,6 +272,7 @@ pub trait SchedArch { /// 开启当前核心的调度 fn enable_sched_local(); /// 关闭当前核心的调度 + #[allow(dead_code)] fn disable_sched_local(); /// 在第一次开启调度之前,进行初始化工作。 @@ -363,14 +364,22 @@ impl CpuRunQueue { { // 在本cpu已上锁则可以直接拿 ( - unsafe { &mut *(self as *const Self as usize as *mut Self) }, + unsafe { + (self as *const Self as usize as *mut Self) + .as_mut() + .unwrap() + }, None, ) } else { // 否则先上锁再拿 let guard = self.lock(); ( - unsafe { &mut *(self as *const Self as usize as *mut Self) }, + unsafe { + (self as *const Self as usize as *mut Self) + .as_mut() + .unwrap() + }, Some(guard), ) } diff --git a/kernel/src/time/clocksource.rs b/kernel/src/time/clocksource.rs index 75d472ca..6565038c 100644 --- a/kernel/src/time/clocksource.rs +++ b/kernel/src/time/clocksource.rs @@ -207,10 +207,12 @@ pub trait Clocksource: Send + Sync + Debug { return Err(SystemError::ENOSYS); } /// optional function to disable the clocksource + #[allow(dead_code)] fn disable(&self) -> Result<(), SystemError> { return Err(SystemError::ENOSYS); } /// vsyscall based read + #[allow(dead_code)] fn vread(&self) -> Result { return Err(SystemError::ENOSYS); } diff --git a/kernel/src/time/mod.rs b/kernel/src/time/mod.rs index e7d6f16f..9a0c829f 100644 --- a/kernel/src/time/mod.rs +++ b/kernel/src/time/mod.rs @@ -141,7 +141,6 @@ impl From for Duration { /// * A value less than `0` indicates a time before the starting /// point. #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "defmt", derive(defmt::Format))] pub struct Instant { micros: i64, } @@ -317,7 +316,6 @@ impl ops::Sub for Instant { /// A relative amount of time. #[derive(Debug, Default, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] -#[cfg_attr(feature = "defmt", derive(defmt::Format))] pub struct Duration { micros: u64, } diff --git a/kernel/src/time/timekeeping.rs b/kernel/src/time/timekeeping.rs index f8c1b351..09bcf5cc 100644 --- a/kernel/src/time/timekeeping.rs +++ b/kernel/src/time/timekeeping.rs @@ -49,7 +49,6 @@ pub struct TimekeeperData { cycle_interval: CycleNum, /// 一个NTP间隔中时钟移位的纳秒数。 xtime_interval: u64, - /// xtime_remainder: i64, /// 每个NTP间隔累积的原始纳米秒 raw_interval: i64, diff --git a/kernel/src/virt/kvm/vcpu.rs b/kernel/src/virt/kvm/vcpu.rs index 3d4b84e5..ac87d50c 100644 --- a/kernel/src/virt/kvm/vcpu.rs +++ b/kernel/src/virt/kvm/vcpu.rs @@ -1,5 +1,6 @@ use system_error::SystemError; +#[allow(dead_code)] pub trait Vcpu: Send + Sync { /// Virtualize the CPU fn virtualize_cpu(&mut self) -> Result<(), SystemError>; diff --git a/kernel/src/virt/kvm/vm.rs b/kernel/src/virt/kvm/vm.rs index 23166aa4..68444dfe 100644 --- a/kernel/src/virt/kvm/vm.rs +++ b/kernel/src/virt/kvm/vm.rs @@ -24,6 +24,7 @@ pub struct Vm { // memory config pub nr_mem_slots: u32, /* Number of memory slots in each address space */ pub memslots: [KvmMemorySlots; KVM_ADDRESS_SPACE_NUM], + #[allow(dead_code)] // arch related config pub arch: KVMArch, } diff --git a/tools/Makefile b/tools/Makefile index 7cda36eb..c4faeea5 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -6,4 +6,4 @@ clean: @cargo clean check: - @cargo +nightly-2023-08-15 check --workspace --message-format=json + @cargo +nightly-2024-07-23 check --workspace --message-format=json diff --git a/tools/bootstrap.sh b/tools/bootstrap.sh index 4d99dfd5..5b3ca670 100644 --- a/tools/bootstrap.sh +++ b/tools/bootstrap.sh @@ -228,18 +228,19 @@ rustInstall() { fi echo "正在安装DragonOS所需的rust组件...首次安装需要一些时间来更新索引,请耐心等待..." cargo install cargo-binutils - rustup toolchain install nightly-2023-01-21-x86_64-unknown-linux-gnu rustup toolchain install nightly-2023-08-15-x86_64-unknown-linux-gnu - rustup component add rust-src --toolchain nightly-2023-01-21-x86_64-unknown-linux-gnu + rustup toolchain install nightly-2024-07-23-x86_64-unknown-linux-gnu + rustup component add rust-src --toolchain nightly-2024-07-23-x86_64-unknown-linux-gnu rustup component add rust-src --toolchain nightly-2023-08-15-x86_64-unknown-linux-gnu - rustup target add x86_64-unknown-none --toolchain nightly-2023-01-21-x86_64-unknown-linux-gnu + rustup target add x86_64-unknown-none --toolchain nightly-2024-07-23-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-linux-musl --toolchain nightly-2024-07-23-x86_64-unknown-linux-gnu - rustup toolchain install nightly-2023-01-21-riscv64gc-unknown-linux-gnu --force-non-host + rustup toolchain install nightly-2024-07-23-riscv64gc-unknown-linux-gnu --force-non-host rustup toolchain install nightly-2023-08-15-riscv64gc-unknown-linux-gnu --force-non-host - rustup target add riscv64gc-unknown-none-elf --toolchain nightly-2023-01-21-riscv64gc-unknown-linux-gnu - rustup target add riscv64imac-unknown-none-elf --toolchain nightly-2023-01-21-riscv64gc-unknown-linux-gnu + rustup target add riscv64gc-unknown-none-elf --toolchain nightly-2024-07-23-riscv64gc-unknown-linux-gnu + rustup target add riscv64imac-unknown-none-elf --toolchain nightly-2024-07-23-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 diff --git a/user/apps/clear/Makefile b/user/apps/clear/Makefile index 0239a062..127c6ccb 100644 --- a/user/apps/clear/Makefile +++ b/user/apps/clear/Makefile @@ -1,4 +1,4 @@ -TOOLCHAIN="+nightly-2023-08-15-x86_64-unknown-linux-gnu" +TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu" # RUSTFLAGS+="-C target-feature=+crt-static -C link-arg=-no-pie" ifdef DADK_CURRENT_BUILD_DIR diff --git a/user/apps/test-backlog/Makefile b/user/apps/test-backlog/Makefile index e7c1704a..f65b0d52 100644 --- a/user/apps/test-backlog/Makefile +++ b/user/apps/test-backlog/Makefile @@ -1,4 +1,4 @@ -TOOLCHAIN="+nightly-2023-08-15-x86_64-unknown-linux-gnu" +TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu" RUSTFLAGS+="" ifdef DADK_CURRENT_BUILD_DIR diff --git a/user/apps/test-blockcache/Makefile b/user/apps/test-blockcache/Makefile index a4c3cfe7..86a12201 100644 --- a/user/apps/test-blockcache/Makefile +++ b/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-2023-08-15-x86_64-unknown-linux-gnu" +TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu" RUSTFLAGS+="-C target-feature=+crt-static -C link-arg=-no-pie" # 如果是在dadk中编译,那么安装到dadk的安装目录中 diff --git a/user/apps/test-for-robustfutex/Makefile b/user/apps/test-for-robustfutex/Makefile index 1b0274d2..d9eb6cd1 100644 --- a/user/apps/test-for-robustfutex/Makefile +++ b/user/apps/test-for-robustfutex/Makefile @@ -1,4 +1,4 @@ -TOOLCHAIN="+nightly-2023-08-15-x86_64-unknown-linux-gnu" +TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu" RUSTFLAGS+="" ifdef DADK_CURRENT_BUILD_DIR diff --git a/user/apps/test-mount/Makefile b/user/apps/test-mount/Makefile index 1b0274d2..d9eb6cd1 100644 --- a/user/apps/test-mount/Makefile +++ b/user/apps/test-mount/Makefile @@ -1,4 +1,4 @@ -TOOLCHAIN="+nightly-2023-08-15-x86_64-unknown-linux-gnu" +TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu" RUSTFLAGS+="" ifdef DADK_CURRENT_BUILD_DIR diff --git a/user/apps/test_alarm/Makefile b/user/apps/test_alarm/Makefile index 1b0274d2..d9eb6cd1 100644 --- a/user/apps/test_alarm/Makefile +++ b/user/apps/test_alarm/Makefile @@ -1,4 +1,4 @@ -TOOLCHAIN="+nightly-2023-08-15-x86_64-unknown-linux-gnu" +TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu" RUSTFLAGS+="" ifdef DADK_CURRENT_BUILD_DIR diff --git a/user/apps/test_socket/Makefile b/user/apps/test_socket/Makefile index 1b0274d2..d9eb6cd1 100644 --- a/user/apps/test_socket/Makefile +++ b/user/apps/test_socket/Makefile @@ -1,4 +1,4 @@ -TOOLCHAIN="+nightly-2023-08-15-x86_64-unknown-linux-gnu" +TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu" RUSTFLAGS+="" ifdef DADK_CURRENT_BUILD_DIR diff --git a/user/apps/test_statx/Makefile b/user/apps/test_statx/Makefile index 0239a062..127c6ccb 100644 --- a/user/apps/test_statx/Makefile +++ b/user/apps/test_statx/Makefile @@ -1,4 +1,4 @@ -TOOLCHAIN="+nightly-2023-08-15-x86_64-unknown-linux-gnu" +TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu" # RUSTFLAGS+="-C target-feature=+crt-static -C link-arg=-no-pie" ifdef DADK_CURRENT_BUILD_DIR diff --git a/user/apps/user-manage/Makefile b/user/apps/user-manage/Makefile index d018fdf3..82cc81f9 100644 --- a/user/apps/user-manage/Makefile +++ b/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-2023-08-15-x86_64-unknown-linux-gnu" +TOOLCHAIN="+nightly-2024-07-23-x86_64-unknown-linux-gnu" RUSTFLAGS+="" ifdef DADK_CURRENT_BUILD_DIR