mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
hw/uefi-vars: bug fixes
hw/uefi-vars: support riscv and loongarch docs: update firmware.json spec -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEoDKM/7k6F6eZAf59TLbY7tPocTgFAmfdXR0ACgkQTLbY7tPo cThurBAA2xXMSS5HxU+8kAgkQQ5UC0c9cSQj//HJB5dAmsZ/I8WEgwv1+XLGnjf0 SOpAiR0PshTipXdtcUVGpqufAghy+8WkAoYplMqY40o/Bsv8egQzb4XvNPSxqvon dTDmScn2ns1mtSOOY8LWSFIXFDlYK0uKyXcHSKvw/HNjYsVOb22IAokznyh9eZa0 OwjhUc9oqTR0s8MrZbu+tKqEfoqGRMIDYVKk1vzjAigw6jfgvaUZ0dtldcwTktsH w7SyMowUJnNcjnzZxqchj94377feS4OG/QKO7LpnhfdYYHf7CT1BC72xG1Ivloma A3xK/AnFqbzYuwL3Mtmuk5xV5s98dP/dWvxTc7kZFT++fJ4bljnRhcyqckvWwHD5 jYjm8ssAn2ukuVDM+O7+tRNMcyBXYc1pgmQCa10XjT0Ds0WulIynITwoguolvCPv rH/ILe8N2vXa7xxB7DledPMzX74+SWXaHv4n+SKEHoVlSiaP3M85ZNcSYjXf9P37 hrMyUWgjO0AXJ2aDaCSn9nLJT8jRMcYh9HN03Y7KmyT0SZnksbHvPLF0kB1zFNfa NBQZUhZacu7iZoNpHx3uT+D1z9GM16S2skkxvryMrS/05iM6amc2kCJPxOp2vbYc eiyihjFHtW/dfhRmOG92EJ1FRMLx/dB/dBG90oGmTyHMlev6tEQ= =VN7r -----END PGP SIGNATURE----- Merge tag 'uefi-20250321-pull-request' of https://gitlab.com/kraxel/qemu into staging hw/uefi-vars: bug fixes hw/uefi-vars: support riscv and loongarch docs: update firmware.json spec # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCgAdFiEEoDKM/7k6F6eZAf59TLbY7tPocTgFAmfdXR0ACgkQTLbY7tPo # cThurBAA2xXMSS5HxU+8kAgkQQ5UC0c9cSQj//HJB5dAmsZ/I8WEgwv1+XLGnjf0 # SOpAiR0PshTipXdtcUVGpqufAghy+8WkAoYplMqY40o/Bsv8egQzb4XvNPSxqvon # dTDmScn2ns1mtSOOY8LWSFIXFDlYK0uKyXcHSKvw/HNjYsVOb22IAokznyh9eZa0 # OwjhUc9oqTR0s8MrZbu+tKqEfoqGRMIDYVKk1vzjAigw6jfgvaUZ0dtldcwTktsH # w7SyMowUJnNcjnzZxqchj94377feS4OG/QKO7LpnhfdYYHf7CT1BC72xG1Ivloma # A3xK/AnFqbzYuwL3Mtmuk5xV5s98dP/dWvxTc7kZFT++fJ4bljnRhcyqckvWwHD5 # jYjm8ssAn2ukuVDM+O7+tRNMcyBXYc1pgmQCa10XjT0Ds0WulIynITwoguolvCPv # rH/ILe8N2vXa7xxB7DledPMzX74+SWXaHv4n+SKEHoVlSiaP3M85ZNcSYjXf9P37 # hrMyUWgjO0AXJ2aDaCSn9nLJT8jRMcYh9HN03Y7KmyT0SZnksbHvPLF0kB1zFNfa # NBQZUhZacu7iZoNpHx3uT+D1z9GM16S2skkxvryMrS/05iM6amc2kCJPxOp2vbYc # eiyihjFHtW/dfhRmOG92EJ1FRMLx/dB/dBG90oGmTyHMlev6tEQ= # =VN7r # -----END PGP SIGNATURE----- # gpg: Signature made Fri 21 Mar 2025 08:35:41 EDT # gpg: using RSA key A0328CFFB93A17A79901FE7D4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full] # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full] # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full] # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * tag 'uefi-20250321-pull-request' of https://gitlab.com/kraxel/qemu: docs/firmware: add feature flag for host uefi variable store hw/uefi-vars-sysbus: allow for loongarch virt hw/uefi-vars-sysbus: allow for riscv virt hw/uefi: fix error handling in uefi_vars_json_load hw/uefi: fix error handling in uefi_vars_json_save hw/uefi: flush variable store to disk in post load Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
c1fc2dd789
6 changed files with 36 additions and 7 deletions
|
@ -214,13 +214,23 @@
|
|||
# PL011 UART. @verbose-static is mutually exclusive
|
||||
# with @verbose-dynamic.
|
||||
#
|
||||
# @host-uefi-vars: The firmware expects the host to provide an uefi
|
||||
# variable store. qemu supports that via
|
||||
# "uefi-vars-sysbus" (aarch64, riscv64, loongarch64)
|
||||
# or "uefi-vars-x64" (x86_64) devices. The firmware
|
||||
# will not use flash for nvram. When loading the
|
||||
# firmware into flash the 'stateless' setup should be
|
||||
# used. It is recommened to load the firmware into
|
||||
# memory though.
|
||||
#
|
||||
# Since: 3.0
|
||||
##
|
||||
{ 'enum' : 'FirmwareFeature',
|
||||
'data' : [ 'acpi-s3', 'acpi-s4',
|
||||
'amd-sev', 'amd-sev-es', 'amd-sev-snp',
|
||||
'intel-tdx',
|
||||
'enrolled-keys', 'requires-smm', 'secure-boot',
|
||||
'enrolled-keys', 'requires-smm',
|
||||
'secure-boot', 'host-uefi-vars',
|
||||
'verbose-dynamic', 'verbose-static' ] }
|
||||
|
||||
##
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "hw/mem/nvdimm.h"
|
||||
#include "hw/platform-bus.h"
|
||||
#include "hw/display/ramfb.h"
|
||||
#include "hw/uefi/var-service-api.h"
|
||||
#include "hw/mem/pc-dimm.h"
|
||||
#include "system/tpm.h"
|
||||
#include "system/block-backend.h"
|
||||
|
@ -1207,6 +1208,7 @@ static void virt_class_init(ObjectClass *oc, void *data)
|
|||
object_class_property_set_description(oc, "v-eiointc",
|
||||
"Enable Virt Extend I/O Interrupt Controller.");
|
||||
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_RAMFB_DEVICE);
|
||||
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_UEFI_VARS_SYSBUS);
|
||||
#ifdef CONFIG_TPM
|
||||
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_TPM_TIS_SYSBUS);
|
||||
#endif
|
||||
|
|
|
@ -57,6 +57,7 @@
|
|||
#include "hw/acpi/aml-build.h"
|
||||
#include "qapi/qapi-visit-common.h"
|
||||
#include "hw/virtio/virtio-iommu.h"
|
||||
#include "hw/uefi/var-service-api.h"
|
||||
|
||||
/* KVM AIA only supports APLIC MSI. APLIC Wired is always emulated by QEMU. */
|
||||
static bool virt_use_kvm_aia_aplic_imsic(RISCVVirtAIAType aia_type)
|
||||
|
@ -1935,6 +1936,7 @@ static void virt_machine_class_init(ObjectClass *oc, void *data)
|
|||
hc->plug = virt_machine_device_plug_cb;
|
||||
|
||||
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_RAMFB_DEVICE);
|
||||
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_UEFI_VARS_SYSBUS);
|
||||
#ifdef CONFIG_TPM
|
||||
machine_class_allow_dynamic_sysbus_dev(mc, TYPE_TPM_TIS_SYSBUS);
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
config UEFI_VARS
|
||||
bool
|
||||
default y if X86_64 || AARCH64
|
||||
default y if X86_64 || AARCH64 || RISCV64 || LOONGARCH64
|
||||
|
|
|
@ -29,6 +29,7 @@ static int uefi_vars_post_load(void *opaque, int version_id)
|
|||
uefi_vars_state *uv = opaque;
|
||||
|
||||
uefi_vars_update_storage(uv);
|
||||
uefi_vars_json_save(uv);
|
||||
uv->buffer = g_malloc(uv->buf_size);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -178,7 +178,7 @@ void uefi_vars_json_init(uefi_vars_state *uv, Error **errp)
|
|||
|
||||
void uefi_vars_json_save(uefi_vars_state *uv)
|
||||
{
|
||||
GString *gstr;
|
||||
g_autoptr(GString) gstr = NULL;
|
||||
int rc;
|
||||
|
||||
if (uv->jsonfd == -1) {
|
||||
|
@ -187,18 +187,25 @@ void uefi_vars_json_save(uefi_vars_state *uv)
|
|||
|
||||
gstr = uefi_vars_to_json(uv);
|
||||
|
||||
lseek(uv->jsonfd, 0, SEEK_SET);
|
||||
rc = lseek(uv->jsonfd, 0, SEEK_SET);
|
||||
if (rc < 0) {
|
||||
warn_report("%s: lseek error", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
rc = ftruncate(uv->jsonfd, 0);
|
||||
if (rc != 0) {
|
||||
warn_report("%s: ftruncate error", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
rc = write(uv->jsonfd, gstr->str, gstr->len);
|
||||
if (rc != gstr->len) {
|
||||
warn_report("%s: write error", __func__);
|
||||
return;
|
||||
}
|
||||
fsync(uv->jsonfd);
|
||||
|
||||
g_string_free(gstr, true);
|
||||
fsync(uv->jsonfd);
|
||||
}
|
||||
|
||||
void uefi_vars_json_load(uefi_vars_state *uv, Error **errp)
|
||||
|
@ -207,7 +214,7 @@ void uefi_vars_json_load(uefi_vars_state *uv, Error **errp)
|
|||
QObject *qobj;
|
||||
Visitor *v;
|
||||
char *str;
|
||||
size_t len;
|
||||
ssize_t len;
|
||||
int rc;
|
||||
|
||||
if (uv->jsonfd == -1) {
|
||||
|
@ -215,7 +222,12 @@ void uefi_vars_json_load(uefi_vars_state *uv, Error **errp)
|
|||
}
|
||||
|
||||
len = lseek(uv->jsonfd, 0, SEEK_END);
|
||||
if (len < 0) {
|
||||
warn_report("%s: lseek error", __func__);
|
||||
return;
|
||||
}
|
||||
if (len == 0) {
|
||||
/* empty file */
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -224,6 +236,8 @@ void uefi_vars_json_load(uefi_vars_state *uv, Error **errp)
|
|||
rc = read(uv->jsonfd, str, len);
|
||||
if (rc != len) {
|
||||
warn_report("%s: read error", __func__);
|
||||
g_free(str);
|
||||
return;
|
||||
}
|
||||
str[len] = 0;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue