我目前正在为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
答案 0 :(得分:0)
您是否在非softirq环境中调用netif_rx?也许你应该使用netif_rx_ni? 您可以参考以下链接:
https://lab.nexedi.cn/kirr/linux/commit/324e786ee39c70ffbdc280c34b7d2b6da5c87879?view=parallel