|
@@ -23,6 +23,7 @@
|
|
|
*/
|
|
|
|
|
|
#include "qemu/osdep.h"
|
|
|
+#include "qemu/pmem.h"
|
|
|
#include "qapi/error.h"
|
|
|
#include "qapi/visitor.h"
|
|
|
#include "hw/mem/nvdimm.h"
|
|
@@ -164,11 +165,17 @@ static void nvdimm_write_label_data(NVDIMMDevice *nvdimm, const void *buf,
|
|
|
{
|
|
|
MemoryRegion *mr;
|
|
|
PCDIMMDevice *dimm = PC_DIMM(nvdimm);
|
|
|
+ bool is_pmem = object_property_get_bool(OBJECT(dimm->hostmem),
|
|
|
+ "pmem", NULL);
|
|
|
uint64_t backend_offset;
|
|
|
|
|
|
nvdimm_validate_rw_label_data(nvdimm, size, offset);
|
|
|
|
|
|
- memcpy(nvdimm->label_data + offset, buf, size);
|
|
|
+ if (!is_pmem) {
|
|
|
+ memcpy(nvdimm->label_data + offset, buf, size);
|
|
|
+ } else {
|
|
|
+ pmem_memcpy_persist(nvdimm->label_data + offset, buf, size);
|
|
|
+ }
|
|
|
|
|
|
mr = host_memory_backend_get_memory(dimm->hostmem);
|
|
|
backend_offset = memory_region_size(mr) - nvdimm->label_size + offset;
|