|
@@ -3372,6 +3372,7 @@ static Property vtd_properties[] = {
|
|
DEFINE_PROP_BOOL("x-pasid-mode", IntelIOMMUState, pasid, false),
|
|
DEFINE_PROP_BOOL("x-pasid-mode", IntelIOMMUState, pasid, false),
|
|
DEFINE_PROP_BOOL("dma-drain", IntelIOMMUState, dma_drain, true),
|
|
DEFINE_PROP_BOOL("dma-drain", IntelIOMMUState, dma_drain, true),
|
|
DEFINE_PROP_BOOL("dma-translation", IntelIOMMUState, dma_translation, true),
|
|
DEFINE_PROP_BOOL("dma-translation", IntelIOMMUState, dma_translation, true),
|
|
|
|
+ DEFINE_PROP_BOOL("stale-tm", IntelIOMMUState, stale_tm, false),
|
|
DEFINE_PROP_END_OF_LIST(),
|
|
DEFINE_PROP_END_OF_LIST(),
|
|
};
|
|
};
|
|
|
|
|
|
@@ -4138,15 +4139,15 @@ static void vtd_init(IntelIOMMUState *s)
|
|
*/
|
|
*/
|
|
vtd_spte_rsvd[0] = ~0ULL;
|
|
vtd_spte_rsvd[0] = ~0ULL;
|
|
vtd_spte_rsvd[1] = VTD_SPTE_PAGE_L1_RSVD_MASK(s->aw_bits,
|
|
vtd_spte_rsvd[1] = VTD_SPTE_PAGE_L1_RSVD_MASK(s->aw_bits,
|
|
- x86_iommu->dt_supported);
|
|
|
|
|
|
+ x86_iommu->dt_supported && s->stale_tm);
|
|
vtd_spte_rsvd[2] = VTD_SPTE_PAGE_L2_RSVD_MASK(s->aw_bits);
|
|
vtd_spte_rsvd[2] = VTD_SPTE_PAGE_L2_RSVD_MASK(s->aw_bits);
|
|
vtd_spte_rsvd[3] = VTD_SPTE_PAGE_L3_RSVD_MASK(s->aw_bits);
|
|
vtd_spte_rsvd[3] = VTD_SPTE_PAGE_L3_RSVD_MASK(s->aw_bits);
|
|
vtd_spte_rsvd[4] = VTD_SPTE_PAGE_L4_RSVD_MASK(s->aw_bits);
|
|
vtd_spte_rsvd[4] = VTD_SPTE_PAGE_L4_RSVD_MASK(s->aw_bits);
|
|
|
|
|
|
vtd_spte_rsvd_large[2] = VTD_SPTE_LPAGE_L2_RSVD_MASK(s->aw_bits,
|
|
vtd_spte_rsvd_large[2] = VTD_SPTE_LPAGE_L2_RSVD_MASK(s->aw_bits,
|
|
- x86_iommu->dt_supported);
|
|
|
|
|
|
+ x86_iommu->dt_supported && s->stale_tm);
|
|
vtd_spte_rsvd_large[3] = VTD_SPTE_LPAGE_L3_RSVD_MASK(s->aw_bits,
|
|
vtd_spte_rsvd_large[3] = VTD_SPTE_LPAGE_L3_RSVD_MASK(s->aw_bits,
|
|
- x86_iommu->dt_supported);
|
|
|
|
|
|
+ x86_iommu->dt_supported && s->stale_tm);
|
|
|
|
|
|
if (s->scalable_mode || s->snoop_control) {
|
|
if (s->scalable_mode || s->snoop_control) {
|
|
vtd_spte_rsvd[1] &= ~VTD_SPTE_SNP;
|
|
vtd_spte_rsvd[1] &= ~VTD_SPTE_SNP;
|