首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内核错误: IRQ重映射不支持X2APIC模式,禁用x2apic

内核错误: IRQ重映射不支持X2APIC模式,禁用x2apic
EN

Stack Overflow用户
提问于 2020-02-14 03:37:35
回答 2查看 5.2K关注 0票数 2

我需要在英特尔(R) Xeon(R) CPU E3-1225 v5 @ 3.30GHz上启用x2apic,我发现cpuinfo支持x2apic:

但是当内核启动时,我发现了错误消息:

0.138328 IRQ重映射不支持x2apic模式,禁用X2APIC。

我已经检查了内核配置:

CONFIG_X86_X2APIC=y

我能做些什么来解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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重映射。

  1. 在BIOS中启用IOMMU。(在许多系统中,默认情况下是禁用的。即使在我的全新(2020年7月)G R 282-Z93与EPYC 7742 CPU!)
  2. 在BIOS中启用x2APIC。
  3. 在内核中启用IOMMU支持:
    • 英特尔CPU:CONFIG_INTEL_IOMMU=y
    • 用于AMD:CONFIG_AMD_IOMMU=yCONFIG_AMD_IOMMU_V2=y

  4. 在内核中启用x2APIC支持:CONFIG_X86_X2APIC=y
  5. 在内核中启用IRQ重映射:CONFIG_IRQ_REMAP=y

那么,如果x2APIC需要IRQ重映射,那么如何才能最终得到一个具有x2APIC支持但没有IRQ重新映射的内核呢?如果您查看CONFIG_X86_X2APIC的依赖项,就会发现它需要X86_LOCAL_APIC && X86_64 && (IRQ_REMAP || HYPERVISOR_GUEST)

因此,如果您的内核是为支持在管理程序下运行而构建的,那么很可能无法启用IRQ重映射选项。(我就是这样做的。糟了!在我为"IRQ重新映射不支持X2APIC模式,禁用x2apic“消息的内核源代码打招呼之前,弄清楚到底出了什么问题是非常令人困惑的,这时找出问题就变得相对简单了。)

票数 3
EN

Stack Overflow用户

发布于 2020-02-24 01:05:38

x2apic in /proc/cpuinfo显示了您的CPU芯片的功能。消息"IRQ重映射不支持X2APIC模式,禁用x2apic“是由内核函数x2apic()生成的,当存在无法为所需模式启用x2apic模式的环境时。当前代码是

代码语言:javascript
运行
复制
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文件中调用的:

代码语言:javascript
运行
复制
    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模式:

  • 1)最大CPU APIC ID大于255。
  • 2)超视距不支持x2apic模式。

您应该检查hypervisor (如果使用)和irq重新映射方法。可以在来自pr_info - remapping.c#L827的intel_enable_irq_remapping -remapping.c#L827消息中进行“启用IRQ重映射”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60219639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档