리눅스 인터럽트 enable / disable 관련 질문입니다.
글쓴이: happyKYS / 작성시간: 수, 2012/09/26 - 2:10오후
안녕하세요.
리눅스에서 인터럽트 발생을 무시할 때 local_irq_disable 함수 또는 local_irq_save(flag) 함수를 사용합니다. 이 두 함수의 차이는 어셈블리어를 보면, 단순히 flag에 현재 CPSR 정보를 저장하느냐 마냐인 것을 볼 수 있는데요.
궁금한 것은 왜 local_irq_save 함수가 생겨났는지의 이유입니다.
local_irq_disable이 CPSR 정보를 저장하진 않지만 그 뒤에 local_irq_enable을 하게 되면 어짜피 함수들 자체가 CPSR의 irq 비트 필트만 건드리도록 되어있기 때문에 구지 이전 상태의 CPSR을 저장하지 않아도 동일하게 복원이 될 것같은데
왜 local_irq_save와 local_irq_restore를 사용해서 CPSR의 복원처리를 하는지 궁금합니다. 이런 히스토리를 아시는분은 답변 부탁드립니다.
감사합니다.
Forums:
depth
depth 때문입니다.
xxx_irq_save/restore 는...
IRQ bit 를 제외한 다른 값을 보존하고 싶어서가 아니라,
IRQ bit 의 값을 보존하고 싶어서 사용합니다.
두 번 이상 save() 가 중첩되어도 결국은 맨 마지막 restore() 때 enable 됩니다.
댓글 달기