์˜ˆ์™ธ

AArch64๋Š” 4๊ฐœ ์ƒํƒœ(SP0์„ ์‚ฌ์šฉํ•˜๋Š” ํ˜„์žฌ EL, SPx๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ˜„์žฌ EL, AArch64๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•˜์œ„ EL, AArch32๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•˜์œ„ EL)์˜ 4๊ฐ€์ง€ ์˜ˆ์™ธ ํƒ€์ž…(๋™๊ธฐ, IRQ, FIQ, SError)์— ๋Œ€ํ•ด 16๊ฐœ ํ•ญ๋ชฉ์ด ์žˆ๋Š” ์˜ˆ์™ธ ๋ฒกํ„ฐ ํ…Œ์ด๋ธ”์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. Rust ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ํœ˜๋ฐœ์„ฑ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์Šคํƒ์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ ์ด๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

use log::error;
use smccc::psci::system_off;
use smccc::Hvc;

#[no_mangle]
extern "C" fn sync_exception_current(_elr: u64, _spsr: u64) {
    error!("sync_exception_current");
    system_off::<Hvc>().unwrap();
}

#[no_mangle]
extern "C" fn irq_current(_elr: u64, _spsr: u64) {
    error!("irq_current");
    system_off::<Hvc>().unwrap();
}

#[no_mangle]
extern "C" fn fiq_current(_elr: u64, _spsr: u64) {
    error!("fiq_current");
    system_off::<Hvc>().unwrap();
}

#[no_mangle]
extern "C" fn serr_current(_elr: u64, _spsr: u64) {
    error!("serr_current");
    system_off::<Hvc>().unwrap();
}

#[no_mangle]
extern "C" fn sync_lower(_elr: u64, _spsr: u64) {
    error!("sync_lower");
    system_off::<Hvc>().unwrap();
}

#[no_mangle]
extern "C" fn irq_lower(_elr: u64, _spsr: u64) {
    error!("irq_lower");
    system_off::<Hvc>().unwrap();
}

#[no_mangle]
extern "C" fn fiq_lower(_elr: u64, _spsr: u64) {
    error!("fiq_lower");
    system_off::<Hvc>().unwrap();
}

#[no_mangle]
extern "C" fn serr_lower(_elr: u64, _spsr: u64) {
    error!("serr_lower");
    system_off::<Hvc>().unwrap();
}
  • EL์€ ์˜ˆ์™ธ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์˜คํ›„์˜ ๋ชจ๋“  ์˜ˆ๋Š” EL1์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ํŽธ์˜์ƒ ํ˜„์žฌ EL ์˜ˆ์™ธ์˜ SP0๊ณผ SPx๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ฑฐ๋‚˜ ํ•˜์œ„ EL ์˜ˆ์™ธ์˜ AArch32์™€ AArch64๋ฅผ ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ด ์˜ˆ์—์„œ๋Š” ์˜ˆ์™ธ๊ฐ€ ์‹ค์ œ๋กœ ๋ฐœ์ƒํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์˜ˆ์™ธ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ์ „์›์„ ๋•๋‹ˆ๋‹ค.
  • ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ์™€ ๊ธฐ๋ณธ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ๊ฑฐ์˜ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Send ๋ฐ Sync๋Š” ์Šค๋ ˆ๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๋“ค ๊ฐ„์— ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ์™€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„ ๊ฐ„์— ๊ฐ’์„ ๊ณต์œ ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ Send์ด์ง€๋งŒ Sync๋Š” ์•„๋‹Œ ๊ฒฝ์šฐ, Mutex์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๋ž˜ํ•‘ํ•˜๊ณ  ์ •์ ์ธ ๊ฒƒ์œผ๋กœ ๋ฐฐ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.