a2591748032-随心所记 2023-06-29 21:11 采纳率: 100%
浏览 27
已结题

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所有中断

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-30 08:27
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

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

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

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

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

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


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月26日
  • 已采纳回答 7月18日
  • 创建了问题 6月29日

悬赏问题

  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)