一次中断处理中陷入死锁的锁定

sd卡写操作过程中控制sd卡电源进行掉电操作,基本必现Soc侧挂死问题;sysrq失去效能;只有独立于soc管理的mpu核可以dump出来数据;
最初怀疑是出现死锁,内核中开启DEBUG_SPINLOCK or PROVE_LOCKING拷机测试在未到挂死前出现了sd卡驱动中非法地址访问oops;
内核中只能开启soft lockup, hardlockup不支持,NMI特性与具体平台架构相关,此处也不能使用。
不是使能内核配置项场景下拷机基本没出现过oops问题,看来现成的工具是不能用了!!!

plan1
梳理当前平台及内核版本中GIC处理流程
在这里插入图片描述
利用内核watchdog对每个cpu核的监控特点,在cpu1响应次数大于cpu0响应次数+10时dump所有在怀疑点位增加的调试信息;
通过点位锁定目标,这种是一种笨办法,有没有更直接的可以看到backtrace信息的方法?

plan 2

起初尝试通过dump_backtrace将栈信息打印出来,但由于缺少栈顶无法多层次解析fun;

参考内核dump_backtrace_entry接口dump地址和此地址对象符号的方法处理,在watchdog_timer_fn接口中

struct rq *rq = NULL;
int *tmp_a = NULL;

rq = cpu_rq(0);
if (rq && rq->curr) {
	printk("The CPU0 run task is %s\n", rq->curr->comm);
}

tmp_a = (int *)(rq->curr->stack);                   /*当前内核栈为8KB,因此仅使用高地址的4K;中断栈使用的是被抢占任务的stack区*/
printk("dump the CPU backtrace - start\n");
if (tmp_a) {
	for (j = 1024; j < 2048; j++)
	{
		printk(" num_%d_data_[0x%x] fun %ps", j, tmp_a[j], tmp_a[j]);
	}			
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值