• S
    hw/i386: fix nvdimm check error path · 7f3cf2d6
    Stefan Hajnoczi 提交于
    Commit e987c37a ("hw/i386: check if
    nvdimm is enabled before plugging") introduced a check to reject nvdimm
    hotplug if -machine pc,nvdimm=on was not given.
    
    This check executes after pc_dimm_memory_plug() has already completed
    and does not reverse the effect of this function in the case of failure.
    
    Perform the check before calling pc_dimm_memory_plug().  This fixes the
    following abort:
    
      $ qemu -M accel=kvm -m 1G,slots=4,maxmem=8G \
             -object memory-backend-file,id=mem1,share=on,mem-path=nvdimm.dat,size=1G
      (qemu) device_add nvdimm,memdev=mem1
      nvdimm is not enabled: missing 'nvdimm' in '-M'
      (qemu) device_add nvdimm,memdev=mem1
      Core dumped
    
    The backtrace is:
    
      #0  0x00007fffdb5b191f in raise () at /lib64/libc.so.6
      #1  0x00007fffdb5b351a in abort () at /lib64/libc.so.6
      #2  0x00007fffdb5a9da7 in __assert_fail_base () at /lib64/libc.so.6
      #3  0x00007fffdb5a9e52 in  () at /lib64/libc.so.6
      #4  0x000055555577a5fa in qemu_ram_set_idstr (new_block=0x555556747a00, name=<optimized out>, dev=dev@entry=0x555556705590) at qemu/exec.c:1709
      #5  0x0000555555a0fe86 in vmstate_register_ram (mr=mr@entry=0x55555673a0e0, dev=dev@entry=0x555556705590) at migration/savevm.c:2293
      #6  0x0000555555965088 in pc_dimm_memory_plug (dev=dev@entry=0x555556705590, hpms=hpms@entry=0x5555566bb0e0, mr=mr@entry=0x555556705630, align=<optimized out>, errp=errp@entry=0x7fffffffc660)
          at hw/mem/pc-dimm.c:110
      #7  0x000055555581d89b in pc_dimm_plug (errp=0x7fffffffc6c0, dev=0x555556705590, hotplug_dev=<optimized out>) at qemu/hw/i386/pc.c:1713
      #8  0x000055555581d89b in pc_machine_device_plug_cb (hotplug_dev=<optimized out>, dev=0x555556705590, errp=0x7fffffffc6c0) at qemu/hw/i386/pc.c:2004
      #9  0x0000555555914da6 in device_set_realized (obj=<optimized out>, value=<optimized out>, errp=0x7fffffffc7e8) at hw/core/qdev.c:926
    
    Cc: Haozhong Zhang <haozhong.zhang@intel.com>
    Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
    Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
    Reviewed-by: NEduardo Habkost <ehabkost@redhat.com>
    Reviewed-by: NHaozhong Zhang <haozhong.zhang@intel.com>
    Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
    Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
    7f3cf2d6
pc.c 72.7 KB