enumipi_msg_type{IPI_RESCHEDULE,IPI_CALL_FUNC,IPI_CPU_STOP,IPI_CPU_CRASH_STOP,IPI_TIMER,IPI_IRQ_WORK,IPI_WAKEUP,NR_IPI}; handle_IPI是处理IPI中断的核心,代码如下: <arch/arm64/kernel/smp.c>873/*874 * Main handler for inter-processor interrupts875 */876voidhandle_IPI(intipinr,structpt_r...
IPI_IRQ_WORK, IPI_COMPLETION, IPI_CPU_BACKTRACE, /* * SGI8-15 can be reserved by secure firmware, and thus may * not be usable by the kernel. Please keep the above limited * to at most 8 entries. */ }; linux驱动中如何使用SGI 相关函数 void gic_raise_softirq(const struct cpumask ...
IPI_CPU_STOP, IPI_IRQ_WORK, IPI_COMPLETION, IPI_CPU_BACKTRACE, /* * SGI8-15 can be reserved by secure firmware, and thus may * not be usable by the kernel. Please keep the above limited * to at most 8 entries. */ }; linux驱动中如何使用SGI 相关函数 void gic_raise_softirq(const ...
@@ -101,6 +101,7 @@ obj-$(CONFIG_TRACEPOINTS) += trace/ obj-$(CONFIG_IRQ_WORK) += irq_work.o obj-$(CONFIG_CPU_PM) += cpu_pm.o obj-$(CONFIG_BPF) += bpf/+obj-$(CONFIG_IPI_BENCHMARK) += ipi_benchmark.o obj-$(CONFIG_PERF_EVENTS) += events/ diff --git a/kernel/ipi...
irq_work_run(); irq_exit();break;#endif#ifdefCONFIG_ARM64_ACPI_PARKING_PROTOCOLcaseIPI_WAKEUP: WARN_ONCE(!acpi_parking_protocol_valid(cpu),"CPU%u: Wake-up IPI outside the ACPI parking protocol\n", cpu);break;#endifdefault: pr_crit("CPU%u: Unknown IPI message 0x%x\n", cpu, ipinr)...
[26314590.132847] Modules linked in: nf_tables nfnetlink sctp sit tunnel4 ip_tunnel 8021q garp mrp stp llc bonding intel_rapl_msr intel_rapl_common nfit libnvdimm x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel kvm ipmi_ssif irqbypass crct10dif_pclmul crc32_pclmul ghash_clmulni_...
[kworker/63:1:1026052] [26314590.132847] Modules linked in: nf_tables nfnetlink sctp sit tunnel4 ip_tunnel 8021q garp mrp stp llc bonding intel_rapl_msr intel_rapl_common nfit libnvdimm x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel kvm ipmi_ssif irqbypass crct10dif_pclmul ...
在Linux下的IPI服务例程是在init_IRQ()中注册的。比如CALL_FUNCTION_VECTOR就可以请求目标cpu执行一个指定的函数。要想系统某个CPU发出中断需要通过apic_wait_icr_idle确认或等待APIC_ICR处于空闲状态,然后通过__prepare_ICR和__prepare_ICR2准备要写入的数值。
--- <IRQ stack> --- #9 [ffff88000399b738] apic_timer_interrupt at ffffffff816b5c1d [exception RIP: smp_call_function_many+514] RIP: ffffffff810f99a2 RSP: ffff88000399b7e8RFLAGS: 00000202 RAX: 0000000000000003 RBX: 00000000000000fc RCX: ffff88043fd9adb8 ...
local_irq_enable(); __netif_receive_skb(skb); local_irq_disable(); input_queue_head_incr(sd);if(++work >=quota) { local_irq_enable();returnwork; } } rps_lock(sd); qlen= skb_queue_len(&sd->input_pkt_queue);if(qlen)