Skip to content

Commit acab80d

Browse files
committed
Fix: trace irq context for is_in_irq make correct decision
1 parent f413fc3 commit acab80d

5 files changed

Lines changed: 16 additions & 8 deletions

File tree

kernel/src/boards/gd32e507_eval/mod.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,8 @@ mod config;
1616
mod handler;
1717

1818
use crate::{
19-
arch,
20-
arch::irq::IrqNumber,
21-
boot,
22-
boot::INIT_BSS_DONE,
23-
devices::clock::{systick, Clock},
24-
sync::SpinLock,
25-
time,
19+
arch, arch::irq::IrqNumber, boot, boot::INIT_BSS_DONE, devices::clock::systick, irq::IrqTrace,
20+
sync::SpinLock, time,
2621
};
2722
use alloc::sync::Arc;
2823
use blueos_driver::pinctrl::gd32_afio::*;
@@ -129,6 +124,7 @@ crate::define_pin_states! {
129124

130125
#[no_mangle]
131126
pub unsafe extern "C" fn uart0_handler() {
127+
let _trace = IrqTrace::new(config::USBFS_IRQn);
132128
use blueos_hal::HasInterruptReg;
133129
let uart = get_device!(console_uart);
134130
if let Some(handler) = unsafe {

kernel/src/boards/qemu_mps2_an385/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use crate::{
2222
boot,
2323
devices::clock::{systick, Clock},
2424
error::Error,
25+
irq::IrqTrace,
2526
time,
2627
};
2728
use blueos_hal::HasInterruptReg;
@@ -102,6 +103,7 @@ crate::define_peripheral! {
102103

103104
#[no_mangle]
104105
pub unsafe extern "C" fn uart0rx_handler() {
106+
let _trace = IrqTrace::new(UART0RX_IRQn);
105107
let uart = get_device!(console_uart);
106108
if let Some(handler) = unsafe {
107109
let intr_handler_cell = &*uart.intr_handler.get();
@@ -115,6 +117,7 @@ pub unsafe extern "C" fn uart0rx_handler() {
115117

116118
#[no_mangle]
117119
pub unsafe extern "C" fn uart0tx_handler() {
120+
let _trace = IrqTrace::new(UART0TX_IRQn);
118121
let uart = get_device!(console_uart);
119122
if let Some(handler) = unsafe {
120123
let intr_handler_cell = &*uart.intr_handler.get();

kernel/src/boards/qemu_mps3_an547/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use crate::{
2323
boot,
2424
devices::clock::{systick, Clock},
2525
error::Error,
26+
irq::IrqTrace,
2627
time,
2728
};
2829
use blueos_hal::HasInterruptReg;
@@ -114,6 +115,7 @@ crate::define_pin_states!(None);
114115

115116
#[no_mangle]
116117
pub unsafe extern "C" fn uart0rx_handler() {
118+
let _trace = IrqTrace::new(UART0RX_IRQn);
117119
let uart = get_device!(console_uart);
118120
if let Some(handler) = unsafe {
119121
let intr_handler_cell = &*uart.intr_handler.get();
@@ -126,6 +128,7 @@ pub unsafe extern "C" fn uart0rx_handler() {
126128
}
127129
#[no_mangle]
128130
pub unsafe extern "C" fn uart0tx_handler() {
131+
let _trace = IrqTrace::new(UART0TX_IRQn);
129132
let uart = get_device!(console_uart);
130133
if let Some(handler) = unsafe {
131134
let intr_handler_cell = &*uart.intr_handler.get();

kernel/src/boards/qemu_virt64_aarch64/init.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use crate::{
2121
registers::cntfrq_el0::CNTFRQ_EL0,
2222
},
2323
error::Error,
24+
irq::IrqTrace,
2425
scheduler,
2526
support::SmpStagedInit,
2627
time,
@@ -85,6 +86,7 @@ crate::define_pin_states!(None);
8586
pub struct Serial0Irq {}
8687
impl IrqHandler for Serial0Irq {
8788
fn handle(&mut self) {
89+
let _trace = IrqTrace::new(config::PL011_UART0_IRQNUM);
8890
let uart = get_device!(console_uart);
8991
if let Some(handler) = unsafe {
9092
let intr_handler_cell = &*uart.intr_handler.get();

kernel/src/boards/raspberry_pico2_cortexm/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ use blueos_hal::clock_control::ClockControl;
2626
use core::ptr::addr_of;
2727
use spin::Once;
2828

29+
// const definitions
30+
pub const UART0_IRQn: IrqNumber = IrqNumber::new(33);
31+
2932
#[link_section = ".start_block"]
3033
#[used]
3134
pub static IMAGE_DEF: block::ImageDef = block::ImageDef::secure_exe();
@@ -95,7 +98,7 @@ pub(crate) fn init() {
9598

9699
unsafe { boot::init_heap() };
97100
arch::irq::init();
98-
arch::irq::enable_irq_with_priority(IrqNumber::new(33), arch::irq::Priority::Normal);
101+
arch::irq::enable_irq_with_priority(UART0_IRQn, arch::irq::Priority::Normal);
99102
ClockImpl::init();
100103
}
101104

@@ -140,6 +143,7 @@ crate::define_bus! {
140143
#[no_mangle]
141144
pub unsafe extern "C" fn uart0_handler() {
142145
use blueos_hal::HasInterruptReg;
146+
let _trace = IrqTrace::new(UART0_IRQn);
143147
let uart = get_device!(console_uart);
144148
let intr = uart.get_interrupt();
145149
if let Some(handler) = unsafe {

0 commit comments

Comments
 (0)