使用netif_rx()时内核oops

时间:2015-07-28 07:30:11

标签: linux kernel driver ethernet

我目前正在为Texas Instruments Keystone II,armv7l上的Linux 3.10.61开发以太网驱动程序。

我希望收到sk_buff到用户空间。 我已经实现了自己的轮询模式(无中断),我没有使用NAPI,所以 netif_receive_skb()。 我的驱动程序能够接收数据但是当我尝试使用 netif_rx()将我的sk_buff发送到上层时,内核崩溃而没有时间显示整个内核oops。

[ 624.203739] Unable to handle kernel NULL pointer dereference at virtual address 00000078 [ 624.211818] pgd = c0003000 2014 Oct 2 11:3[ 624.214514] [00000078] *pgd=800008000040035:04 147 [ 624., *pmd=00000000 *******CRASH********

有人知道为什么会这样吗? 这可能是因为我的sk_buff填充不好吗?

感谢您的帮助, Sioul

1 个答案:

答案 0 :(得分:0)

您是否在非softirq环境中调用netif_rx?也许你应该使用netif_rx_ni? 您可以参考以下链接:

https://lab.nexedi.cn/kirr/linux/commit/324e786ee39c70ffbdc280c34b7d2b6da5c87879?view=parallel