System Suspend and Device Interrupts 【ChatGPT】

简介: System Suspend and Device Interrupts 【ChatGPT】

系统挂起和设备中断

版权

© 2014 Intel Corp. 作者:Rafael J. Wysocki rafael.j.wysocki@intel.com

挂起和恢复设备中断

在系统挂起后(即在所有设备的->prepare、->suspend和->suspend_late回调已经执行完毕之后),通常会禁用设备中断请求线(IRQs)。这是通过suspend_device_irqs()来实现的。

这样做的理由是,在设备挂起的“晚期”阶段之后,暂停设备的任何中断触发都没有合法的理由,如果有任何设备尚未正确挂起,最好也阻止来自它们的中断。此外,在过去,我们曾遇到过共享IRQ的中断处理程序在设备挂起后未能准备好处理中断触发的问题。在某些情况下,它们会尝试访问已挂起设备的内存地址空间,导致结果不可预测的行为。不幸的是,这类问题非常难以调试,引入suspend_device_irqs()以及设备挂起和恢复的“noirq”阶段是缓解这些问题的唯一实际方法。

在系统恢复期间,设备中断会在“早期”阶段(即在开始执行设备的->resume_early回调之前)重新启用。执行此操作的函数是resume_device_irqs()。

IRQF_NO_SUSPEND标志

有些中断在整个系统挂起-恢复周期中都可以合法触发,包括设备挂起和恢复的“noirq”阶段,以及非引导CPU被下线和重新上线的时间。这主要适用于定时器中断,同时也适用于IPI和一些其他特殊用途的中断。

当请求特殊用途的中断时,IRQF_NO_SUSPEND标志用于向IRQ子系统指示这一点。它导致suspend_device_irqs()保持相应的IRQ启用,以便在挂起-恢复周期中使中断按预期工作,但并不保证中断会唤醒系统从挂起状态唤醒--对于这种情况,需要使用enable_irq_wake()。

请注意,IRQF_NO_SUSPEND标志影响整个IRQ,而不仅仅是它的一个用户。因此,如果IRQ是共享的,即使某些IRQ的用户没有将IRQF_NO_SUSPEND标志传递给request_irq()(或等效的函数),在suspend_device_irqs()之后仍将像往常一样执行为其安装的所有中断处理程序。因此,应避免同时使用IRQF_NO_SUSPEND和IRQF_SHARED。

系统唤醒中断、enable_irq_wake()和disable_irq_wake()

系统唤醒中断通常需要配置为从睡眠状态唤醒系统,特别是如果它们在工作状态中用于不同目的(例如作为I/O中断)。

这可能涉及在平台内部(如SoC)启用特殊的信号处理逻辑,以便在系统睡眠期间从给定线路接收的信号以不同的方式路由,以在需要时触发系统唤醒。例如,平台可能包括一个专用的中断控制器,专门用于处理系统唤醒事件。然后,如果给定的中断线路应该从睡眠状态唤醒系统,那么该中断控制器的相应输入需要被启用,以接收来自相关线路的信号。唤醒后,通常最好禁用该输入,以防止专用控制器不必要地触发中断。

IRQ子系统提供了两个辅助函数供设备驱动程序用于这些目的。即enable_irq_wake()用于启用平台处理给定IRQ作为系统唤醒中断线路的逻辑,而disable_irq_wake()用于关闭该逻辑。

调用enable_irq_wake()会导致suspend_device_irqs()以特殊方式处理给定的IRQ。即,IRQ保持启用,但在第一个中断时将被禁用,并标记为挂起,以便在随后的系统恢复期间由resume_device_irqs()重新启用。此外,PM核心会收到有关导致正在进行的系统挂起中止的事件的通知(这不一定会立即发生,而是在挂起线程寻找挂起唤醒事件的某个点上)。

这样,来自唤醒中断源的每个中断都会导致当前正在进行的系统挂起被中止,或者如果已经挂起,则唤醒系统。但是,在suspend_device_irqs()之后,系统唤醒IRQ的中断处理程序不会被执行。此时,它们只会为IRQF_NO_SUSPEND的IRQ执行,但这些IRQ不应使用enable_irq_wake()配置为系统唤醒。

中断和挂起到空闲状态

挂起到空闲状态(也称为“冻结”睡眠状态)是一种相对较新的系统睡眠状态,它通过使所有处理器处于空闲状态并在挂起设备的“noirq”阶段后等待中断来工作。

当然,这意味着所有设置了IRQF_NO_SUSPEND标志的中断都会在该状态下唤醒CPU,但它们不会导致IRQ子系统触发系统唤醒。

系统唤醒中断,反过来,将触发从挂起到空闲状态的唤醒,类似于它们在完全系统挂起情况下的作用。唯一的区别是,从挂起到空闲状态的唤醒是使用通常的工作状态中断传递机制进行信号传递的,并不需要平台使用任何特殊的中断处理逻辑来使其工作。

IRQF_NO_SUSPEND和enable_irq_wake()

