arch_local_irq_disable 분석
boot_cpu_init에 앞서서 먼저 local interrupt requst 모두 disable 시킨다.
(문c 블로그 참조: http://jake.dothome.co.kr/alternative/)
1
2
3
4
5
6
7
8
9
10
11
|
static inline void arch_local_irq_disable(void)
{
asm volatile(ALTERNATIVE( //조건에 따라 1번 명령어(초기 부팅 할 때), 2번
"msr daifset, #2 // arch_local_irq_disable", //processor state 에서 DAIF 중 I를 1로 setting 하여 irq_disable 함
"msr_s " __stringify(SYS_ICC_PMR_EL1) ", %0",
ARM64_HAS_IRQ_PRIO_MASKING)
:
: "r" ((unsigned long) GIC_PRIO_IRQOFF)
: "memory");
}
|
cs |
위 그림과 같이 DAIF 특수 레지스터에서 2번째 비트, 즉 I 비트를 1로 set 해줌으로써 interrupt 분기를 막는다.
'Linux > ARM64' 카테고리의 다른 글
boot_cpu_init() (0) | 2019.12.27 |
---|---|
smp_setup_processor_id() (0) | 2019.12.27 |
early_ioremap_init(void) (0) | 2019.12.24 |
early_fixmap_init(void) (0) | 2019.12.22 |