linux-kernel - 内核错误 : IRQ remapping doesn't support X2APIC mode, 禁用 x2apic

标签 linux-kernel

<分区>

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

enter image description here

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

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

我检查了我的内核配置:

CONFIG_X86_X2APIC=y

我该怎么做才能解决这个问题?

最佳答案

我个人认为此错误消息具有误导性。

内容:IRQ 重映射不支持 X2APIC 模式,禁用 x2apic。

实际含义:IRQ 重映射未启用,因此 x2APIC 已禁用。

解决方法是打开IRQ重映射。在您的内核配置中设置 CONFIG_IRQ_REMAP=y 并重新编译它。

x2APIC 要求启用 IOMMU 并启用 IRQ 重新映射。

  1. 在 BIOS 中启用 IOMMU。 (它在许多系统上默认处于禁用状态。即使在我全新的(2020 年 7 月)配备 EPYC 7742 CPU 的技嘉 R282-Z93 上也是如此!)
  2. 在 BIOS 中启用 x2APIC。
  3. 在内核中启用 IOMMU 支持:
    • 对于 Intel CPU:CONFIG_INTEL_IOMMU=y
    • 对于 AMD CPU: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”消息搜索内核源代码之前,弄清楚出了什么问题是非常令人困惑的,此时它变得相对简单明了解决问题。)

关于linux-kernel - 内核错误 : IRQ remapping doesn't support X2APIC mode, 禁用 x2apic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60219639/

相关文章:

linux-kernel - 进行系统调用以获取进程列表

linux-kernel - 在运行时从 linux 内核模块获取内核版本

linux - 所有文件操作都必须在系统调用 open() 之后完成吗?

linux - 在不挂载的情况下读取 cgroups 数据

struct - 驱动程序 linux : pass platform_data through struct resource

linux - KVM 可以在没有 libvirt 的情况下工作吗?

c - 删除 skb 或扩展传出 skb

c - 将 UART 寄存器地址映射到内核以编写设备驱动程序

android - 选择安卓wifi channel

module - 破坏内核堆栈的函数