我目前正在德州仪器 Keystone II armv7l 上为 Linux 3.10.61 开发以太网驱动程序。
我现在想接收 sk_buff 到用户空间。 我已经实现了自己的轮询模式(无中断)并且我没有使用 NAPI,所以 netif_receive_skb()。 我的驱动程序能够接收数据,但是当我尝试使用 netif_rx() 将我的 sk_buff 发送到上层时,内核崩溃而没有时间显示整个内核 oops。
[ 624.203739] 无法处理虚拟地址 00000078 处的内核 NULL 指针取消引用
[ 624.211818] pgd = c0003000 2014 年 10 月 2 日 11:3[ 624.214514] [00000078] *pgd=800008000040035:04 147 [ 624., *pmd=00000000
*******崩溃********
有人知道为什么会这样吗? 这会不会是因为我的 sk_buff 没有填好?
谢谢你的帮助, 苏尔
最佳答案
你是在非软中断上下文中调用 netif_rx 吗?也许您应该改用 netif_rx_ni? 您可以引用以下链接:
https://lab.nexedi.cn/kirr/linux/commit/324e786ee39c70ffbdc280c34b7d2b6da5c87879?view=parallel
关于linux - 使用 netif_rx() 时出现内核错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31670005/