From fcd9a1ca73366aca2b03c060806f361412cc568c Mon Sep 17 00:00:00 2001 From: Binbin Wu Date: Mon, 30 Mar 2020 14:40:58 +0800 Subject: [PATCH] hv: vtd: use local var instead of global var In dmar_issue_qi_request, currently use a global var qi_status, which could cause potential issue when concurrent call to dmar_issue_qi_request for different DMAR units. Use local var instead. Tracked-On: #4535 Signed-off-by: Shiqing Gao Signed-off-by: Binbin Wu Acked-by: Eddie Dong --- hypervisor/arch/x86/vtd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypervisor/arch/x86/vtd.c b/hypervisor/arch/x86/vtd.c index a91dc5884..fd7b0686e 100644 --- a/hypervisor/arch/x86/vtd.c +++ b/hypervisor/arch/x86/vtd.c @@ -194,7 +194,6 @@ bool iommu_snoop_supported(const struct iommu_domain *iommu) static struct dmar_drhd_rt dmar_drhd_units[MAX_DRHDS]; static bool iommu_page_walk_coherent = true; -static uint32_t qi_status = 0U; static struct dmar_info *platform_dmar_info = NULL; /* Domain id 0 is reserved in some cases per VT-d */ @@ -558,6 +557,7 @@ static struct dmar_drhd_rt *device_to_dmaru(uint8_t bus, uint8_t devfun) static void dmar_issue_qi_request(struct dmar_drhd_rt *dmar_unit, struct dmar_entry invalidate_desc) { struct dmar_entry *invalidate_desc_ptr; + uint32_t qi_status = 0U; __unused uint64_t start; invalidate_desc_ptr = (struct dmar_entry *)(dmar_unit->qi_queue + dmar_unit->qi_tail);