几乎没有什么有效的理由同时在同一个IRQ上使用enable_irq_wake()和IRQF_NO_SUSPEND标志,而且在同一个设备上同时使用两者是无效的。

首先,如果IRQ不是共享的,处理IRQF_NO_SUSPEND中断的规则(在suspend_device_irqs()之后调用中断处理程序)与处理系统唤醒中断的规则(在suspend_device_irqs()之后不调用中断处理程序)直接相矛盾。

其次,enable_irq_wake()和IRQF_NO_SUSPEND都适用于整个IRQ,而不是单个中断处理程序,因此在系统唤醒中断源和IRQF_NO_SUSPEND中断源之间共享IRQ通常是没有意义的。

在极少数情况下,一个IRQ可以在唤醒设备驱动程序和使用IRQF_NO_SUSPEND的用户之间共享。为了确保安全,唤醒设备驱动程序必须能够区分虚假的中断和真正的唤醒事件(通过向核心发出pm_system_wakeup()信号),必须使用enable_irq_wake()来确保IRQ将作为唤醒源进行功能,并且必须使用IRQF_COND_SUSPEND请求IRQ以告知核心它满足这些要求。如果这些要求不满足,就不能使用IRQF_COND_SUSPEND。

相关文章
|
2月前
|
调度
CPU and Device Power Management 【ChatGPT】
CPU and Device Power Management 【ChatGPT】
|
6月前
|
人工智能 IDE Linux
chatgpt的ai编程工具
该内容是关于两个chatgpt的ai编程工具的安装和使用说明。Copilot的下载步骤包括在IDE的设置中搜索并安装插件,然后重启IDE并登录GitHub账户。使用时,通过写注释触发建议,用快捷键选择建议。启用或禁用Copilot可通过底部状态图标。另一个工具是Alibaba Cloud AI Coding Assistant (Cosy),同样在IDE的插件市场下载安装后重启。其详细使用方法建议参考官网。
299 0
|
3月前
|
人工智能 自然语言处理 搜索推荐
chatgpt这么火,现在AI搜索引擎有哪些呢?
国外AI搜索引擎包括ChatGPT,擅长自然语言处理与内容生成;Google Bard,提供智能个性化搜索体验;Microsoft Bing集成GPT模型增强智能检索;Perplexity AI以简洁答案及文献引用著称;Neeva强调隐私保护与无广告服务。国内方面,天工AI支持多种功能如知识问答与代码编程;腾讯元宝基于混元模型助力内容创造与学习;360AI搜索以精准全面的信息搜索见长;秘塔AI专注提升写作质量和效率;开搜AI搜索提供个性化智能搜索服务。以上引擎均利用先进AI技术提升用户体验。更多详情参阅[AI搜索合集](zhangfeidezhu.com/?page_id=651)。
112 8
chatgpt这么火,现在AI搜索引擎有哪些呢?
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
HuggingGPT解析:使用 ChatGPT及HuggingFace上的族系解决AI问题
HuggingGPT是一个框架,它使用大型语言模型(如ChatGPT)作为控制器来管理和协调Hugging Face上的AI模型,以语言作为通用接口解决多模态和领域的复杂AI任务。
59 0
HuggingGPT解析:使用 ChatGPT及HuggingFace上的族系解决AI问题
|
3月前
|
机器学习/深度学习 人工智能 算法
为什么ChatGPT等AI大模型都是基于Python开发?
为什么ChatGPT等AI大模型都是基于Python开发?
|
3月前
|
人工智能 自然语言处理 Linux
免费ChatGPT4o灵办AI可体验浏览器插件
灵办AI就是您所需的最佳助手!我们为您带来了一款多功能AI工具,ChatGPT4o不仅能为您提供精准翻译,还能满足您的对话需求、智能续写、AI搜索、文档阅读、代码生成与修正等多种需求。灵办 AI,真正让工作和学习变得轻松高效!一款多功能智能助手,旨在提升工作和学习效率。它提供实时翻译、对话问答、搜索、写作和网页阅读等服务,支持多种浏览器和操作系统,帮助用户随时获取信息,打破语言障碍,优化内容创作和信息处理。
117 0
|
3月前
|
Web App开发 人工智能 安全
Gemini vs ChatGPT:谷歌最新的AI和ChatGPT相比,谁更强?
Gemini vs ChatGPT:谷歌最新的AI和ChatGPT相比,谁更强?
|
3月前
|
人工智能 安全 机器人
ChatGPT 1岁:创新、争议和AI产生突破的一年
ChatGPT 1岁:创新、争议和AI产生突破的一年
|
5月前
|
人工智能 安全 机器人
ChatGPT 1岁:创新、争议和AI产生突破的一年
ChatGPT 1岁:创新、争议和AI产生突破的一年
|
5月前
|
人工智能 机器人 API
OpenAI发布新AI模型GPT-4o和桌面版ChatGPT
OpenAI发布新AI模型GPT-4o和桌面版ChatGPT