Eric Blake <[email protected]> writes: > On 01/27/2016 11:51 PM, Vladimir Sementsov-Ogievskiy wrote: >> NVDIMM for now is planned to use as a backing store for DAX filesystem >> in the guest and thus this memory is excluded from guest memory >> management and LRUs. >> >> In this case libvirt running QEMU along with configured balloon almost >> immediately inflates balloon and effectively kill the guest as >> qemu counts nvdimm as part of the ram. >> >> Counting dimm devices as part of the ram for ballooning was started from >> commit 463756d03: >> virtio-balloon: Fix balloon not working correctly when hotplug memory >> >> Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]> >> Signed-off-by: Denis V. Lunev <[email protected]> >> CC: Stefan Hajnoczi <[email protected]> >> CC: Xiao Guangrong <[email protected]> >> CC: "Michael S. Tsirkin" <[email protected]> >> CC: Igor Mammedov <[email protected]> >> CC: Eric Blake <[email protected]> >> CC: Markus Armbruster <[email protected]> >> --- > >> @@ -308,7 +309,9 @@ static ram_addr_t get_current_ram_size(void) >> if (value) { >> switch (value->type) { >> case MEMORY_DEVICE_INFO_KIND_DIMM: >> - size += value->u.dimm->size; >> + if (strcmp(value->u.dimm->type, TYPE_NVDIMM)) { > > If you fix 2/3 to use a QAPI enum, then this will be an integer compare > instead of a strcmp().
Another option is to add a flag to the subtypes of TYPE_PC_DIMM, set it for the subtypes that should be counted here, and accumulate the sizes of devices where the flag is set. Requires iterating directly over the devices here (like qmp_pc_dimm_device_list() does under the hood) rather than the MemoryDeviceInfoList returned by qmp_pc_dimm_device_list(),
