mirror of https://github.com/xemu-project/xemu.git
hw/cxl: Check for multiple mappings of memory backends.
Similar protection to that provided for -numa memdev=x to make sure that memory used to back a type3 device is not also mapped as normal RAM, or for multiple type3 devices. This is an easy footgun to remove and seems multiple people have run into it. Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Message-Id: <20240705113956.941732-4-Jonathan.Cameron@huawei.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
b7dbfe4f47
commit
9de2049c95
|
@ -737,6 +737,11 @@ static bool cxl_setup_memory(CXLType3Dev *ct3d, Error **errp)
|
||||||
error_setg(errp, "volatile memdev must have backing device");
|
error_setg(errp, "volatile memdev must have backing device");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (host_memory_backend_is_mapped(ct3d->hostvmem)) {
|
||||||
|
error_setg(errp, "memory backend %s can't be used multiple times.",
|
||||||
|
object_get_canonical_path_component(OBJECT(ct3d->hostvmem)));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
memory_region_set_nonvolatile(vmr, false);
|
memory_region_set_nonvolatile(vmr, false);
|
||||||
memory_region_set_enabled(vmr, true);
|
memory_region_set_enabled(vmr, true);
|
||||||
host_memory_backend_set_mapped(ct3d->hostvmem, true);
|
host_memory_backend_set_mapped(ct3d->hostvmem, true);
|
||||||
|
@ -760,6 +765,11 @@ static bool cxl_setup_memory(CXLType3Dev *ct3d, Error **errp)
|
||||||
error_setg(errp, "persistent memdev must have backing device");
|
error_setg(errp, "persistent memdev must have backing device");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (host_memory_backend_is_mapped(ct3d->hostpmem)) {
|
||||||
|
error_setg(errp, "memory backend %s can't be used multiple times.",
|
||||||
|
object_get_canonical_path_component(OBJECT(ct3d->hostpmem)));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
memory_region_set_nonvolatile(pmr, true);
|
memory_region_set_nonvolatile(pmr, true);
|
||||||
memory_region_set_enabled(pmr, true);
|
memory_region_set_enabled(pmr, true);
|
||||||
host_memory_backend_set_mapped(ct3d->hostpmem, true);
|
host_memory_backend_set_mapped(ct3d->hostpmem, true);
|
||||||
|
@ -790,6 +800,11 @@ static bool cxl_setup_memory(CXLType3Dev *ct3d, Error **errp)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (host_memory_backend_is_mapped(ct3d->dc.host_dc)) {
|
||||||
|
error_setg(errp, "memory backend %s can't be used multiple times.",
|
||||||
|
object_get_canonical_path_component(OBJECT(ct3d->dc.host_dc)));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* Set DC regions as volatile for now, non-volatile support can
|
* Set DC regions as volatile for now, non-volatile support can
|
||||||
* be added in the future if needed.
|
* be added in the future if needed.
|
||||||
|
|
Loading…
Reference in New Issue