From 7f63a5c8f0f29bc0f3b693004fad0e319f143b9b Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 31 Aug 2025 19:44:50 +0200 Subject: [PATCH] Don't mark irq_trigger as no_mangle --- src/arch/aarch64/interrupt/irq.rs | 8 ++------ src/arch/x86/interrupt/irq.rs | 6 +----- src/arch/x86_64/interrupt/irq.rs | 6 +----- src/scheme/irq.rs | 3 +-- 4 files changed, 5 insertions(+), 18 deletions(-) diff --git a/src/arch/aarch64/interrupt/irq.rs b/src/arch/aarch64/interrupt/irq.rs index 6a52e75519..88d8735754 100644 --- a/src/arch/aarch64/interrupt/irq.rs +++ b/src/arch/aarch64/interrupt/irq.rs @@ -1,4 +1,4 @@ -use crate::{arch::device::ROOT_IC_IDX, dtb::irqchip::IRQ_CHIP}; +use crate::{arch::device::ROOT_IC_IDX, dtb::irqchip::IRQ_CHIP, scheme::irq::irq_trigger}; use core::sync::atomic::Ordering; #[cfg(feature = "sys_stat")] @@ -37,11 +37,7 @@ pub unsafe fn trigger(irq: u32) { #[cfg(feature = "sys_stat")] PercpuBlock::current().stats.add_irq(irq); - extern "C" { - fn irq_trigger(irq: u32); - } - - irq_trigger(irq); + irq_trigger(irq.try_into().unwrap()); IRQ_CHIP.irq_eoi(irq); } diff --git a/src/arch/x86/interrupt/irq.rs b/src/arch/x86/interrupt/irq.rs index 0345299eb5..6efc3426fb 100644 --- a/src/arch/x86/interrupt/irq.rs +++ b/src/arch/x86/interrupt/irq.rs @@ -13,6 +13,7 @@ use crate::{ ipi::{ipi, IpiKind, IpiTarget}, scheme::{ debug::{debug_input, debug_notify}, + irq::irq_trigger, serio::serio_input, }, time, @@ -69,11 +70,6 @@ fn irq_method() -> IrqMethod { } } -extern "C" { - // triggers irq scheme - fn irq_trigger(irq: u8); -} - /// Notify the IRQ scheme that an IRQ has been registered. This should mask the IRQ until the /// scheme user unmasks it ("acknowledges" it). unsafe fn trigger(irq: u8) { diff --git a/src/arch/x86_64/interrupt/irq.rs b/src/arch/x86_64/interrupt/irq.rs index 0b10a327eb..e33083dec4 100644 --- a/src/arch/x86_64/interrupt/irq.rs +++ b/src/arch/x86_64/interrupt/irq.rs @@ -4,6 +4,7 @@ use alloc::vec::Vec; #[cfg(feature = "sys_stat")] use crate::percpu::PercpuBlock; +use crate::scheme::irq::irq_trigger; use crate::{ context::{self, timeout}, device::{ @@ -67,11 +68,6 @@ fn irq_method() -> IrqMethod { } } -extern "C" { - // triggers irq scheme - fn irq_trigger(irq: u8); -} - /// Notify the IRQ scheme that an IRQ has been registered. This should mask the IRQ until the /// scheme user unmasks it ("acknowledges" it). unsafe fn trigger(irq: u8) { diff --git a/src/scheme/irq.rs b/src/scheme/irq.rs index deeeedb71c..ec49b041b3 100644 --- a/src/scheme/irq.rs +++ b/src/scheme/irq.rs @@ -54,8 +54,7 @@ const INO_BSP: u64 = 0x8001_0000_0000_0000; const INO_PHANDLE: u64 = 0x8003_0000_0000_0000; /// Add to the input queue -#[no_mangle] -pub extern "C" fn irq_trigger(irq: u8) { +pub fn irq_trigger(irq: u8) { COUNTS.lock()[irq as usize] += 1; for (fd, _) in HANDLES