mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2026-05-05 12:22:53 +00:00
According to SDM Vol3 11.12.10, in x2APIC mode, Logical Destination has two parts: - Cluster ID (LDR[31:16]) - Logical ID (LDR[15:0]) Cluster ID is a numerical address, while Logical ID is a 16bit mask. We can only use Logical ID to address multi destinations within a Cluster. So we can't just 'or' all the Logical Destination in LDR registers to get one mask for all target pCPUs. This would get a wrong destination mask if the target Destinations are from different Clusters. For example in ADL/RPL x2APIC LDRs for core 2-5 are 0x10001 0x10100 0x20001 0x20100. If we 'or' them together, we would get a Logical Destination of 0x30101, which points to core 6 and another core. If core 6 is running a RTVM, then the irq is unable to get to core 2-5, causing the guest on core 2-5 driver fail. Guests working in xAPIC mode may use 'Flat Model' to select an arbitrary list of CPUs as its irq destination. HV may not be able to include them all when transfering to physical destinations, because the HW is working in x2APIC mode and can only use 'Cluster Model'. There would be no perfect fix for this issue. This patch is a simple fix, by just keep the first Cluster of all target Logical Destinations. Tracked-On: #8435 Signed-off-by: Wu Zhou <wu.zhou@intel.com> Reviewed-by: Junjie Mao <junjie.mao@intel.com>
ACRN Hypervisor ############### The open source `Project ACRN`_ defines a device hypervisor reference stack and an architecture for running multiple software subsystems, managed securely, on a consolidated system by means of a virtual machine manager. It also defines a reference framework implementation for virtual device emulation, called the "ACRN Device Model". The ACRN Hypervisor is a Type 1 reference hypervisor stack, running directly on the bare-metal hardware, and is suitable for a variety of IoT and embedded device solutions. The ACRN hypervisor addresses the gap that currently exists between datacenter hypervisors, and hard partitioning hypervisors. The ACRN hypervisor architecture partitions the system into different functional domains, with carefully selected guest OS sharing optimizations for IoT and embedded devices. You can find out more about Project ACRN on the `Project ACRN documentation`_ website. .. _`Project ACRN`: https://projectacrn.org .. _`ACRN Hypervisor`: https://github.com/projectacrn/acrn-hypervisor .. _`Project ACRN documentation`: https://projectacrn.github.io/