内核使用netif_rx()时出现oops

内核使用netif_rx()时出现oops

问题描述:

我目前正在为德州仪器的Keystone II armv7l上的Linux 3.10.61开发一个以太网驱动程序。内核使用netif_rx()时出现oops

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

你在非软中断上下文调用netif_rx?也许你应该使用netif_rx_ni呢? 您可以参考以下链接:

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