]> git.proxmox.com Git - mirror_qemu.git/commitdiff
hw/arm/smmuv3: Pass the actual perm to returned IOMMUTLBEntry in smmuv3_translate()
authorXiang Chen <chenxiang66@hisilicon.com>
Sat, 16 Apr 2022 07:38:15 +0000 (15:38 +0800)
committerPeter Maydell <peter.maydell@linaro.org>
Fri, 22 Apr 2022 13:44:55 +0000 (14:44 +0100)
It always calls the IOMMU MR translate() callback with flag=IOMMU_NONE in
memory_region_iommu_replay(). Currently, smmuv3_translate() return an
IOMMUTLBEntry with perm set to IOMMU_NONE even if the translation success,
whereas it is expected to return the actual permission set in the table
entry.
So pass the actual perm to returned IOMMUTLBEntry in the table entry.

Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Message-id: 1650094695-121918-1-git-send-email-chenxiang66@hisilicon.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
hw/arm/smmuv3.c

index 674623aabea5b3aebd06d507d9e9e1846d308bc2..707eb430c23e9d5b78feeae7f4c5ce7b388f0b08 100644 (file)
@@ -760,7 +760,7 @@ epilogue:
     qemu_mutex_unlock(&s->mutex);
     switch (status) {
     case SMMU_TRANS_SUCCESS:
-        entry.perm = flag;
+        entry.perm = cached_entry->entry.perm;
         entry.translated_addr = cached_entry->entry.translated_addr +
                                     (addr & cached_entry->entry.addr_mask);
         entry.addr_mask = cached_entry->entry.addr_mask;