mirror of
https://github.com/qemu/qemu.git
synced 2024-12-11 12:43:55 +08:00
intel-iommu: update iq_dw during post load
We need to update iq_dw according to the DMA_IRQ_REG during post
load. Otherwise we may get wrong IOTLB invalidation descriptor after
migration.
Fixes: fb43cf739e
("intel_iommu: scalable mode emulation")
Signed-off-by: Jason Wang <jasowang@redhat.com>
Message-Id: <20220317080522.14621-2-jasowang@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
parent
ceb058955a
commit
147a372e75
@ -181,6 +181,18 @@ static void vtd_update_scalable_state(IntelIOMMUState *s)
|
||||
}
|
||||
}
|
||||
|
||||
static void vtd_update_iq_dw(IntelIOMMUState *s)
|
||||
{
|
||||
uint64_t val = vtd_get_quad_raw(s, DMAR_IQA_REG);
|
||||
|
||||
if (s->ecap & VTD_ECAP_SMTS &&
|
||||
val & VTD_IQA_DW_MASK) {
|
||||
s->iq_dw = true;
|
||||
} else {
|
||||
s->iq_dw = false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Whether the address space needs to notify new mappings */
|
||||
static inline gboolean vtd_as_has_map_notifier(VTDAddressSpace *as)
|
||||
{
|
||||
@ -2904,12 +2916,7 @@ static void vtd_mem_write(void *opaque, hwaddr addr,
|
||||
} else {
|
||||
vtd_set_quad(s, addr, val);
|
||||
}
|
||||
if (s->ecap & VTD_ECAP_SMTS &&
|
||||
val & VTD_IQA_DW_MASK) {
|
||||
s->iq_dw = true;
|
||||
} else {
|
||||
s->iq_dw = false;
|
||||
}
|
||||
vtd_update_iq_dw(s);
|
||||
break;
|
||||
|
||||
case DMAR_IQA_REG_HI:
|
||||
@ -3082,6 +3089,8 @@ static int vtd_post_load(void *opaque, int version_id)
|
||||
*/
|
||||
vtd_update_scalable_state(iommu);
|
||||
|
||||
vtd_update_iq_dw(iommu);
|
||||
|
||||
/*
|
||||
* Memory regions are dynamically turned on/off depending on
|
||||
* context entry configurations from the guest. After migration,
|
||||
|
Loading…
Reference in New Issue
Block a user