死锁检测a

1.1 触发死锁
echo 7 > /proc/sys/kernel/printk
insmod spin_lock_deadlock.ko

#include <linux/module.h>
#include <linux/kernel.h>
 
static spinlock_t hack_spinA;
static spinlock_t hack_spinB;
 
void hack_spinAB(void)
{
  printk("hack_lockdep:A->B\n");
  spin_lock(&hack_spinA);
  spin_lock(&hack_spinB);
}
 
void hack_spinBA(void)
{
  printk("hack_lockdep:B->A\n");
  spin_lock(&hack_spinB);
  spin_lock(&hack_spinA);
}
 
static int __init lockdep_test_init(void)
{
  printk("al: lockdep error test init\n");
  spin_lock_init(&hack_spinA);
  spin_lock_init(&hack_spinB);
 
  hack_spinAB();
  hack_spinBA();
  return 0;
}
 
module_init(lockdep_test_init);
KVERSION := $(shell uname -r)
KERN_DIR := xx/kernel/linux/linux-4.19.125
#CROSS_COMPILE ?= aarch64-linux-gnu-
CROSS_COMPILE ?= arm-linux-gnueabi-
all:
	make ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) -C $(KERN_DIR) M=$(shell pwd) modules
	rm -f *.mod* *.symvers *.order *.o
clean:
	make -C $(KERN_DIR) M=$(shell pwd) clean

obj-m := spin_lock_deadlock.o

1.2 死锁现象
在这里插入图片描述1.3 死锁检测

配置lockdep

CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_PROVE_LOCKING=y
CONFIG_LOCKDEP=y
CONFIG_LOCK_STAT=y。
CONFIG_DEBUG_LOCKDEP=y
CONFIG_DEBUG_ATOMIC_SLEEP=y

1.4死锁现象

参考文章:
【lockdep】Linux内核死锁检测工具(lockdep)的使用

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值