Linux kernel 内核错误:IRQ重新映射不支持X2APIC模式,已禁用X2APIC
我需要在IntelR XeonR CPU E3-1225 v5@3.30GHz上启用x2apic,我发现cpuinfo中支持x2apic: 但当内核启动时,我发现错误消息: [0.138328]IRQ重新映射不支持X2APIC模式,请禁用X2APIC 我已经检查了我的内核配置: CONFIG_X86_X2APIC=yLinux kernel 内核错误:IRQ重新映射不支持X2APIC模式,已禁用X2APIC,linux-kernel,Linux Kernel,我需要在IntelR XeonR CPU E3-1225 v5@3.30GHz上启用x2apic,我发现cpuinfo中支持x2apic: 但当内核启动时,我发现错误消息: [0.138328]IRQ重新映射不支持X2APIC模式,请禁用X2APIC 我已经检查了我的内核配置: CONFIG_X86_X2APIC=y 如何解决此问题?x2apic in/proc/cpuinfo显示了CPU芯片的功能。 当存在无法为所需模式启用X2APIC模式的环境时,内核函数将生成消息IRQ remapping
如何解决此问题?x2apic in/proc/cpuinfo显示了CPU芯片的功能。 当存在无法为所需模式启用X2APIC模式的环境时,内核函数将生成消息IRQ remapping NOT support X2APIC mode,disable 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/kernel/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年和2015年有一些补丁在运行;2013年引入代码路径时,有大量邮件列表
x86/apic:仅在必要时禁用CPU x2apic模式
当中断重新映射硬件不处于X2APIC时,CPU X2APIC模式
将在以下情况下禁用:
1最大CPU APIC ID大于255
2 hypervisio不支持x2apic模式。
您应该检查您的虚拟机监控程序(如果使用)和irq重新映射方法。可以在“英特尔启用IRQ重新映射”的pr_信息消息中启用IRQ重新映射-x2apic in/proc/cpuinfo显示CPU芯片的功能。 当存在无法为所需模式启用X2APIC模式的环境时,内核函数将生成消息IRQ remapping NOT support X2APIC mode,disable 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/kernel/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年和2015年有一些补丁在运行;2013年引入代码路径时,有大量邮件列表
x86/apic:仅在必要时禁用CPU x2apic模式
当中断重新映射硬件不处于X2APIC时,CPU X2APIC模式
将在以下情况下禁用:
1最大CPU APIC ID大于255
2 hypervisio不支持x2apic模式。
您应该检查您的虚拟机监控程序(如果使用)和irq重新映射方法。“英特尔启用IRQ重新映射”-个人认为此错误消息具有误导性 说明:IRQ重新映射不支持X2APIC模式,请禁用X2APIC 它的实际含义是:IRQ重新映射未启用,因此x2APIC已禁用 解决方案是打开IRQ重新映射。在内核配置中设置CONFIG_IRQ_REMAP=y并重新编译它 x2APIC要求启用IOMMU并启用IRQ重新映射 在BIOS中启用IOMMU。默认情况下,许多系统都会禁用它。即使在我的全新2020年7月版上,千兆字节R282-Z93和EPYC 7742 CPU也是如此! 在BIOS中启用x2APIC。 在内核中启用IOMMU支持: 对于英特尔CPU:CONFIG_Intel_IOMMU=y 对于AMD CPU:CONFIG_AMD_IOMMU=y和CONFIG_AMD_IOMMU V2=y 在内核中启用x2APIC支持:CONFIG_X86_x2APIC=y 在内核中启用IRQ重新映射:CONFIG_IRQ_REMAP=y 那么,如果x2APIC需要IRQ重新映射,那么如何最终得到一个支持x2APIC但没有IRQ重新映射的内核呢?好的,如果您查看CONFIG_X86_X2APIC的依赖项,您会发现它需要X86_LOCAL_APIC&&X86_64&&IRQ_REMAP|HYPERVISOR|GUEST
因此,如果内核构建为支持在虚拟机监控程序下运行,那么很可能无法启用IRQ重新映射选项。我就是这么做的。哎呀!在我将内核源代码重新映射为IRQ之前,找出问题所在是非常令人困惑的,因为IRQ重新映射不支持X2APIC模式,禁用X2APIC消息,在这一点上,解决问题变得相对简单。我个人认为此错误消息具有误导性 说明:IRQ重新映射不支持X2APIC模式,请禁用X2APIC 它的实际含义是:IRQ重新映射未启用,因此x2APIC已禁用 解决方案是打开IRQ重新映射。在内核配置中设置CONFIG_IRQ_REMAP=y并重新编译它 x2APIC要求启用IOMMU并启用IRQ重新映射 在BIOS中启用IOMMU。默认情况下,许多系统都会禁用它。即使在我的全新2020年7月版上,千兆字节R282-Z93和EPYC 7742 CPU也是如此! 在BIOS中启用x2APIC。 在内核中启用IOMMU支持: 对于英特尔CPU:CONFIG_Intel_IOMMU=y 对于AMD CPU:CONFIG_AMD_IOMMU=y和CONFIG_AMD_IOMMU V2=y 在内核中启用x2APIC支持:CONFIG_X86_x2APIC=y 在内核中启用IRQ重新映射:CONFIG_IRQ_REMAP=y 那么,如果x2APIC需要IRQ重新映射,那么如何最终得到一个支持x2APIC但没有IRQ重新映射的内核呢?好的,如果您查看CONFIG_X86_X2APIC的依赖项,您会发现它需要X86_LOCAL_APIC&&X86_64&&IRQ_REMAP|HYPERVISOR|GUEST 因此,如果内核构建为支持在虚拟机监控程序下运行,那么很可能无法启用
IRQ重映射。我就是这么做的。哎呀!在我为IRQ重新映射的内核源代码进行灰色映射之前,找出错误是非常混乱的,因为IRQ重新映射不支持X2APIC模式,禁用X2APIC消息,在这一点上,解决问题变得相对简单。我从这里运行配置[1],没有发现问题。您确定BIOS允许您这样做吗?[1] :我从这里运行配置[1],没有发现问题。您确定BIOS允许您这样做吗?[1]: