Kernel Crash, while receiving packet because of SKB_RESERVE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 
 Hi,
 
   Kernel Crash, while receiving  packet because of skb_reserve.
 ---------------------------------------------------------------------
 
    Problem 1
   ------------
   Configuration : 
   Processor : MPC-852
   SCC configured as Synchronous HDLC.
   Data Link Layers :  PPP or LAPD.
 
   We receive packets over the synchronous HDLC device. SKB is
 preallocated and is assigned to the buffer descriptors of the scc
 driver. skb of MAX_SIZE(1560) is allocated each time. Provision of 8
 such buffers is possible. As soon as data arrives over the synchronous
 HDLC link, processor fills the available buffer descriptor and raises
 receive interrupt. The filled skb is passed to PPP or LAPD for further
 processing. By default skb alloc provides a header space of 16. If we
 don't need any extra space, the PPP/LAPD links works fine with no
crash.
   
   Now we need extra space in the skb, so we added a skb_reserve(40)
after the allocation. The PPP links works fine, but it is obeserved that
 on a On fiber reinsertion for LAPD link between two nodes, kernel
 crashes after sometime receiving few packets. The crash was observed in
 free_pages() called during dev_kfree_skb().
 
 Before fiber reinsertion, the link worked fine and heavy data transfer
 was done over the link. But just after few seconds of fiber
reinsertion, kernel crashed. 
 
 Work Around 
 --------------
   We changed the skb_reserve(40) to skb_reserve(32) it seems to be
working perfect.
 
 Problem 2. 
---------------
   Configuration :
   Processor : MPC-8247
   Quicc Multi Channel (QMC) Configured in HDLC Mode.
   Data Link Layers : PPP/LAPD
 
   With skb_reserve(32), we observed that the LAPD link works perfect.
 But a different crash was observed for PPP link. As soon as we start a
 heavy data transfer (ping of size > 1500 or ftp from node etc), the
 linux crashes in ip fragmentation/reassembly routine
   
   We changed the skb_reserve(32) to skb_reserve(16), and it seems to be
 working fine. 
 
 -  I would like to know, what reasons of skb_reserve can cause kernel
 crash?
 -  Are we missing any necessary initialization after skb_allcation? 
 -  Why the behavior is different in two different platforms with same
 linux ?
 
 Please tell me, If i can provide any other related information (e.g
oops ) or any other relevant mailing list.

 regards
 ~biju




-
: send the line "unsubscribe linux-net" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux