Thank you, I checked it out and the kcalloc is disappeared. 
BTW, what I am doing is to read packets from the ring inside the kernel and I 
tried to do it with a new plugin, but the kernel crashed with "scheduling while 
atomic" because my code will have to cause a rescheduling. I am now trying to 
writing a new kernel thread to do it. In this kernel thread, I borrowed the 
code of pfring_read() in userland/lib/pf_ring.c. Do you have some suggestion? 

Thank you for your time.




> -----原始邮件-----
> 发件人: "Luca Deri" <[email protected]>
> 发送时间: 2011年4月4日 星期一
> 收件人: "[email protected]" <[email protected]>
> 抄送: 
> 主题: Re: [Ntop-misc] about "BUG: scheduling while atomic"
> 
> Hi
> Please update from svn: this problem should already be fixed
> 
> Luca
> 
> 
> 
> On 04/apr/2011, at 12:33, 王勇 <[email protected]> wrote:
> 
> > Dear all,
> > 
> > I am a newbie to pf ring and kernel program. I added several lines follow 
> > the calling of add_skb_to_ring in pf_ring/kernel/pf_ring.c to do something 
> > extra I need. It looks like:
> > 
> > 
> > 
> > from line 2556 fo kernel/pf_ring.c
> > 
> > 
> > 
> >    if((pfr != NULL)
> >       && (pfr->ring_netdev != &none_dev) /* Not a dummy socket bound to 
> > "none" */
> >       && (pfr->cluster_id == 0 /* No cluster */ )
> >       && (pfr->ring_slots != NULL)
> >       && is_valid_skb_direction(pfr->direction, recv_packet)
> >       && ((pfr->ring_netdev == skb->dev)
> >    || (pfr->ring_netdev == &any_dev) /* Socket bound to 'any' */
> >    || ((skb->dev->flags & IFF_SLAVE) && (pfr->ring_netdev == 
> > skb->dev->master)))) {
> >      /* We've found the ring where the packet can be stored */
> >      int old_caplen = hdr.caplen;  /* Keep old lenght */
> >      hdr.caplen = min(hdr.caplen, pfr->bucket_len);
> >      add_skb_to_ring(skb, pfr, &hdr, is_ip_pkt, displ, channel_id, 
> > num_rx_channels);
> > 
> >      my_function_here(skb);
> >      hdr.caplen = old_caplen;
> >      rc = 1; /* Ring found: we've done our job */
> >    }
> > 
> > 
> > 
> > In my_function_here(), I just kmalloc some byte with GFP_KERNEL and the 
> > kfree it. When I run this code, the kernel always crashes with message:BUG: 
> > scheduling while atomic
> > 
> > I think this is because kmalloc with GFP_KERNEL, but I noticed that in 
> > add_skb_to_ring() there is kcalloc with GFP_KERNEL! Why this is safe and my 
> > code cause kernel crash? 
> > 
> > 
> > 
> > Thank you for your time!
> > _______________________________________________
> > Ntop-misc mailing list
> > [email protected]
> > http://listgateway.unipi.it/mailman/listinfo/ntop-misc
> _______________________________________________
> Ntop-misc mailing list
> [email protected]
> http://listgateway.unipi.it/mailman/listinfo/ntop-misc

_______________________________________________
Ntop-misc mailing list
[email protected]
http://listgateway.unipi.it/mailman/listinfo/ntop-misc

Reply via email to