Linux kernel 如何在抢占式内核中生成软锁定?

Linux kernel 如何在抢占式内核中生成软锁定?,linux-kernel,kernel,scheduling,panic,Linux Kernel,Kernel,Scheduling,Panic,我已经在内核配置中启用了CONFIG\u BOOTPARAM\u SOFTLOCKUP\u PANIC,现在我想测试这个行为,即在发生软锁定时内核应该死机 为了尝试这一点,我创建了一个模块 int thread_function(void *data) { int var; var = 10; printk(KERN_INFO "Inside %s %s\n",STR_MOD,__func__); //while(!kthread_should_stop()){

我已经在内核配置中启用了
CONFIG\u BOOTPARAM\u SOFTLOCKUP\u PANIC
,现在我想测试这个行为,即在发生软锁定时内核应该死机

为了尝试这一点,我创建了一个模块

int thread_function(void *data)
{
    int var;
    var = 10;
    printk(KERN_INFO "Inside %s %s\n",STR_MOD,__func__);
    //while(!kthread_should_stop()){
        while(1) {
            printk(KERN_INFO "Mutiplying...\n");
            var = var*var*var; //test
        }
    //}

    return var;
}

static int kernel_init(void)
{
    data = 20;
    printk(KERN_INFO"insmod %s\n",STR_MOD);
    /*task = kthread_create(&thread_function,(void *)data,"SD");*/
    task = kthread_run(&thread_function,(void *)data,"SD");
    set_cpus_allowed(task, *cpumask_of(0));
    printk(KERN_INFO"Kernel Thread : %s\n",task->comm);
    return 0;
}
使用此CPU,0正忙于处理任务,并报告使用率约为99.9%,使用率
top

但它不会产生软锁定


所以,我的问题是如何实现这一点?

尝试在spinlock critical section内进行繁忙等待。软锁定检测器的一个目的是发现长时间运行的自旋锁关键部分。通常CPU被单个进程占用11秒,这种软锁定问题就会发生。github:尝试在自旋锁关键部分内进行忙等待。软锁定检测器的一个目的是发现长时间运行的自旋锁定关键部分。通常CPU被单进程保持11秒的时间,会出现此软锁定问题。github: