On Thu, Jan 12, 2017 at 11:18:25AM +0800, Xiao Guangrong wrote:
On 01/11/2017 05:36 PM, Stefan Hajnoczi wrote:
Unlike g_free(), g_array_free() does not accept a NULL pointer argument.
The following error is logged when an nvdimm device is realized:
GLib-CRITICAL **: g_array_free: assertion 'array' failed
Cc: Xiao Guangrong <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
hw/acpi/nvdimm.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
NACK
diff --git a/hw/acpi/nvdimm.c b/hw/acpi/nvdimm.c
index 8e7d6ec..8f0a484 100644
--- a/hw/acpi/nvdimm.c
+++ b/hw/acpi/nvdimm.c
@@ -375,7 +375,9 @@ static void nvdimm_init_fit_buffer(NvdimmFitBuffer *fit_buf)
static void nvdimm_build_fit_buffer(NvdimmFitBuffer *fit_buf)
{
- g_array_free(fit_buf->fit, true);
+ if (fit_buf->fit) {
+ g_array_free(fit_buf->fit, true);
+ }
Er, i do not know why it is NULL as we have init-ed it in
nvdimm_init_fit_buffer:
static void nvdimm_init_fit_buffer(NvdimmFitBuffer *fit_buf)
{
fit_buf->fit = g_array_new(false, true /* clear */, 1);
}
And i can not reproduce it on my box, could you share your command line and the
based commit id?
Good point, it happens when nvdimm_plug() is called but -M pc,nvdimm is
missing from the command-line. This means nvdimm_init_acpi_state() was
not called by pc_init1():
$ x86_64-softmmu/qemu-system-x86_64 \
-enable-kvm \
-m 1G,slots=2,maxmem=16G \
-drive if=virtio,file=test.img,format=raw \
-object memory-backend-file,id=hostmem0,mem-path=mydimm,share=on,size=8G \
-device nvdimm,id=nvdimm0,memdev=hostmem0
Do you want to audit the code to check if anything else misbehaves when
-device nvdimm is used without -M pc,nvdimm?