65 lines
2.2 KiB
Diff
65 lines
2.2 KiB
Diff
|
|
From b93ac4e4fd07e36b95ce211faefd0c7912b6f62a Mon Sep 17 00:00:00 2001
|
|||
|
|
From: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
|
|||
|
|
Date: Tue, 3 Dec 2024 13:18:06 +0000
|
|||
|
|
Subject: [PATCH] fw_cfg: Don't set callback_opaque NULL in
|
|||
|
|
fw_cfg_modify_bytes_read()
|
|||
|
|
MIME-Version: 1.0
|
|||
|
|
Content-Type: text/plain; charset=UTF-8
|
|||
|
|
Content-Transfer-Encoding: 8bit
|
|||
|
|
|
|||
|
|
On arm/virt platform, Chen Xiang reported a Guest crash while
|
|||
|
|
attempting the below steps,
|
|||
|
|
|
|||
|
|
1. Launch the Guest with nvdimm=on
|
|||
|
|
2. Hot-add a NVDIMM dev
|
|||
|
|
3. Reboot
|
|||
|
|
4. Guest boots fine.
|
|||
|
|
5. Reboot again.
|
|||
|
|
6. Guest boot fails.
|
|||
|
|
|
|||
|
|
QEMU_EFI reports the below error:
|
|||
|
|
ProcessCmdAddPointer: invalid pointer value in "etc/acpi/tables"
|
|||
|
|
OnRootBridgesConnected: InstallAcpiTables: Protocol Error
|
|||
|
|
|
|||
|
|
Debugging shows that on first reboot(after hot adding NVDIMM),
|
|||
|
|
Qemu updates the etc/table-loader len,
|
|||
|
|
|
|||
|
|
qemu_ram_resize()
|
|||
|
|
fw_cfg_modify_file()
|
|||
|
|
fw_cfg_modify_bytes_read()
|
|||
|
|
|
|||
|
|
And in fw_cfg_modify_bytes_read() we set the "callback_opaque" for
|
|||
|
|
the key entry to NULL. Because of this, on the second reboot,
|
|||
|
|
virt_acpi_build_update() is called with a NULL "build_state" and
|
|||
|
|
returns without updating the ACPI tables. This seems to be
|
|||
|
|
upsetting the firmware.
|
|||
|
|
|
|||
|
|
To fix this, don't change the callback_opaque in fw_cfg_modify_bytes_read().
|
|||
|
|
|
|||
|
|
Fixes: bdbb5b1706d165 ("fw_cfg: add fw_cfg_machine_reset function")
|
|||
|
|
Reported-by: chenxiang <chenxiang66@hisilicon.com>
|
|||
|
|
Acked-by: Igor Mammedov <imammedo@redhat.com>
|
|||
|
|
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
|
|||
|
|
Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
|
|||
|
|
Message-ID: <20241203131806.37548-1-shameerali.kolothum.thodi@huawei.com>
|
|||
|
|
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
|
|||
|
|
---
|
|||
|
|
hw/nvram/fw_cfg.c | 1 -
|
|||
|
|
1 file changed, 1 deletion(-)
|
|||
|
|
|
|||
|
|
diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
|
|||
|
|
index 4e4524673a..d32079ebdf 100644
|
|||
|
|
--- a/hw/nvram/fw_cfg.c
|
|||
|
|
+++ b/hw/nvram/fw_cfg.c
|
|||
|
|
@@ -729,7 +729,6 @@ static void *fw_cfg_modify_bytes_read(FWCfgState *s, uint16_t key,
|
|||
|
|
ptr = s->entries[arch][key].data;
|
|||
|
|
s->entries[arch][key].data = data;
|
|||
|
|
s->entries[arch][key].len = len;
|
|||
|
|
- s->entries[arch][key].callback_opaque = NULL;
|
|||
|
|
s->entries[arch][key].allow_write = false;
|
|||
|
|
|
|||
|
|
return ptr;
|
|||
|
|
--
|
|||
|
|
2.41.0.windows.1
|
|||
|
|
|