On Fri, Jan 19, 2018 at 11:34:57AM +0800, Jason Wang wrote: > > > On 2018年01月19日 04:45, Michael S. Tsirkin wrote: > > From: Prasad Singamsetty<prasad.singamse...@oracle.com> > > > > The current implementation of Intel IOMMU code only supports 39 bits > > iova address width. This patch provides a new parameter (x-aw-bits) > > for intel-iommu to extend its address width to 48 bits but keeping the > > default the same (39 bits). The reason for not changing the default > > is to avoid potential compatibility problems with live migration of > > intel-iommu enabled QEMU guest. The only valid values for 'x-aw-bits' > > parameter are 39 and 48. > > > > After enabling larger address width (48), we should be able to map > > larger iova addresses in the guest. For example, a QEMU guest that > > is configured with large memory ( >=1TB ). To check whether 48 bits > > aw is enabled, we can grep in the guest dmesg output with line: > > "DMAR: Host address width 48". > > > > Signed-off-by: Prasad Singamsetty<prasad.singams...@oracle.com> > > Reviewed-by: Peter Xu<pet...@redhat.com> > > Reviewed-by: Michael S. Tsirkin<m...@redhat.com> > > Signed-off-by: Michael S. Tsirkin<m...@redhat.com> > > --- > > hw/i386/intel_iommu_internal.h | 9 ++-- > > include/hw/i386/intel_iommu.h | 1 + > > hw/i386/acpi-build.c | 3 +- > > hw/i386/intel_iommu.c | 101 > > ++++++++++++++++++++++++----------------- > > 4 files changed, 65 insertions(+), 49 deletions(-) > > > > [...] > > > /* DMA Remapping Fault Conditions */ > > typedef enum VTDFaultReason { > > @@ -360,8 +358,7 @@ typedef union VTDInvDesc VTDInvDesc; > > #define VTD_INV_DESC_IOTLB_DOMAIN (2ULL << 4) > > #define VTD_INV_DESC_IOTLB_PAGE (3ULL << 4) > > #define VTD_INV_DESC_IOTLB_DID(val) (((val) >> 16) & > > VTD_DOMAIN_ID_MASK) > > -#define VTD_INV_DESC_IOTLB_ADDR(val) ((val) & ~0xfffULL & \ > > - ((1ULL << VTD_MGAW) - 1)) > > +#define VTD_INV_DESC_IOTLB_ADDR(val) ((val) & ~0xfffULL) > > #define VTD_INV_DESC_IOTLB_AM(val) ((val) & 0x3fULL) > > #define VTD_INV_DESC_IOTLB_RSVD_LO 0xffffffff0000ff00ULL > > #define VTD_INV_DESC_IOTLB_RSVD_HI 0xf80ULL > > diff --git a/include/hw/i386/intel_iommu.h b/include/hw/i386/intel_iommu.h > > index 372b06d..45ec891 100644 > > --- a/include/hw/i386/intel_iommu.h > > +++ b/include/hw/i386/intel_iommu.h > > @@ -304,6 +304,7 @@ struct IntelIOMMUState { > > bool intr_eime; /* Extended interrupt mode enabled */ > > OnOffAuto intr_eim; /* Toggle for EIM cabability */ > > bool buggy_eim; /* Force buggy EIM unless eim=off */ > > + uint8_t aw_bits; /* Host/IOVA address width (in bits) */ > > }; > > Consider it's guest visible, do we need to migrate this ? > > Thanks
I think it's a read-only constant so I guess no. -- MST