- vdpa-dev: Fix initialisation order to restore VDUSE compatibility - tcg: Allow top bit of SIMD_DATA_BITS to be set in simd_desc() - migration: fix-possible-int-overflow - target/m68k: Map FPU exceptions to FPSR register - qemu-options: Fix CXL Fixed Memory Window interleave-granularity typo - hvf: arm: Fix encodings for ID_AA64PFR1_EL1 and debug System registers - hw/intc/arm_gic: Fix handling of NS view of GICC_APR<n> - qio: Inherit follow_coroutine_ctx across TLS - target/riscv: Fix the element agnostic function problem - accel/tcg: Fix typo causing tb->page_addr[1] to not be recorded - tcg/loongarch64: Fix tcg_out_movi vs some pcrel pointers - migration: Fix file migration with fdset - ui/vnc: don't return an empty SASL mechlist to the client - target/arm: Fix FJCVTZS vs flush-to-zero - hw/ppc/e500: Prefer QOM cast - sphinx/qapidoc: Fix to generate doc for explicit, unboxed arguments - hw/ppc/e500: Remove unused "irqs" parameter - hw/ppc/e500: Add missing device tree properties to i2c controller node - hw/i386/amd_iommu: Don't leak memory in amdvi_update_iotlb() - hw/arm/mps2-tz.c: fix RX/TX interrupts order - target/i386: csv: Add support to migrate the incoming context for CSV3 guest - target/i386: csv: Add support to migrate the outgoing context for CSV3 guest - target/i386: csv: Add support to migrate the incoming page for CSV3 guest - target/i386: csv: Add support to migrate the outgoing page for CSV3 guest - linux-headers: update kernel headers to include CSV3 migration cmds - vfio: Only map shared region for CSV3 virtual machine - vga: Force full update for CSV3 guest - target/i386: csv: Load initial image to private memory for CSV3 guest - target/i386: csv: Do not register/unregister guest secure memory for CSV3 guest - target/i386: cpu: Populate CPUID 0x8000_001F when CSV3 is active - target/i386: csv: Add command to load vmcb to CSV3 guest memory - target/i386: csv: Add command to load data to CSV3 guest memory - target/i386: csv: Add command to initialize CSV3 context - target/i386: csv: Add CSV3 context - next-kbd: convert to use qemu_input_handler_register() - qemu/bswap: Undefine CPU_CONVERT() once done - exec/memop: Remove unused memop_big_endian() helper - hw/nvme: fix handling of over-committed queues - 9pfs: fix crash on 'Treaddir' request - hw/misc/psp: Pin the hugepage memory specified by mem2 during use for psp - hw/misc: support tkm use mem2 memory - hw/i386: add mem2 option for qemu - kvm: add support for guest physical bits - target/i386: add guest-phys-bits cpu property Signed-off-by: Jiabo Feng <fengjiabo1@huawei.com> (cherry picked from commit f45f35e88509a4ffa9f62332ee9601e9fe1f8d09)
130 lines
3.7 KiB
Diff
130 lines
3.7 KiB
Diff
From b791d13a0630e6640b3c39dc90671a2150734a24 Mon Sep 17 00:00:00 2001
|
|
From: Xin Jiang <jiangxin@hygon.cn>
|
|
Date: Thu, 13 Jul 2023 09:35:10 +0800
|
|
Subject: [PATCH] vga: Force full update for CSV3 guest
|
|
|
|
As CSV3's NPT(nested page table) is managed by firmware, VMM is hard
|
|
to track the dirty pages of vga buffer. Although VMM could perform
|
|
a command to firmware to update read/write attribute of vga buffer
|
|
in NPT, it costs more time due to communication between VMM and
|
|
firmware. So the simplest method is to fully update vga buffer
|
|
always.
|
|
|
|
Signed-off-by: Xin Jiang <jiangxin@hygon.cn>
|
|
Signed-off-by: hanliyang <hanliyang@hygon.cn>
|
|
---
|
|
accel/kvm/kvm-all.c | 1 +
|
|
accel/stubs/kvm-stub.c | 2 ++
|
|
hw/display/vga.c | 7 +++++++
|
|
include/sysemu/kvm.h | 8 ++++++++
|
|
target/i386/csv.c | 3 +++
|
|
5 files changed, 21 insertions(+)
|
|
|
|
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
|
|
index 8077630825..8028caddf9 100644
|
|
--- a/accel/kvm/kvm-all.c
|
|
+++ b/accel/kvm/kvm-all.c
|
|
@@ -103,6 +103,7 @@ bool kvm_allowed;
|
|
bool kvm_readonly_mem_allowed;
|
|
bool kvm_vm_attributes_allowed;
|
|
bool kvm_msi_use_devid;
|
|
+bool kvm_csv3_allowed;
|
|
bool kvm_has_guest_debug;
|
|
static int kvm_sstep_flags;
|
|
static bool kvm_immediate_exit;
|
|
diff --git a/accel/stubs/kvm-stub.c b/accel/stubs/kvm-stub.c
|
|
index ad39a434c4..b071afee45 100644
|
|
--- a/accel/stubs/kvm-stub.c
|
|
+++ b/accel/stubs/kvm-stub.c
|
|
@@ -27,6 +27,8 @@ bool kvm_msi_use_devid;
|
|
|
|
bool virtcca_cvm_allowed;
|
|
|
|
+bool kvm_csv3_allowed;
|
|
+
|
|
void kvm_flush_coalesced_mmio_buffer(void)
|
|
{
|
|
}
|
|
diff --git a/hw/display/vga.c b/hw/display/vga.c
|
|
index cb6b6ee2ca..3f1358676b 100644
|
|
--- a/hw/display/vga.c
|
|
+++ b/hw/display/vga.c
|
|
@@ -39,6 +39,8 @@
|
|
#include "migration/vmstate.h"
|
|
#include "trace.h"
|
|
|
|
+#include "sysemu/kvm.h"
|
|
+
|
|
//#define DEBUG_VGA_MEM
|
|
//#define DEBUG_VGA_REG
|
|
|
|
@@ -1790,6 +1792,11 @@ static void vga_update_display(void *opaque)
|
|
s->cursor_blink_time = qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL);
|
|
full_update = 1;
|
|
}
|
|
+
|
|
+ /* Force to full update in CSV guest. */
|
|
+ if (kvm_csv3_enabled())
|
|
+ full_update = 1;
|
|
+
|
|
switch(graphic_mode) {
|
|
case GMODE_TEXT:
|
|
vga_draw_text(s, full_update);
|
|
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
|
|
index 31af5f0e24..fd8634cc8f 100644
|
|
--- a/include/sysemu/kvm.h
|
|
+++ b/include/sysemu/kvm.h
|
|
@@ -44,6 +44,7 @@ extern bool kvm_gsi_routing_allowed;
|
|
extern bool kvm_gsi_direct_mapping;
|
|
extern bool kvm_readonly_mem_allowed;
|
|
extern bool kvm_msi_use_devid;
|
|
+extern bool kvm_csv3_allowed;
|
|
|
|
#define kvm_enabled() (kvm_allowed)
|
|
#define virtcca_cvm_enabled() (virtcca_cvm_allowed)
|
|
@@ -147,6 +148,12 @@ extern bool kvm_msi_use_devid;
|
|
*/
|
|
#define kvm_msi_devid_required() (kvm_msi_use_devid)
|
|
|
|
+/**
|
|
+ * kvm_csv3_enabled:
|
|
+ * Returns: true if CSV3 feature is used for the VM.
|
|
+ */
|
|
+#define kvm_csv3_enabled() (kvm_csv3_allowed)
|
|
+
|
|
#else
|
|
|
|
#define kvm_enabled() (0)
|
|
@@ -163,6 +170,7 @@ extern bool kvm_msi_use_devid;
|
|
#define kvm_gsi_direct_mapping() (false)
|
|
#define kvm_readonly_mem_enabled() (false)
|
|
#define kvm_msi_devid_required() (false)
|
|
+#define kvm_csv3_enabled() (false)
|
|
|
|
#endif /* CONFIG_KVM_IS_POSSIBLE */
|
|
|
|
diff --git a/target/i386/csv.c b/target/i386/csv.c
|
|
index 12282ba451..65d87de003 100644
|
|
--- a/target/i386/csv.c
|
|
+++ b/target/i386/csv.c
|
|
@@ -14,6 +14,7 @@
|
|
#include "qemu/osdep.h"
|
|
#include "qemu/error-report.h"
|
|
#include "qapi/error.h"
|
|
+#include "sysemu/kvm.h"
|
|
|
|
#include <linux/kvm.h>
|
|
|
|
@@ -60,6 +61,8 @@ csv3_init(uint32_t policy, int fd, void *state, struct sev_ops *ops)
|
|
return -1;
|
|
}
|
|
|
|
+ kvm_csv3_allowed = true;
|
|
+
|
|
csv3_guest.sev_fd = fd;
|
|
csv3_guest.state = state;
|
|
csv3_guest.sev_ioctl = ops->sev_ioctl;
|
|
--
|
|
2.41.0.windows.1
|
|
|