73 lines
3.0 KiB
Diff
73 lines
3.0 KiB
Diff
From 40d97d335471a77b1491c124d2c109db68bf8ca6 Mon Sep 17 00:00:00 2001
|
|
From: Paolo Bonzini <pbonzini@redhat.com>
|
|
Date: Mon, 17 Feb 2025 13:08:12 +0100
|
|
Subject: [PATCH 020/115] physmem: replace assertion with error
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
RH-Author: Paolo Bonzini <pbonzini@redhat.com>
|
|
RH-MergeRequest: 391: TDX support, including attestation and device assignment
|
|
RH-Jira: RHEL-15710 RHEL-20798 RHEL-49728
|
|
RH-Acked-by: Yash Mankad <None>
|
|
RH-Acked-by: Peter Xu <peterx@redhat.com>
|
|
RH-Acked-by: David Hildenbrand <david@redhat.com>
|
|
RH-Commit: [20/115] 5c17949c668857760ee80279e5776e8dcf4c7c11 (bonzini/rhel-qemu-kvm)
|
|
|
|
It is possible to start QEMU with a confidential-guest-support object
|
|
even in TCG mode. While there is already a check in qemu_machine_creation_done:
|
|
|
|
if (machine->cgs && !machine->cgs->ready) {
|
|
error_setg(errp, "accelerator does not support confidential guest %s",
|
|
object_get_typename(OBJECT(machine->cgs)));
|
|
exit(1);
|
|
}
|
|
|
|
the creation of RAMBlocks happens earlier, in qemu_init_board(), if
|
|
the command line does not override the default memory backend with
|
|
-M memdev. Then the RAMBlock will try to use guest_memfd (because
|
|
machine_require_guest_memfd correctly returns true; at least correctly
|
|
according to the current implementation) and trigger the assertion
|
|
failure for kvm_enabled(). This happend with a command line as
|
|
simple as the following:
|
|
|
|
qemu-system-x86_64 -m 512 -nographic -object sev-snp-guest,reduced-phys-bits=48,id=sev0 \
|
|
-M q35,kernel-irqchip=split,confidential-guest-support=sev0
|
|
qemu-system-x86_64: ../system/physmem.c:1871: ram_block_add: Assertion `kvm_enabled()' failed.
|
|
|
|
Cc: Xiaoyao Li <xiaoyao.li@intel.com>
|
|
Cc: qemu-stable@nongnu.org
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
|
Reviewed-by: David Hildenbrand <david@redhat.com>
|
|
Reviewed-by: Pankaj Gupta <pankaj.gupta@amd.com>
|
|
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
|
|
Link: https://lore.kernel.org/r/20250217120812.396522-1-pbonzini@redhat.com
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
(cherry picked from commit 6debfb2cb1795427d2dc6a741c7430a233c76695)
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
---
|
|
system/physmem.c | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/system/physmem.c b/system/physmem.c
|
|
index 94600a33ec..dccc95030b 100644
|
|
--- a/system/physmem.c
|
|
+++ b/system/physmem.c
|
|
@@ -1882,7 +1882,11 @@ static void ram_block_add(RAMBlock *new_block, Error **errp)
|
|
if (new_block->flags & RAM_GUEST_MEMFD) {
|
|
int ret;
|
|
|
|
- assert(kvm_enabled());
|
|
+ if (!kvm_enabled()) {
|
|
+ error_setg(errp, "cannot set up private guest memory for %s: KVM required",
|
|
+ object_get_typename(OBJECT(current_machine->cgs)));
|
|
+ goto out_free;
|
|
+ }
|
|
assert(new_block->guest_memfd < 0);
|
|
|
|
ret = ram_block_discard_require(true);
|
|
--
|
|
2.50.1
|
|
|