我需要在英特尔(R) Xeon(R) CPU E3-1225 v5 @ 3.30GHz上启用x2apic,我发现cpuinfo支持x2apic:
但是当内核启动时,我发现了错误消息:
0.138328 IRQ重映射不支持x2apic模式,禁用X2APIC。
我已经检查了内核配置:
CONFIG_X86_X2APIC=y
我能做些什么来解决这个问题?
发布于 2020-08-05 23:45:54
就我个人而言,我发现这个错误信息是误导的。
上面写着:IRQ remapping doesn't support X2APIC mode, disable x2apic.
它的真正含义是:IRQ remapping isn't enabled, so x2APIC was disabled.
解决方案是打开IRQ重映射。在内核配置中设置CONFIG_IRQ_REMAP=y
并重新编译它。
x2APIC要求启用IOMMU,并启用IRQ重映射。
CONFIG_INTEL_IOMMU=y
CONFIG_AMD_IOMMU=y
和CONFIG_AMD_IOMMU_V2=y
CONFIG_X86_X2APIC=y
CONFIG_IRQ_REMAP=y
那么,如果x2APIC需要IRQ重映射,那么如何才能最终得到一个具有x2APIC支持但没有IRQ重新映射的内核呢?如果您查看CONFIG_X86_X2APIC的依赖项,就会发现它需要X86_LOCAL_APIC && X86_64 && (IRQ_REMAP || HYPERVISOR_GUEST)
因此,如果您的内核是为支持在管理程序下运行而构建的,那么很可能无法启用IRQ重映射选项。(我就是这样做的。糟了!在我为"IRQ重新映射不支持X2APIC模式,禁用x2apic“消息的内核源代码打招呼之前,弄清楚到底出了什么问题是非常令人困惑的,这时找出问题就变得相对简单了。)
发布于 2020-02-24 01:05:38
x2apic in /proc/cpuinfo显示了您的CPU芯片的功能。消息"IRQ重映射不支持X2APIC模式,禁用x2apic“是由内核函数x2apic()生成的,当存在无法为所需模式启用x2apic模式的环境时。当前代码是
static __init void try_to_enable_x2apic(int remap_mode)
{
if (x2apic_state == X2APIC_DISABLED)
return;
if (remap_mode != IRQ_REMAP_X2APIC_MODE) {
/* IR is required if there is APIC ID > 255 even when running
* under KVM
*/
if (max_physical_apicid > 255 ||
!x86_init.hyper.x2apic_available()) {
pr_info("x2apic: IRQ remapping doesn't support X2APIC mode\n");
x2apic_disable();
return;
}
/*
* without IR all CPUs can be addressed by IOAPIC/MSI
* only in physical mode
*/
x2apic_phys = 1;
}
x2apic_enable();
}
它是从arch/x86/ enable_IR_x2apic(void)
/apic/apic.c文件中调用的:
ir_stat = irq_remapping_prepare();
if (ir_stat < 0 && !x2apic_supported())
return;
...
/* If irq_remapping_prepare() succeeded, try to enable it */
if (ir_stat >= 0)
ir_stat = irq_remapping_enable();
/* ir_stat contains the remap mode or an error code */
try_to_enable_x2apic(ir_stat);
在2015年,x2apic()函数中有一些补丁,https://lore.kernel.org/patchwork/patch/533651/和https://lore.kernel.org/patchwork/patch/533496/;2013年,当代码路径引入https://groups.google.com/forum/#!msg/fa.linux.kernel/uD28wv9Inhg/KHgAvvkA0d4J时,出现了大量的邮件列表
x86/apic:只在必要时禁用CPU x2apic模式 当中断重映射硬件不在X2APIC中时,在下列情况下将禁用CPU X2APIC模式:
您应该检查hypervisor (如果使用)和irq重新映射方法。可以在来自pr_info - remapping.c#L827的intel_enable_irq_remapping -remapping.c#L827消息中进行“启用IRQ重映射”。
https://stackoverflow.com/questions/60219639
复制相似问题