mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-09 13:57:27 +03:00
qemu: Add monitor functions to set IOThread params
Add functions to set the IOThreadInfo param data for the live guest. Modify the _qemuMonitorIOThreadInfo to have a flag to indicate when a value was set so that we don't set a value unless it was desired to be set. Based on code originally posted by Pavel Hrdina <phrdina@redhat.com>, but extracted into a separate patch. Note that qapi expects to receive integer parameters rather than unsigned long long or unsigned int's. QEMU does save the value in larger signed 64 bit values eventually. Signed-off-by: John Ferlan <jferlan@redhat.com> ACKed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
ae69bda5c2
commit
3083bf18da
@ -4135,6 +4135,25 @@ qemuMonitorGetIOThreads(qemuMonitorPtr mon,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* qemuMonitorSetIOThread:
|
||||
* @mon: Pointer to the monitor
|
||||
* @iothreadInfo: filled IOThread info with data
|
||||
*
|
||||
* Alter the specified IOThread's IOThreadInfo values.
|
||||
*/
|
||||
int
|
||||
qemuMonitorSetIOThread(qemuMonitorPtr mon,
|
||||
qemuMonitorIOThreadInfoPtr iothreadInfo)
|
||||
{
|
||||
VIR_DEBUG("iothread=%p", iothreadInfo);
|
||||
|
||||
QEMU_CHECK_MONITOR(mon);
|
||||
|
||||
return qemuMonitorJSONSetIOThread(mon, iothreadInfo);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* qemuMonitorGetMemoryDeviceInfo:
|
||||
* @mon: pointer to the monitor
|
||||
|
@ -1120,9 +1120,14 @@ struct _qemuMonitorIOThreadInfo {
|
||||
unsigned long long poll_max_ns;
|
||||
unsigned int poll_grow;
|
||||
unsigned int poll_shrink;
|
||||
bool set_poll_max_ns;
|
||||
bool set_poll_grow;
|
||||
bool set_poll_shrink;
|
||||
};
|
||||
int qemuMonitorGetIOThreads(qemuMonitorPtr mon,
|
||||
qemuMonitorIOThreadInfoPtr **iothreads);
|
||||
int qemuMonitorSetIOThread(qemuMonitorPtr mon,
|
||||
qemuMonitorIOThreadInfoPtr iothreadInfo);
|
||||
|
||||
typedef struct _qemuMonitorMemoryDeviceInfo qemuMonitorMemoryDeviceInfo;
|
||||
typedef qemuMonitorMemoryDeviceInfo *qemuMonitorMemoryDeviceInfoPtr;
|
||||
|
@ -7474,6 +7474,41 @@ qemuMonitorJSONGetIOThreads(qemuMonitorPtr mon,
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
qemuMonitorJSONSetIOThread(qemuMonitorPtr mon,
|
||||
qemuMonitorIOThreadInfoPtr iothreadInfo)
|
||||
{
|
||||
int ret = -1;
|
||||
char *path = NULL;
|
||||
qemuMonitorJSONObjectProperty prop;
|
||||
|
||||
if (virAsprintf(&path, "/objects/iothread%u",
|
||||
iothreadInfo->iothread_id) < 0)
|
||||
goto cleanup;
|
||||
|
||||
#define VIR_IOTHREAD_SET_PROP(propName, propVal) \
|
||||
if (iothreadInfo->set_##propVal) { \
|
||||
memset(&prop, 0, sizeof(qemuMonitorJSONObjectProperty)); \
|
||||
prop.type = QEMU_MONITOR_OBJECT_PROPERTY_INT; \
|
||||
prop.val.iv = iothreadInfo->propVal; \
|
||||
if (qemuMonitorJSONSetObjectProperty(mon, path, propName, &prop) < 0) \
|
||||
goto cleanup; \
|
||||
}
|
||||
|
||||
VIR_IOTHREAD_SET_PROP("poll-max-ns", poll_max_ns);
|
||||
VIR_IOTHREAD_SET_PROP("poll-grow", poll_grow);
|
||||
VIR_IOTHREAD_SET_PROP("poll-shrink", poll_shrink);
|
||||
|
||||
#undef VIR_IOTHREAD_SET_PROP
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(path);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
qemuMonitorJSONGetMemoryDeviceInfo(qemuMonitorPtr mon,
|
||||
virHashTablePtr info)
|
||||
|
@ -502,6 +502,10 @@ int qemuMonitorJSONGetIOThreads(qemuMonitorPtr mon,
|
||||
qemuMonitorIOThreadInfoPtr **iothreads)
|
||||
ATTRIBUTE_NONNULL(2);
|
||||
|
||||
int qemuMonitorJSONSetIOThread(qemuMonitorPtr mon,
|
||||
qemuMonitorIOThreadInfoPtr iothreadInfo)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
|
||||
|
||||
int qemuMonitorJSONGetMemoryDeviceInfo(qemuMonitorPtr mon,
|
||||
virHashTablePtr info)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
|
||||
|
Loading…
x
Reference in New Issue
Block a user