- arm/virt: Fix vcpu hotplug idx_from_topo_ids - Revert patches related to the vSVA - sync some bugfix patches from upstream - add generic vDPA device support Signed-off-by: yezengruan <yezengruan@huawei.com> (cherry picked from commit b99dbfd9847104300672fb4f559f1c2abba8aa33)
167 lines
5.9 KiB
Diff
167 lines
5.9 KiB
Diff
From 8cc370faf56aeaa060e1b4d9a307075bae982563 Mon Sep 17 00:00:00 2001
|
|
From: Kunkun Jiang <jiangkunkun@huawei.com>
|
|
Date: Fri, 18 Nov 2022 15:22:57 +0800
|
|
Subject: [PATCH 34/36] Revert "memory: Add new fields in IOTLBEntry"
|
|
|
|
This reverts commit da97cef20d4ee5a8f3942953836b35e7f7dd974f.
|
|
|
|
Signed-off-by: Kunkun Jiang <jiangkunkun@huawei.com>
|
|
---
|
|
hw/arm/smmu-common.c | 2 +-
|
|
hw/arm/smmuv3.c | 2 +-
|
|
hw/i386/intel_iommu.c | 6 +++---
|
|
hw/ppc/spapr_iommu.c | 2 +-
|
|
hw/virtio/virtio-iommu.c | 4 ++--
|
|
include/exec/memory.h | 36 +-----------------------------------
|
|
6 files changed, 9 insertions(+), 43 deletions(-)
|
|
|
|
diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c
|
|
index 730dd20db1..e09b9c13b7 100644
|
|
--- a/hw/arm/smmu-common.c
|
|
+++ b/hw/arm/smmu-common.c
|
|
@@ -471,7 +471,7 @@ IOMMUMemoryRegion *smmu_iommu_mr(SMMUState *s, uint32_t sid)
|
|
/* Unmap the whole notifier's range */
|
|
static void smmu_unmap_notifier_range(IOMMUNotifier *n)
|
|
{
|
|
- IOMMUTLBEvent event = {};
|
|
+ IOMMUTLBEvent event;
|
|
|
|
event.type = IOMMU_NOTIFIER_UNMAP;
|
|
event.entry.target_as = &address_space_memory;
|
|
diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c
|
|
index 0e8fe646aa..3b43368be0 100644
|
|
--- a/hw/arm/smmuv3.c
|
|
+++ b/hw/arm/smmuv3.c
|
|
@@ -806,7 +806,7 @@ static void smmuv3_notify_iova(IOMMUMemoryRegion *mr,
|
|
uint8_t tg, uint64_t num_pages)
|
|
{
|
|
SMMUDevice *sdev = container_of(mr, SMMUDevice, iommu);
|
|
- IOMMUTLBEvent event = {};
|
|
+ IOMMUTLBEvent event;
|
|
uint8_t granule;
|
|
|
|
if (!tg) {
|
|
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
|
|
index 6501d93f7e..5b865ac08c 100644
|
|
--- a/hw/i386/intel_iommu.c
|
|
+++ b/hw/i386/intel_iommu.c
|
|
@@ -1197,7 +1197,7 @@ static int vtd_page_walk_level(dma_addr_t addr, uint64_t start,
|
|
uint32_t offset;
|
|
uint64_t slpte;
|
|
uint64_t subpage_size, subpage_mask;
|
|
- IOMMUTLBEvent event = {};
|
|
+ IOMMUTLBEvent event;
|
|
uint64_t iova = start;
|
|
uint64_t iova_next;
|
|
int ret = 0;
|
|
@@ -2431,7 +2431,7 @@ static bool vtd_process_device_iotlb_desc(IntelIOMMUState *s,
|
|
VTDInvDesc *inv_desc)
|
|
{
|
|
VTDAddressSpace *vtd_dev_as;
|
|
- IOMMUTLBEvent event = {};
|
|
+ IOMMUTLBEvent event;
|
|
struct VTDBus *vtd_bus;
|
|
hwaddr addr;
|
|
uint64_t sz;
|
|
@@ -3487,7 +3487,7 @@ static void vtd_address_space_unmap(VTDAddressSpace *as, IOMMUNotifier *n)
|
|
size = remain = end - start + 1;
|
|
|
|
while (remain >= VTD_PAGE_SIZE) {
|
|
- IOMMUTLBEvent event = {};
|
|
+ IOMMUTLBEvent event;
|
|
uint64_t mask = dma_aligned_pow2_mask(start, end, s->aw_bits);
|
|
uint64_t size = mask + 1;
|
|
|
|
diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c
|
|
index 454df25d44..db01071858 100644
|
|
--- a/hw/ppc/spapr_iommu.c
|
|
+++ b/hw/ppc/spapr_iommu.c
|
|
@@ -449,7 +449,7 @@ static void spapr_tce_reset(DeviceState *dev)
|
|
static target_ulong put_tce_emu(SpaprTceTable *tcet, target_ulong ioba,
|
|
target_ulong tce)
|
|
{
|
|
- IOMMUTLBEvent event = {};
|
|
+ IOMMUTLBEvent event;
|
|
hwaddr page_mask = IOMMU_PAGE_MASK(tcet->page_shift);
|
|
unsigned long index = (ioba - tcet->bus_offset) >> tcet->page_shift;
|
|
|
|
diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c
|
|
index 83ed2b82e6..1b23e8e18c 100644
|
|
--- a/hw/virtio/virtio-iommu.c
|
|
+++ b/hw/virtio/virtio-iommu.c
|
|
@@ -129,7 +129,7 @@ static void virtio_iommu_notify_map(IOMMUMemoryRegion *mr, hwaddr virt_start,
|
|
hwaddr virt_end, hwaddr paddr,
|
|
uint32_t flags)
|
|
{
|
|
- IOMMUTLBEvent event = {};
|
|
+ IOMMUTLBEvent event;
|
|
IOMMUAccessFlags perm = IOMMU_ACCESS_FLAG(flags & VIRTIO_IOMMU_MAP_F_READ,
|
|
flags & VIRTIO_IOMMU_MAP_F_WRITE);
|
|
|
|
@@ -154,7 +154,7 @@ static void virtio_iommu_notify_map(IOMMUMemoryRegion *mr, hwaddr virt_start,
|
|
static void virtio_iommu_notify_unmap(IOMMUMemoryRegion *mr, hwaddr virt_start,
|
|
hwaddr virt_end)
|
|
{
|
|
- IOMMUTLBEvent event = {};
|
|
+ IOMMUTLBEvent event;
|
|
uint64_t delta = virt_end - virt_start;
|
|
|
|
if (!(mr->iommu_notify_flags & IOMMU_NOTIFIER_UNMAP)) {
|
|
diff --git a/include/exec/memory.h b/include/exec/memory.h
|
|
index 273f7f45d3..4b5b431e45 100644
|
|
--- a/include/exec/memory.h
|
|
+++ b/include/exec/memory.h
|
|
@@ -116,48 +116,14 @@ typedef enum {
|
|
IOMMU_RW = 3,
|
|
} IOMMUAccessFlags;
|
|
|
|
-/* Granularity of the cache invalidation */
|
|
-typedef enum {
|
|
- IOMMU_INV_GRAN_ADDR = 0,
|
|
- IOMMU_INV_GRAN_PASID,
|
|
- IOMMU_INV_GRAN_DOMAIN,
|
|
-} IOMMUInvGranularity;
|
|
-
|
|
#define IOMMU_ACCESS_FLAG(r, w) (((r) ? IOMMU_RO : 0) | ((w) ? IOMMU_WO : 0))
|
|
|
|
-/**
|
|
- * struct IOMMUTLBEntry - IOMMU TLB entry
|
|
- *
|
|
- * Structure used when performing a translation or when notifying MAP or
|
|
- * UNMAP (invalidation) events
|
|
- *
|
|
- * @target_as: target address space
|
|
- * @iova: IO virtual address (input)
|
|
- * @translated_addr: translated address (output)
|
|
- * @addr_mask: address mask (0xfff means 4K binding), must be multiple of 2
|
|
- * @perm: permission flag of the mapping (NONE encodes no mapping or
|
|
- * invalidation notification)
|
|
- * @granularity: granularity of the invalidation
|
|
- * @flags: informs whether the following fields are set
|
|
- * @arch_id: architecture specific ID tagging the TLB
|
|
- * @pasid: PASID tagging the TLB
|
|
- * @leaf: when @perm is NONE, indicates whether only caches for the last
|
|
- * level of translation need to be invalidated.
|
|
- */
|
|
struct IOMMUTLBEntry {
|
|
AddressSpace *target_as;
|
|
hwaddr iova;
|
|
hwaddr translated_addr;
|
|
- hwaddr addr_mask;
|
|
+ hwaddr addr_mask; /* 0xfff = 4k translation */
|
|
IOMMUAccessFlags perm;
|
|
- IOMMUInvGranularity granularity;
|
|
-#define IOMMU_INV_FLAGS_PASID (1 << 0)
|
|
-#define IOMMU_INV_FLAGS_ARCHID (1 << 1)
|
|
-#define IOMMU_INV_FLAGS_LEAF (1 << 2)
|
|
- uint32_t flags;
|
|
- uint32_t arch_id;
|
|
- uint32_t pasid;
|
|
- bool leaf;
|
|
};
|
|
|
|
/*
|
|
--
|
|
2.27.0
|
|
|