본문 바로가기

Linux/ARM64

arch_local_irq_disable()

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