"pcie-root-port",
"query-cpu-definitions", /* 250 */
+ "block-write-threshold",
);
{ "MIGRATION", QEMU_CAPS_MIGRATION_EVENT },
{ "VSERPORT_CHANGE", QEMU_CAPS_VSERPORT_CHANGE },
{ "DEVICE_TRAY_MOVED", QEMU_CAPS_DEVICE_TRAY_MOVED },
+ { "BLOCK_WRITE_THRESHOLD", QEMU_CAPS_BLOCK_WRITE_THRESHOLD },
};
struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
/* 250 */
QEMU_CAPS_QUERY_CPU_DEFINITIONS, /* qmp query-cpu-definitions */
+ QEMU_CAPS_BLOCK_WRITE_THRESHOLD, /* BLOCK_WRITE_THRESHOLD event */
QEMU_CAPS_LAST /* this must always be the last item */
} virQEMUCapsFlags;
}
+int
+qemuMonitorEmitBlockThreshold(qemuMonitorPtr mon,
+ const char *nodename,
+ unsigned long long threshold,
+ unsigned long long excess)
+{
+ int ret = -1;
+
+ VIR_DEBUG("mon=%p, node-name='%s', threshold='%llu', excess='%llu'",
+ mon, nodename, threshold, excess);
+
+ QEMU_MONITOR_CALLBACK(mon, ret, domainBlockThreshold, mon->vm,
+ nodename, threshold, excess);
+
+ return ret;
+}
+
+
int
qemuMonitorSetCapabilities(qemuMonitorPtr mon)
{
void *opaque);
+typedef int (*qemuMonitorDomainBlockThresholdCallback)(qemuMonitorPtr mon,
+ virDomainObjPtr vm,
+ const char *nodename,
+ unsigned long long threshold,
+ unsigned long long excess,
+ void *opaque);
+
+
typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks;
typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr;
struct _qemuMonitorCallbacks {
qemuMonitorDomainMigrationStatusCallback domainMigrationStatus;
qemuMonitorDomainMigrationPassCallback domainMigrationPass;
qemuMonitorDomainAcpiOstInfoCallback domainAcpiOstInfo;
+ qemuMonitorDomainBlockThresholdCallback domainBlockThreshold;
};
char *qemuMonitorEscapeArg(const char *in);
unsigned int source,
unsigned int status);
+int qemuMonitorEmitBlockThreshold(qemuMonitorPtr mon,
+ const char *nodename,
+ unsigned long long threshold,
+ unsigned long long excess);
+
int qemuMonitorStartCPUs(qemuMonitorPtr mon,
virConnectPtr conn);
int qemuMonitorStopCPUs(qemuMonitorPtr mon);
static void qemuMonitorJSONHandleMigrationStatus(qemuMonitorPtr mon, virJSONValuePtr data);
static void qemuMonitorJSONHandleMigrationPass(qemuMonitorPtr mon, virJSONValuePtr data);
static void qemuMonitorJSONHandleAcpiOstInfo(qemuMonitorPtr mon, virJSONValuePtr data);
+static void qemuMonitorJSONHandleBlockThreshold(qemuMonitorPtr mon, virJSONValuePtr data);
typedef struct {
const char *type;
{ "BLOCK_JOB_CANCELLED", qemuMonitorJSONHandleBlockJobCanceled, },
{ "BLOCK_JOB_COMPLETED", qemuMonitorJSONHandleBlockJobCompleted, },
{ "BLOCK_JOB_READY", qemuMonitorJSONHandleBlockJobReady, },
+ { "BLOCK_WRITE_THRESHOLD", qemuMonitorJSONHandleBlockThreshold, },
{ "DEVICE_DELETED", qemuMonitorJSONHandleDeviceDeleted, },
{ "DEVICE_TRAY_MOVED", qemuMonitorJSONHandleTrayChange, },
{ "GUEST_PANICKED", qemuMonitorJSONHandleGuestPanic, },
}
+static void
+qemuMonitorJSONHandleBlockThreshold(qemuMonitorPtr mon, virJSONValuePtr data)
+{
+ const char *nodename;
+ unsigned long long threshold;
+ unsigned long long excess;
+
+ if (!(nodename = virJSONValueObjectGetString(data, "node-name")))
+ goto error;
+
+ if (virJSONValueObjectGetNumberUlong(data, "write-threshold", &threshold) < 0)
+ goto error;
+
+ if (virJSONValueObjectGetNumberUlong(data, "amount-exceeded", &excess) < 0)
+ goto error;
+
+ qemuMonitorEmitBlockThreshold(mon, nodename, threshold, excess);
+ return;
+
+ error:
+ VIR_WARN("malformed 'BLOCK_WRITE_THRESHOLD' event");
+}
+
+
int
qemuMonitorJSONHumanCommandWithFd(qemuMonitorPtr mon,
const char *cmd_str,
<flag name='vhost-scsi'/>
<flag name='drive-iotune-group'/>
<flag name='query-cpu-definitions'/>
+ <flag name='block-write-threshold'/>
<version>2004000</version>
<kvmVersion>0</kvmVersion>
<package></package>
<flag name='vhost-scsi'/>
<flag name='drive-iotune-group'/>
<flag name='query-cpu-definitions'/>
+ <flag name='block-write-threshold'/>
<version>2005000</version>
<kvmVersion>0</kvmVersion>
<package></package>
<flag name='vhost-scsi'/>
<flag name='drive-iotune-group'/>
<flag name='query-cpu-definitions'/>
+ <flag name='block-write-threshold'/>
<version>2006000</version>
<kvmVersion>0</kvmVersion>
<package></package>
<flag name='vhost-scsi'/>
<flag name='drive-iotune-group'/>
<flag name='query-cpu-definitions'/>
+ <flag name='block-write-threshold'/>
<version>2006000</version>
<kvmVersion>0</kvmVersion>
<package></package>
<flag name='vhost-scsi'/>
<flag name='drive-iotune-group'/>
<flag name='query-cpu-definitions'/>
+ <flag name='block-write-threshold'/>
<version>2006000</version>
<kvmVersion>0</kvmVersion>
<package></package>
<flag name='vhost-scsi'/>
<flag name='drive-iotune-group'/>
<flag name='query-cpu-definitions'/>
+ <flag name='block-write-threshold'/>
<version>2006000</version>
<kvmVersion>0</kvmVersion>
<package></package>
<flag name='vhost-scsi'/>
<flag name='drive-iotune-group'/>
<flag name='query-cpu-definitions'/>
+ <flag name='block-write-threshold'/>
<version>2007000</version>
<kvmVersion>0</kvmVersion>
<package></package>
<flag name='vhost-scsi'/>
<flag name='drive-iotune-group'/>
<flag name='query-cpu-definitions'/>
+ <flag name='block-write-threshold'/>
<version>2007000</version>
<kvmVersion>0</kvmVersion>
<package> (v2.7.0)</package>
<flag name='drive-iotune-group'/>
<flag name='query-cpu-model-expansion'/>
<flag name='query-cpu-definitions'/>
+ <flag name='block-write-threshold'/>
<version>2007093</version>
<kvmVersion>0</kvmVersion>
<package></package>
<flag name='vhost-scsi'/>
<flag name='drive-iotune-group'/>
<flag name='query-cpu-definitions'/>
+ <flag name='block-write-threshold'/>
<version>2008000</version>
<kvmVersion>0</kvmVersion>
<package> (v2.8.0)</package>
<flag name='spice-rendernode'/>
<flag name='pcie-root-port'/>
<flag name='query-cpu-definitions'/>
+ <flag name='block-write-threshold'/>
<version>2008090</version>
<kvmVersion>0</kvmVersion>
<package> (v2.9.0-rc0-142-g940a8ce)</package>