리눅스 커널 코드에서 local_bh_disable() 을 쓰는 이유가 궁금합니다.
글쓴이: trymp / 작성시간: 목, 2018/09/27 - 7:41오후
리눅스에서 필요시에 local_bh_disable() 로 BH softIRQ 를 금지시키는 걸로 알고 있는데요
네트워크에서 패킷을 처리하는 루틴에서 전역 PER CPU 변수 처리시에
local_bh_disable() 을 해주지 않으면 변수 구조체의 값이 깨지는 경우를 확인하였습니다.
한가지 예로 동일 core 에서 패킷을 ip_rcv() 함수에서 수신했을때,
그 함수 도중에 갑자기 soft_IRQ raise 되서 다른 패킷이 먼저 처리될 수도 있는건가요?
아니면 함수 도중에 그 함수로 재진입이 이루어지는 건가요?
아직 softIRQ 영역에서 처리시 local_bh_disable() 금지시키는 이유가 명확하게 이해가 되지 않습니다.
고수님들의 조언 부탁드립니다
Forums:
참고해보세요.
- 예시와 설명이 보이네요.
//local_bh_disable()
spin_lock 때문에 애좀 먹었다.
http://pak2536.tistory.com/93
[Tech] 리눅스 커널에 대하여
https://blog.naver.com/gluesys/70097399057
https://blog.naver.com/leojesus/80165280102
[PATCH RT 16/22] crypto: cryptd - add a lock instead preempt_disable/local_bh_disable
https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1760245.html
local_bh_disable()/local_bh_enable() include/linux/interrupt.h
https://www.kernel.org/doc/htmldocs/kernel-hacking/routines-softirqs.html
local_bh_disable, preempt_disable, local_irq_disable
https://stackoverflow.com/questions/24260087/local-bh-disable-preempt-disable-local-irq-disable
//
IRQ 리눅스 - 네이버 북
https://book.naver.com/search/search.nhn?sm=sta_hty.book&sug=&where=nexearch&query=IRQ+리눅스
리눅스 커널 - 네이버 북
https://book.naver.com/search/search.nhn?sm=sta_hty.book&sug=&where=nexearch&query=리눅스+커널
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기