리눅스에서 필요시에 local_bh_disable() 로 BH softIRQ 를 금지시키는 걸로 알고 있는데요
네트워크에서 패킷을 처리하는 루틴에서 전역 PER CPU 변수 처리시에
local_bh_disable() 을 해주지 않으면 변수 구조체의 값이 깨지는 경우를 확인하였습니다.
한가지 예로 동일 core 에서 패킷을 ip_rcv() 함수에서 수신했을때,
그 함수 도중에 갑자기 soft_IRQ raise 되서 다른 패킷이 먼저 처리될 수도 있는건가요?
아니면 함수 도중에 그 함수로 재진입이 이루어지는 건가요?
아직 softIRQ 영역에서 처리시 local_bh_disable() 금지시키는 이유가 명확하게 이해가 되지 않습니다.
고수님들의 조언 부탁드립니다