定义一个内核panic问题
出现问题时的反汇编为:
/usr/src/debug/kernel-4.1.44-.aarch64/net/core/dev.c: 1780
0xffff800000860724 <__netif_receive_skb_core+420>: ldr x0, [x1,x0]
0xffff800000860728 <__netif_receive_skb_core+424>: str x0, [x29,#128]
0xffff80000086072c <__netif_receive_skb_core+428>: ldr x20, [x29,#128]
0xffff800000860730 <__netif_receive_skb_core+432>: cmp x25, x20
0xffff800000860734 <__netif_receive_skb_core+436>: sub x20, x20, #0x28
0xffff800000860738 <__netif_receive_skb_core+440>: b.eq 0xffff800000860760 <__netif_receive_skb_core+480>
/usr/src/debug/kernel-4.1.44-.aarch64/net/core/dev.c: 1781
0xffff80000086073c <__netif_receive_skb_core+444>: ldrh w0, [x20]
代码为:
static inline void deliver_ptype_list_skb(struct sk_buff *skb,struct packet_type **pt,struct net_device *orig_dev,__be16 type,struct list_head *ptype_list) {struct packet_type *ptype, *pt_prev = *pt;1780 list_for_each_entry_rcu(ptype, ptype_list, list) { 1781 if (ptype->type != type)continue;if (pt_prev)deliver_skb(skb, pt_prev, orig_dev);pt_prev = ptype;}*pt = pt_prev; }
list_for_each_entry_rcu函数为:
#define list_for_each_entry_rcu(pos, head, member) \for (pos = list_entry_rcu((head)->next, typeof(*pos), member); \&pos->member != (head); \pos = list_entry_rcu(pos->member.next, typeof(*pos), member))
list_entry_rcu为:
#define list_entry_rcu(ptr, type, member) \ ({ \typeof(*ptr) __rcu *__ptr = (typeof(*ptr) __rcu __force *)ptr; \container_of((typeof(ptr))rcu_dereference_raw(__ptr), type, member); \ })
container_of
#define container_of(ptr, type, member) ({ \const typeof( ((type *)0)->member ) *__mptr = (ptr); \(type *)( (char *)__mptr - offsetof(type,member) );})
转载于:https://www.cnblogs.com/xingmuxin/p/9456775.html
定义一个内核panic问题相关推荐
- 【转】如何编译一个内核 - Ubuntu方式
如何编译一个内核 - Ubuntu方式 2011-09-19 15:40 转载地址:http://hi.baidu.com/1101050240/blog/item/69e3d0d92f2b297dd ...
- Android 在 SElinux下 如何获得对一个内核节点的访问权限
点击打开链接 Android 5.0下,因为采取了SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问. 本文将以用户自定义的 ...
- Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限
Android 5.0下,因为采取了SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问. 本文将以用户自定义的内核节点/de ...
- golang 定义一个空切片_Golang简单入门教程——函数进阶使用
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第八篇,我们来聊聊golang当中的函数. 我们在之前的时候已经介绍过了函数的基本用法,知道了怎么样设计或者是定义一 ...
- php定义一个名为Vehicles,php的扩展和嵌入--c++类的扩展开发
配置文件:config.m4 1 PHP_ARG_ENABLE(vehicles, 2 [Whether to enable the "vehicles" extension], ...
- Linux文件系统:编写一个内核文件系统
Linux文件系统在著名的VFS模型下工作,因此符合POSIX.编写Linux文件系统有两种方法 保险丝文件系统 内核文件系统 保险丝本身是一个内核文件系统.它将从VFS接收到的文件系统调用转发到用户 ...
- 空指针引用,导致linux内核panic(重启)
这个bug搞了我整整两天,看了好多贴,调试了好多遍,终于解决了:复盘记录下. 先贴上重启打印日志. 1.重启打印日志 PC is at 0x0 LR is at devinet_ioctl+0x31c ...
- ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联
ARM Linux 内核 panic 之cache 一致性 --cci-400 cache一致互联 CCI-400 集合了互联和一致性功能,有 2 个 ACE slave 接口和 3 个 ACE-Li ...
- linux内核panic
1. Linux Kernel Panic的产生的原因 panic是英文中是惊慌的意思,Linux Kernel panic正如其名,linux kernel不知道如何走了,它会尽可能把它此时能获取的 ...
- 一个内核oops问题的分析及解决
个人简介 lccz(龙城赤子),资深嵌入式开发者,爱好Linux内核相关技术.个人CSDN博客:wwwyue1985. 最近在调试设备时,遇到了一个偶发的开机死机问题.通过查看输出日志,发现内核报告了 ...
最新文章
- AngularJS开发指南7:AngularJS本地化,国际化,以及兼容IE低版本浏览器
- mysql orm .net,2020年 .NET ORM 完整比较、助力选择
- optee中core_init_mmu_regs函数解读
- Acwing第 14 场周赛【完结】
- Lua直接调用动态链接库(DLL或so文件)
- Spring MVC生成PDF文件代码示例
- 一段Big5繁体转换简体GB2312的程序
- 在 SAP Spartacus 里如何调用 hybris 里实现的自定义 API
- [极客大挑战 2019]BuyFlag
- linux ojvm补丁安装,打补丁PSU
- 如何组合来自多个SQL表的结果(提示:有三种方式)
- 威胁情报工具:更快?更聪明?
- 几种 vue的数据交互形式
- postman安装与使用
- excel粘贴时出现故障_Excel常见问题及解决办法汇总
- python聊天机器人_用 Python 实现聊天机器人
- 自定义UpsertStreamTableSink
- python tkinter 桌面小程序开发从入门到界面美化(主题应用推荐)
- C#高效编程--改进C#代码的50个行之有效的办法笔记
- 日常工作中遇到的那些坑