}
qemuDomainObjEnterMonitor(driver, vm);
- r = qemuMonitorSetMemoryStatsPeriod(priv->mon, period);
+ r = qemuMonitorSetMemoryStatsPeriod(priv->mon, def->memballoon, period);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto endjob;
if (r < 0) {
if (vm->def->memballoon &&
vm->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO) {
qemuDomainObjEnterMonitor(driver, vm);
- ret = qemuMonitorGetMemoryStats(qemuDomainGetMonitor(vm), stats, nr_stats);
+ ret = qemuMonitorGetMemoryStats(qemuDomainGetMonitor(vm),
+ vm->def->memballoon, stats, nr_stats);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
ret = -1;
* This feature was added to QEMU 1.5.
*/
static void
-qemuMonitorInitBalloonObjectPath(qemuMonitorPtr mon)
+qemuMonitorInitBalloonObjectPath(qemuMonitorPtr mon,
+ virDomainMemballoonDefPtr balloon)
{
ssize_t i, nprops = 0;
- int flp_ret = 0;
char *path = NULL;
+ const char *name;
qemuMonitorJSONListPathPtr *bprops = NULL;
if (mon->balloonpath) {
}
mon->ballooninit = true;
- flp_ret = qemuMonitorJSONFindLinkPath(mon, "virtio-balloon-pci", NULL, &path);
- if (flp_ret == -2) {
- /* pci object was not found retry search for ccw object */
- if (qemuMonitorJSONFindLinkPath(mon, "virtio-balloon-ccw",
- NULL, &path) < 0)
- return;
- } else if (flp_ret < 0) {
+ switch (balloon->info.type) {
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI:
+ name = "virtio-balloon-pci";
+ break;
+ case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW:
+ name = "virtio-balloon-ccw";
+ break;
+ default:
return;
}
+ if (qemuMonitorJSONFindLinkPath(mon, name, balloon->info.alias, &path) < 0)
+ return;
+
nprops = qemuMonitorJSONGetObjectListPaths(mon, path, &bprops);
if (nprops < 0)
goto cleanup;
int
qemuMonitorGetMemoryStats(qemuMonitorPtr mon,
+ virDomainMemballoonDefPtr balloon,
virDomainMemoryStatPtr stats,
unsigned int nr_stats)
{
QEMU_CHECK_MONITOR(mon);
if (mon->json) {
- qemuMonitorInitBalloonObjectPath(mon);
+ qemuMonitorInitBalloonObjectPath(mon, balloon);
return qemuMonitorJSONGetMemoryStats(mon, mon->balloonpath,
stats, nr_stats);
} else {
*/
int
qemuMonitorSetMemoryStatsPeriod(qemuMonitorPtr mon,
+ virDomainMemballoonDefPtr balloon,
int period)
{
int ret = -1;
if (period < 0)
return -1;
- qemuMonitorInitBalloonObjectPath(mon);
+ qemuMonitorInitBalloonObjectPath(mon, balloon);
if (mon->balloonpath) {
ret = qemuMonitorJSONSetMemoryStatsPeriod(mon, mon->balloonpath,
period);
int qemuMonitorGetBalloonInfo(qemuMonitorPtr mon,
unsigned long long *currmem);
int qemuMonitorGetMemoryStats(qemuMonitorPtr mon,
+ virDomainMemballoonDefPtr balloon,
virDomainMemoryStatPtr stats,
unsigned int nr_stats);
int qemuMonitorSetMemoryStatsPeriod(qemuMonitorPtr mon,
+ virDomainMemballoonDefPtr balloon,
int period);
int qemuMonitorBlockIOStatusToError(const char *status);
{
unsigned long long balloon = vm->def->mem.cur_balloon;
qemuDomainObjPrivatePtr priv = vm->privateData;
- int period;
int ret = -1;
if (!virDomainDefHasMemballoon(vm->def))
return 0;
- period = vm->def->memballoon->period;
-
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
goto cleanup;
- if (period)
- qemuMonitorSetMemoryStatsPeriod(priv->mon, period);
+ if (vm->def->memballoon->period)
+ qemuMonitorSetMemoryStatsPeriod(priv->mon, vm->def->memballoon,
+ vm->def->memballoon->period);
if (qemuMonitorSetBalloon(priv->mon, balloon) < 0)
goto cleanup;
vm->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO &&
vm->def->memballoon->period) {
qemuDomainObjEnterMonitor(driver, vm);
- qemuMonitorSetMemoryStatsPeriod(priv->mon,
+ qemuMonitorSetMemoryStatsPeriod(priv->mon, vm->def->memballoon,
vm->def->memballoon->period);
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto error;