[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin
From: |
FelixCuioc |
Subject: |
[PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin |
Date: |
Fri, 16 Oct 2020 07:29:33 -0400 |
The issue here is that an assinged EHCI device accesses
an adjacent mapping between the delete and add phases
of the VFIO MemoryListener.
We want to skip flatview_simplify() is to prevent EHCI
device IOVA mappings from being unmapped.
Signed-off-by: FelixCuioc <FelixCui-oc@zhaoxin.com>
---
softmmu/memory.c | 20 +++++++++++++++++++-
target/i386/cpu.c | 7 +++++++
target/i386/cpu.h | 3 +++
3 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/softmmu/memory.c b/softmmu/memory.c
index 403ff3abc9..a998018d87 100644
--- a/softmmu/memory.c
+++ b/softmmu/memory.c
@@ -700,6 +700,22 @@ static MemoryRegion
*memory_region_get_flatview_root(MemoryRegion *mr)
return NULL;
}
+static bool skip_simplify(void)
+{
+#ifdef I386_CPU_H
+ char vendor[CPUID_VENDOR_SZ + 1] = { 0 };
+ host_get_vendor(vendor);
+ if (!strncmp(vendor, CPUID_VENDOR_VIA, strlen(CPUID_VENDOR_VIA))
+ || !strncmp(vendor, CPUID_VENDOR_ZHAOXIN,
+ strlen(CPUID_VENDOR_ZHAOXIN))) {
+ return true;
+ }
+ return false;
+#else
+ return false;
+#endif
+}
+
/* Render a memory topology into a list of disjoint absolute ranges. */
static FlatView *generate_memory_topology(MemoryRegion *mr)
{
@@ -713,7 +729,9 @@ static FlatView *generate_memory_topology(MemoryRegion *mr)
addrrange_make(int128_zero(), int128_2_64()),
false, false);
}
- flatview_simplify(view);
+ if (!skip_simplify()) {
+ flatview_simplify(view);
+ }
view->dispatch = address_space_dispatch_new(view);
for (i = 0; i < view->nr; i++) {
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 5d713c8528..6bda35a03e 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -1559,6 +1559,13 @@ void host_cpuid(uint32_t function, uint32_t count,
if (edx)
*edx = vec[3];
}
+void host_get_vendor(char *vendor)
+{
+ uint32_t eax, ebx, ecx, edx;
+
+ host_cpuid(0x0, 0, &eax, &ebx, &ecx, &edx);
+ x86_cpu_vendor_words2str(vendor, ebx, edx, ecx);
+}
void host_vendor_fms(char *vendor, int *family, int *model, int *stepping)
{
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index 51c1d5f60a..e8e26e6a53 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -832,6 +832,8 @@ typedef uint64_t FeatureWordArray[FEATURE_WORDS];
#define CPUID_VENDOR_VIA "CentaurHauls"
+#define CPUID_VENDOR_ZHAOXIN " Shanghai "
+
#define CPUID_VENDOR_HYGON "HygonGenuine"
#define IS_INTEL_CPU(env) ((env)->cpuid_vendor1 == CPUID_VENDOR_INTEL_1 && \
@@ -1918,6 +1920,7 @@ void cpu_clear_apic_feature(CPUX86State *env);
void host_cpuid(uint32_t function, uint32_t count,
uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx);
void host_vendor_fms(char *vendor, int *family, int *model, int *stepping);
+void host_get_vendor(char *vendor);
/* helper.c */
bool x86_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
--
2.17.1
- [PATCH 0/1] Skip flatview_simplify() for cpu vendor zhaoxin, FelixCuioc, 2020/10/16
- [PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin,
FelixCuioc <=
- Re: [PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin, Paolo Bonzini, 2020/10/16
- 答复: [PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin, FelixCui-oc, 2020/10/19
- Re: [PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin, Alex Williamson, 2020/10/19
- Re: [PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin, Paolo Bonzini, 2020/10/20
- Re: [PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin, Alex Williamson, 2020/10/20
- Re: [PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin, Paolo Bonzini, 2020/10/21
- 答复: [PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin, FelixCui-oc, 2020/10/21
- Re: [PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin, Alex Williamson, 2020/10/21
- Re: [PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin, Paolo Bonzini, 2020/10/21
- 答复: [PATCH 1/1] Skip flatview_simplify() for cpu vendor zhaoxin, FelixCui-oc, 2020/10/21