我目前正在开发一个以太网驱动程序,用于在德克萨斯仪器keystone i i,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没有填满?
谢谢你的帮助,
慢吞吞的
最佳答案
您是在非软irq环境中呼叫netif_rx吗?或许你应该改用netif_rx_ni?
您可以参考以下链接:
https://lab.nexedi.cn/kirr/linux/commit/324e786ee39c70ffbdc280c34b7d2b6da5c87879?view=parallel