hv: vtd: a minor refine about dmar_wait_completion

Check whether condition is met before check whether time is out after iommu_read32.
This is because iommu_read32 would cause time out on some virtual platform in
spite of the current DMAR status meets the pre_condition.

Tracked-On: #6371
Signed-off-by: Fei Li <fei1.li@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
Fei Li 2021-08-03 11:23:57 +08:00 committed by wenlingz
parent 8ef2eedba4
commit 84235bf07c
1 changed files with 2 additions and 3 deletions

View File

@ -251,10 +251,9 @@ static inline void dmar_wait_completion(const struct dmar_drhd_rt *dmar_unit, ui
__unused uint64_t start = cpu_ticks();
do {
*status = iommu_read32(dmar_unit, offset);
ASSERT(((cpu_ticks() - start) < TICKS_PER_MS),
"DMAR OP Timeout!");
ASSERT(((cpu_ticks() - start) < TICKS_PER_MS), "DMAR OP Timeout!");
asm_pause();
*status = iommu_read32(dmar_unit, offset);
} while( (*status & mask) == pre_condition);
}