[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 6/9] qmp: add block_job_set_speed command
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PATCH v3 6/9] qmp: add block_job_set_speed command |
Date: |
Tue, 13 Dec 2011 13:52:28 +0000 |
Add block_job_set_speed, which sets the maximum speed for a background
block operation.
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
blockdev.c | 25 +++++++++++++++++++++++++
hmp-commands.hx | 14 ++++++++++++++
hmp.c | 14 ++++++++++++++
hmp.h | 1 +
qapi-schema.json | 23 +++++++++++++++++++++++
qmp-commands.hx | 18 ++++++++++++++++++
6 files changed, 95 insertions(+), 0 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index 08355cf..b101ba1 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -955,3 +955,28 @@ void qmp_block_stream(const char *device, bool has_base,
trace_qmp_block_stream(bs, bs->job);
}
+
+static BlockJob *find_block_job(const char *device)
+{
+ BlockDriverState *bs;
+
+ bs = bdrv_find(device);
+ if (!bs || !bs->job) {
+ return NULL;
+ }
+ return bs->job;
+}
+
+void qmp_block_job_set_speed(const char *device, int64_t value, Error **errp)
+{
+ BlockJob *job = find_block_job(device);
+
+ if (!job) {
+ error_set(errp, QERR_DEVICE_NOT_ACTIVE, device);
+ return;
+ }
+
+ if (block_job_set_speed(job, value) < 0) {
+ error_set(errp, QERR_NOT_SUPPORTED);
+ }
+}
diff --git a/hmp-commands.hx b/hmp-commands.hx
index c0de41c..788ec97 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -85,6 +85,20 @@ Copy data from a backing file into a block device.
ETEXI
{
+ .name = "block_job_set_speed",
+ .args_type = "device:B,value:o",
+ .params = "device value",
+ .help = "set maximum speed for a background block operation",
+ .mhandler.cmd = hmp_block_job_set_speed,
+ },
+
+STEXI
address@hidden block_job_set_stream
address@hidden block_job_set_stream
+Set maximum speed for a background block operation.
+ETEXI
+
+ {
.name = "eject",
.args_type = "force:-f,device:B",
.params = "[-f] device",
diff --git a/hmp.c b/hmp.c
index 8b7d7d4..f3edf7c 100644
--- a/hmp.c
+++ b/hmp.c
@@ -545,3 +545,17 @@ void hmp_block_stream(Monitor *mon, const QDict *qdict)
error_free(error);
}
}
+
+void hmp_block_job_set_speed(Monitor *mon, const QDict *qdict)
+{
+ Error *error = NULL;
+ const char *device = qdict_get_str(qdict, "device");
+ int64_t value = qdict_get_int(qdict, "value");
+
+ qmp_block_job_set_speed(device, value, &error);
+
+ if (error) {
+ monitor_printf(mon, "%s\n", error_get_pretty(error));
+ error_free(error);
+ }
+}
diff --git a/hmp.h b/hmp.h
index 3cb6fe5..4c1458e 100644
--- a/hmp.h
+++ b/hmp.h
@@ -38,5 +38,6 @@ void hmp_system_reset(Monitor *mon, const QDict *qdict);
void hmp_system_powerdown(Monitor *mon, const QDict *qdict);
void hmp_cpu(Monitor *mon, const QDict *qdict);
void hmp_block_stream(Monitor *mon, const QDict *qdict);
+void hmp_block_job_set_speed(Monitor *mon, const QDict *qdict);
#endif
diff --git a/qapi-schema.json b/qapi-schema.json
index 65308d2..f6a8252 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -954,3 +954,26 @@
# Since: 1.1
##
{ 'command': 'block_stream', 'data': { 'device': 'str', '*base': 'str' } }
+
+##
+# @block_job_set_speed:
+#
+# Set maximum speed for a background block operation.
+#
+# This command can only be issued when there is an active block job.
+#
+# Throttling can be disabled by setting the speed to 0.
+#
+# Arguments:
+#
+# - device: device name
+# - value: maximum speed, in bytes per second
+#
+# Errors:
+# NotSupported: job type does not support speed setting
+# DeviceNotActive: streaming is not active on this device
+#
+# Since: 1.1
+##
+{ 'command': 'block_job_set_speed',
+ 'data': { 'device': 'str', 'value': 'int' } }
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 8c1c934..5541ca0 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -701,6 +701,24 @@ Examples:
EQMP
{
+ .name = "block_job_set_speed",
+ .args_type = "device:B,value:o",
+ .mhandler.cmd_new = qmp_marshal_input_block_job_set_speed,
+ },
+
+SQMP
+block_job_set_speed
+-------------------
+See qapi-schema.json for documentation.
+
+Example:
+
+-> { "execute": "block_job_set_speed",
+ "arguments": { "device": "virtio0", "value": 1024 } }
+
+EQMP
+
+ {
.name = "blockdev-snapshot-sync",
.args_type = "device:B,snapshot-file:s?,format:s?",
.params = "device [new-image-file] [format]",
--
1.7.7.3
- [Qemu-devel] [PATCH v3 8/9] qmp: add query-block-jobs, (continued)
- [Qemu-devel] [PATCH v3 8/9] qmp: add query-block-jobs, Stefan Hajnoczi, 2011/12/13
- Re: [Qemu-devel] [PATCH v3 8/9] qmp: add query-block-jobs, Kevin Wolf, 2011/12/14
- Re: [Qemu-devel] [PATCH v3 8/9] qmp: add query-block-jobs, Stefan Hajnoczi, 2011/12/15
- Re: [Qemu-devel] [PATCH v3 8/9] qmp: add query-block-jobs, Kevin Wolf, 2011/12/15
- Re: [Qemu-devel] [PATCH v3 8/9] qmp: add query-block-jobs, Luiz Capitulino, 2011/12/15
- Re: [Qemu-devel] [PATCH v3 8/9] qmp: add query-block-jobs, Stefan Hajnoczi, 2011/12/15
- Re: [Qemu-devel] [PATCH v3 8/9] qmp: add query-block-jobs, Luiz Capitulino, 2011/12/15
- Re: [Qemu-devel] [PATCH v3 8/9] qmp: add query-block-jobs, Kevin Wolf, 2011/12/15
- Re: [Qemu-devel] [PATCH v3 8/9] qmp: add query-block-jobs, Stefan Hajnoczi, 2011/12/15
[Qemu-devel] [PATCH v3 4/9] block: rate-limit streaming operations, Stefan Hajnoczi, 2011/12/13
[Qemu-devel] [PATCH v3 6/9] qmp: add block_job_set_speed command,
Stefan Hajnoczi <=
[Qemu-devel] [PATCH v3 5/9] qmp: add block_stream command, Stefan Hajnoczi, 2011/12/13
[Qemu-devel] [PATCH v3 9/9] test: add image streaming test cases, Stefan Hajnoczi, 2011/12/13
[Qemu-devel] [PATCH v3 3/9] block: add image streaming block job, Stefan Hajnoczi, 2011/12/13
[Qemu-devel] [PATCH v3 2/9] block: add BlockJob interface for long-running operations, Stefan Hajnoczi, 2011/12/13