alloc_skb(..) 에서 궁금한 것.
글쓴이: 지나가는새 / 작성시간: 목, 2004/12/09 - 2:43오후
다음은 net/core/skbuff.c의 일부입니다.
struct sk_buff *alloc_skb(unsigned int size,int gfp_mask) { struct sk_buff *skb; u8 *data; if (in_interrupt() && (gfp_mask & __GFP_WAIT)) { static int count = 0; if (++count < 5) { printk(KERN_ERR "alloc_skb called nonatomically " "from interrupt %p\n", NET_CALLER(size)); BUG(); } gfp_mask &= ~__GFP_WAIT; }
여기서 if( ++count < 5 ) { ... 부분이 어떻게 필요하게 된건지 궁금하네요.
둘 사이의 분기는 panic이냐 아니냐의 큰 차인데, 제가 보기에 무조건 panic인것 처럼 보이는데.. 게다가 static int란 말입죠. 허 참 궁금함다.
Forums:
Re: alloc_skb(..) 에서 궁금한 것.
__GFP_WAIT로 call 했다면 schedule 될 수 있다는 뜻인데 그러므로
interrupt context에서는 호출 돼서는 안됩니다. 그래서 4번 정도 경고 주는
것입니다. __GFP_WAIT는 빼 버리고요.
프로그래머의 잘못에 알아서 커널이 대처하고 있는 것이지요.
댓글 달기