Message ID | 20241111083457.2090664-17-zhenzhong.duan@intel.com |
---|---|
State | New |
Headers | show |
Series | intel_iommu: Enable stage-1 translation for emulated device | expand |
On Mon, Nov 11, 2024 at 4:39 PM Zhenzhong Duan <zhenzhong.duan@intel.com> wrote: > > According to VTD spec, stage-1 page table could support 4-level and > 5-level paging. > > However, 5-level paging translation emulation is unsupported yet. > That means the only supported value for aw_bits is 48. So default > aw_bits to 48 in scalable modern mode. > > For legacy and scalable legacy modes, 48 is the default choice for > modern OS when both 48 and 39 are supported. So it makes sense to > set default to 48 for these two modes too starting from QEMU 9.2. > Use pc_compat_9_1 to handle the compatibility for machines before > 9.2. > > Suggested-by: Jason Wang <jasowang@redhat.com> > Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com> > Reviewed-by: Clément Mathieu--Drif<clement.mathieu--drif@eviden.com> > Reviewed-by: Yi Liu <yi.l.liu@intel.com> > --- Acked-by: Jason Wang <jasowang@redhat.com> Thanks
diff --git a/include/hw/i386/intel_iommu.h b/include/hw/i386/intel_iommu.h index 13e8680b87..09ce707930 100644 --- a/include/hw/i386/intel_iommu.h +++ b/include/hw/i386/intel_iommu.h @@ -45,7 +45,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(IntelIOMMUState, INTEL_IOMMU_DEVICE) #define DMAR_REG_SIZE 0x230 #define VTD_HOST_AW_39BIT 39 #define VTD_HOST_AW_48BIT 48 -#define VTD_HOST_ADDRESS_WIDTH VTD_HOST_AW_39BIT +#define VTD_HOST_ADDRESS_WIDTH VTD_HOST_AW_48BIT #define VTD_HAW_MASK(aw) ((1ULL << (aw)) - 1) #define DMAR_REPORT_F_INTR (1) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 830614d930..bdb67f1fd4 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -83,6 +83,7 @@ GlobalProperty pc_compat_9_1[] = { { "ICH9-LPC", "x-smi-swsmi-timer", "off" }, { "ICH9-LPC", "x-smi-periodic-timer", "off" }, { TYPE_INTEL_IOMMU_DEVICE, "stale-tm", "on" }, + { TYPE_INTEL_IOMMU_DEVICE, "aw-bits", "39" }, }; const size_t pc_compat_9_1_len = G_N_ELEMENTS(pc_compat_9_1);