草庐IT

interrupt

全部标签

linux - 如何在 Linux 中避免共享 IRQ 竞争

我正在考虑嵌入式Linux项目(还没有硬件)中即将出现的情况,其中两个外部芯片需要共享一条物理IRQ线。这条线在硬件中能够实现边沿触发,但不能实现电平触发中断。查看Linux中的共享irq支持,我了解到这与两个单独的驱动程序一起工作的方式是每个驱动程序都会调用它们的中断处理程序,检查它们的硬件并在适当时进行处理。但是我想象以下竞争条件,并且想知道我是否遗漏了什么或者可以采取什么措施来解决这个问题。假设有两个外部中断源,设备A和B:设备B中断发生,IRQ激活IRQ边缘导致Linux核心中断处理程序运行设备A的ISR运行,发现没有待处理的中断设备中断发生,IRQ保持活跃(线或)设备B的IS

linux - 为什么我们需要在 ARM Linux cpu_idle 中禁用 WFI 之前的中断

ARM的Linux内核基本上在循环中执行CPU_idle:while(1){disalbe_irqwfienable_irq}我可以理解这个逻辑是有效的,因为无论IRQ/FIQ状态如何,“wfi”都会唤醒ARM。但是,为什么“wfi”必须首先用disable_irq和eanble_irq括起来?源码/arch/arm/process.c有如下推荐:*Weneedtodisableinterruptshere*toensurewedon'tmissawakeupcall.但我无法理解它。谁能告诉我在哪种情况下我们会错过叫醒服务? 最佳答案

linux - 为什么我们需要在 ARM Linux cpu_idle 中禁用 WFI 之前的中断

ARM的Linux内核基本上在循环中执行CPU_idle:while(1){disalbe_irqwfienable_irq}我可以理解这个逻辑是有效的,因为无论IRQ/FIQ状态如何,“wfi”都会唤醒ARM。但是,为什么“wfi”必须首先用disable_irq和eanble_irq括起来?源码/arch/arm/process.c有如下推荐:*Weneedtodisableinterruptshere*toensurewedon'tmissawakeupcall.但我无法理解它。谁能告诉我在哪种情况下我们会错过叫醒服务? 最佳答案

linux - 在 Linux-CentOS/Intel 机器上评估 SMI(系统管理中断)延迟

我有兴趣评估SMI在运行CentOS的Linux机器上处理的行为(延迟、频率)并用于(非常)软实时应用程序。推荐使用哪些工具(CentOS的hwlatdetect?),解决此问题的最佳行动方案是什么?如果CentOS没有可用的好工具,我假设安装一个同一台机器上的不同操作系统应该产生相同的结果,因为底层硬件/bios是相同的?是否有关于这些参数的大概数字的任何来源。机器是X86_64架构,运行CentOS6.4(内核2.6.32-358.23.2.el2.centos.plus.x86_64.) 最佳答案 在正常操作期间肯定会发生SM

linux - 在 Linux-CentOS/Intel 机器上评估 SMI(系统管理中断)延迟

我有兴趣评估SMI在运行CentOS的Linux机器上处理的行为(延迟、频率)并用于(非常)软实时应用程序。推荐使用哪些工具(CentOS的hwlatdetect?),解决此问题的最佳行动方案是什么?如果CentOS没有可用的好工具,我假设安装一个同一台机器上的不同操作系统应该产生相同的结果,因为底层硬件/bios是相同的?是否有关于这些参数的大概数字的任何来源。机器是X86_64架构,运行CentOS6.4(内核2.6.32-358.23.2.el2.centos.plus.x86_64.) 最佳答案 在正常操作期间肯定会发生SM

c - 如何打断恐惧电话?

我有以下情况:有一个线程使用fread调用从设备读取数据。只要设备没有发送数据,此调用就会阻塞。当我停止这个线程时,它仍然卡在这个线程中。现在我在fread的手册页中找到了以下内容:ERRORSOnallsystemsthatconformtotheSingleUNIXSpecification,thefread()functionsetserrnoaslistedforthefollowingconditions:[EINTR]Thereadoperationwasterminatedduetothereceiptofasignal,andnodatawastransferred.这

c - 如何打断恐惧电话?

我有以下情况:有一个线程使用fread调用从设备读取数据。只要设备没有发送数据,此调用就会阻塞。当我停止这个线程时,它仍然卡在这个线程中。现在我在fread的手册页中找到了以下内容:ERRORSOnallsystemsthatconformtotheSingleUNIXSpecification,thefread()functionsetserrnoaslistedforthefollowingconditions:[EINTR]Thereadoperationwasterminatedduetothereceiptofasignal,andnodatawastransferred.这

linux - 无滴答内核、isolcpus、nohz_full 和 rcu_nocbs

我在grub.conf中添加了“isolcpus=3nohz_full=3rcu_nocbs=3”RedHat7.1,内核:linux3.10.0-229内核并根据http://www.breakage.org/2013/11/15/nohz_fullgodmode/我还执行以下命令:cat/sys/bus/workqueue/devices/writeback/cpumaskfecho1>/sys/bus/workqueue/devices/writeback/cpumaskcat/sys/bus/workqueue/devices/writeback/numa1echo0>/sys

linux - 无滴答内核、isolcpus、nohz_full 和 rcu_nocbs

我在grub.conf中添加了“isolcpus=3nohz_full=3rcu_nocbs=3”RedHat7.1,内核:linux3.10.0-229内核并根据http://www.breakage.org/2013/11/15/nohz_fullgodmode/我还执行以下命令:cat/sys/bus/workqueue/devices/writeback/cpumaskfecho1>/sys/bus/workqueue/devices/writeback/cpumaskcat/sys/bus/workqueue/devices/writeback/numa1echo0>/sys

linux - 如何在 Linux 内核模块中设置周期性定时器回调

我正在开发一个Linux内核模块,该模块为来自定制板的中断注册回调,并将接收到的数据放入字符设备接口(interface)后面的队列中,以供应用程序处理。即使没有来自板卡的中断,该模块也需要不断地监控和测量来自板卡的中断和数据,因此它有另一个根据时间触发的回调。当前的实现使用RTC中断作为常量定时器源。我禁用内核RTC驱动程序(CONFIG_RTC_DRV_CMOS)并请求IRQ8并将定时器回调挂接到RTC中断处理程序。RTC芯片每秒产生一次中断。问题是我们必须以这种方式失去一些Linux管理时间的能力,因为一次只能加载rtc-cmos或板模块之一(显然我们已经选择板模块)。目标架构是