spin_lock_irqsave在单核系统是否可以关闭cpu所有中断

问题遇到的现象和发生背景

现在使用的是单核linux系统,我只调用spin_lock_irqsave进行测试该函数功能,不调用spin_unlock_irqrestore,验证该函数是否能关闭cpu所有的中断
,实际并不会,因为我用另外一个驱动程序申请了一个gpio中断,发现gpio中断还是可以正常响应,那么spin_lock_irqsave函数不能关闭cpu所有的中断吗?
代码如下:

static int test_hello_init(void)
{
    unsigned long flags;
   pr_info("hahaha irqtest\n");
   spin_lock_init(&wk_lock);
   spin_lock_irqsave(&wk_lock, flags);
    return 0;
}


操作环境、软件版本等信息

Linux系统

我想要达到的结果

想知道spin_lock_irqsave函数到底能不能关闭cpu所有中断

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    spin_lock_irqsave函数在单核系统中是不能关闭CPU的所有中断的。它只能禁止当前CPU的本地中断,即使使用了spin_lock_irqsave函数,其他CPU仍然可以触发中断并且可以响应。

    要关闭CPU的所有中断,您可以使用本地中断禁用指令cli,然后再使用sti指令恢复中断状态。在x86架构上,可以使用以下代码来实现:

    #include <asm/irqflags.h>
    
    // 禁用中断
    cli();
    
    // 启用中断
    sti();
    

    但需要注意的是,在单核系统上禁用中断可能会导致系统失去响应,因为禁用中断将阻止系统处理中断请求。所以在实际开发中,必须谨慎使用禁用中断的操作。

    对于其他的中断控制方法,您可以参考Linux内核的文档和相关资料进行进一步学习和研究。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^