modified apic.dsl ** Attachment added: "modified_apic.dsl" https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2097455/+attachment/5855117/+files/modified_apic.dsl
** Summary changed: - Fix LAPIC/x2APIC parsing order + Incorrect LAPIC/x2APIC parsing order -- You received this bug notification because you are a member of Kernel Packages, which is subscribed to linux in Ubuntu. https://bugs.launchpad.net/bugs/2097455 Title: Incorrect LAPIC/x2APIC parsing order Status in linux package in Ubuntu: New Status in linux source package in Noble: New Status in linux source package in Oracular: New Bug description: [ Impact ] * In Kernels with commit ec9aedb2aa1a (6.7) CPUs can be enumerated in the order which violates ACPI specification that states: "OSPM should initialize processors in the order that they appear in the MADT" * The problematic commit parses all LAPIC entries before any x2APIC entries, aiming to ignore x2APIC entries with APIC ID < 255 when valid LAPIC entries exist. However, it disrupts the CPU enumeration order on systems where x2APIC entries precede LAPIC entries in the MADT. * In scenarios with strict CPU pinning this behavior might introduce performance degradation or hyperthreading related side-channel vulnerabilities * Issue has been fixed upstream with commit 0141978ae75 [ Test Plan ] * Issue reproduces only in specific ACPI MADT configurations with mixed LAPIC and x2APIC entries. An example of it would be AMD Genoa CPUs. * Easiest way to reproduce it locally is to replace x2APIC entry before LAPIC in MADT table. Steps to reproduce (local VM): 1. Set up a VM with 288 vCPUs sudo qemu-system-x86_64 -enable-kvm \ -M q35,accel=kvm,kernel-irqchip=split \ -device intel-iommu,intremap=on \ -smp 288,cores=144,threads=1,sockets=2 \ -m 20G \ -cpu host \ -object memory-backend-ram,id=mem0,size=10G \ -object memory-backend-ram,id=mem1,size=10G \ -numa node,cpus=0-143,nodeid=0,memdev=mem0 \ -numa node,cpus=144-287,nodeid=1,memdev=mem1 \ -drive file=/var/lib/libvirt/images/ubuntu24.04.qcow2,format=qcow2 \ -boot d 2. Dump acpi apic/madt tables from VM acpidump > acpidump.dat acpixtract -a acpidump.dat iasl -d apic.dat ---- apic.dsl file will be generated. 3. Craft apic.dsl and switch order of CPUs 4. Compile apic.dsl to aml file iasl -tc apic.dsl 5. Inject new table to VM sudo qemu-system-x86_64 -enable-kvm \ -M q35,accel=kvm,kernel-irqchip=split \ -device intel-iommu,intremap=on \ -smp 288,cores=144,threads=1,sockets=2 \ -acpitable file=apic.aml \ -m 20G \ -cpu host \ -object memory-backend-ram,id=mem0,size=10G \ -object memory-backend-ram,id=mem1,size=10G \ -numa node,cpus=0-143,nodeid=0,memdev=mem0 \ -numa node,cpus=144-287,nodeid=1,memdev=mem1 \ -drive file=/var/lib/libvirt/images/ubuntu24.04.qcow2,format=qcow2 \ -boot d Results: Depending on MADT changes. For following example I have moved single x2APIC entry after the first LAPIC. Incorrect enumeration present on 6.8 Kernels: NUMA node(s): 2 NUMA node0 CPU(s): 0-143 NUMA node1 CPU(s): 144-287 Enumeration on 6.8 Kernel with applied fixes: NUMA node(s): 2 NUMA node0 CPU(s): 0,2-144 NUMA node1 CPU(s): 1,145-287 [ Where problems could occur ] * Fix has been tested using alocal VM with a modified MADT table. * MADT table can have multiple possible configurations, making it hard to fully test the fix. * Potential regression with CPU enumeration can be hard to detect as was in case of patch that introduced the issue. [ Other Info ] * Patch which introduced an issue: ec9aedb2aa1ab7ac420c00b31f5edc5be15ec167 * Patch fixing the issue: 0141978ae75bd48bac13fca6de131a5071c32011 * Originally issue has been reported for AMD Genoa CPU with following enumeration: 6.5.0 NUMA node(s): 2 NUMA node0 CPU(s): 0-89,180-269 NUMA node1 CPU(s): 90-179,270-359 6.8.0 NUMA node(s): 2 NUMA node0 CPU(s): 0-179 NUMA node1 CPU(s): 180-359 To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2097455/+subscriptions -- Mailing list: https://launchpad.net/~kernel-packages Post to : kernel-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~kernel-packages More help : https://help.launchpad.net/ListHelp