[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 07/13] throttle: Use throttle_config_init() to initi
From: |
Alberto Garcia |
Subject: |
[Qemu-devel] [PATCH 07/13] throttle: Use throttle_config_init() to initialize ThrottleConfig |
Date: |
Fri, 5 Feb 2016 12:59:17 +0200 |
We can currently initialize ThrottleConfig by zeroing all its fields,
but this will change with the new fields to define the length of the
burst periods.
This patch introduces a new throttle_config_init() function and uses it
to replace all memset() calls that initialize ThrottleConfig directly.
Signed-off-by: Alberto Garcia <address@hidden>
---
blockdev.c | 4 ++--
include/qemu/throttle.h | 2 ++
tests/test-throttle.c | 28 +++++++++++++++++-----------
util/throttle.c | 10 ++++++++++
4 files changed, 31 insertions(+), 13 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index 8824c87..c9e91ab 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -387,7 +387,7 @@ static void extract_common_blockdev_options(QemuOpts *opts,
int *bdrv_flags,
}
if (throttle_cfg) {
- memset(throttle_cfg, 0, sizeof(*throttle_cfg));
+ throttle_config_init(throttle_cfg);
throttle_cfg->buckets[THROTTLE_BPS_TOTAL].avg =
qemu_opt_get_number(opts, "throttling.bps-total", 0);
throttle_cfg->buckets[THROTTLE_BPS_READ].avg =
@@ -2603,7 +2603,7 @@ void qmp_block_set_io_throttle(const char *device,
int64_t bps, int64_t bps_rd,
goto out;
}
- memset(&cfg, 0, sizeof(cfg));
+ throttle_config_init(&cfg);
cfg.buckets[THROTTLE_BPS_TOTAL].avg = bps;
cfg.buckets[THROTTLE_BPS_READ].avg = bps_rd;
cfg.buckets[THROTTLE_BPS_WRITE].avg = bps_wr;
diff --git a/include/qemu/throttle.h b/include/qemu/throttle.h
index aec0785..8ec8951 100644
--- a/include/qemu/throttle.h
+++ b/include/qemu/throttle.h
@@ -114,6 +114,8 @@ void throttle_config(ThrottleState *ts,
void throttle_get_config(ThrottleState *ts, ThrottleConfig *cfg);
+void throttle_config_init(ThrottleConfig *cfg);
+
/* usage */
bool throttle_schedule_timer(ThrottleState *ts,
ThrottleTimers *tt,
diff --git a/tests/test-throttle.c b/tests/test-throttle.c
index caf93ef..cf81033 100644
--- a/tests/test-throttle.c
+++ b/tests/test-throttle.c
@@ -34,6 +34,9 @@ static bool double_cmp(double x, double y)
/* tests for single bucket operations */
static void test_leak_bucket(void)
{
+ throttle_config_init(&cfg);
+ bkt = cfg.buckets[THROTTLE_BPS_TOTAL];
+
/* set initial value */
bkt.avg = 150;
bkt.max = 15;
@@ -63,6 +66,9 @@ static void test_compute_wait(void)
int64_t wait;
int64_t result;
+ throttle_config_init(&cfg);
+ bkt = cfg.buckets[THROTTLE_BPS_TOTAL];
+
/* no operation limit set */
bkt.avg = 0;
bkt.max = 15;
@@ -232,17 +238,17 @@ static void test_enabled(void)
{
int i;
- memset(&cfg, 0, sizeof(cfg));
+ throttle_config_init(&cfg);
g_assert(!throttle_enabled(&cfg));
for (i = 0; i < BUCKETS_COUNT; i++) {
- memset(&cfg, 0, sizeof(cfg));
+ throttle_config_init(&cfg);
set_cfg_value(false, i, 150);
g_assert(throttle_enabled(&cfg));
}
for (i = 0; i < BUCKETS_COUNT; i++) {
- memset(&cfg, 0, sizeof(cfg));
+ throttle_config_init(&cfg);
set_cfg_value(false, i, -150);
g_assert(!throttle_enabled(&cfg));
}
@@ -255,29 +261,29 @@ static void test_conflicts_for_one_set(bool is_max,
int read,
int write)
{
- memset(&cfg, 0, sizeof(cfg));
+ throttle_config_init(&cfg);
g_assert(throttle_is_valid(&cfg, NULL));
set_cfg_value(is_max, total, 1);
set_cfg_value(is_max, read, 1);
g_assert(!throttle_is_valid(&cfg, NULL));
- memset(&cfg, 0, sizeof(cfg));
+ throttle_config_init(&cfg);
set_cfg_value(is_max, total, 1);
set_cfg_value(is_max, write, 1);
g_assert(!throttle_is_valid(&cfg, NULL));
- memset(&cfg, 0, sizeof(cfg));
+ throttle_config_init(&cfg);
set_cfg_value(is_max, total, 1);
set_cfg_value(is_max, read, 1);
set_cfg_value(is_max, write, 1);
g_assert(!throttle_is_valid(&cfg, NULL));
- memset(&cfg, 0, sizeof(cfg));
+ throttle_config_init(&cfg);
set_cfg_value(is_max, total, 1);
g_assert(throttle_is_valid(&cfg, NULL));
- memset(&cfg, 0, sizeof(cfg));
+ throttle_config_init(&cfg);
set_cfg_value(is_max, read, 1);
set_cfg_value(is_max, write, 1);
g_assert(throttle_is_valid(&cfg, NULL));
@@ -314,7 +320,7 @@ static void test_is_valid_for_value(int value, bool
should_be_valid)
int is_max, index;
for (is_max = 0; is_max < 2; is_max++) {
for (index = 0; index < BUCKETS_COUNT; index++) {
- memset(&cfg, 0, sizeof(cfg));
+ throttle_config_init(&cfg);
set_cfg_value(is_max, index, value);
g_assert(throttle_is_valid(&cfg, NULL) == should_be_valid);
}
@@ -336,7 +342,7 @@ static void test_max_is_missing_limit(void)
int i;
for (i = 0; i < BUCKETS_COUNT; i++) {
- memset(&cfg, 0, sizeof(cfg));
+ throttle_config_init(&cfg);
cfg.buckets[i].max = 100;
cfg.buckets[i].avg = 0;
g_assert(!throttle_is_valid(&cfg, NULL));
@@ -551,7 +557,7 @@ static void test_groups(void)
g_assert(bdrv1->throttle_state == bdrv3->throttle_state);
/* Setting the config of a group member affects the whole group */
- memset(&cfg1, 0, sizeof(cfg1));
+ throttle_config_init(&cfg1);
cfg1.buckets[THROTTLE_BPS_READ].avg = 500000;
cfg1.buckets[THROTTLE_BPS_WRITE].avg = 285000;
cfg1.buckets[THROTTLE_OPS_READ].avg = 20000;
diff --git a/util/throttle.c b/util/throttle.c
index f8bf03c..6a01cee 100644
--- a/util/throttle.c
+++ b/util/throttle.c
@@ -171,10 +171,20 @@ void throttle_timers_attach_aio_context(ThrottleTimers
*tt,
tt->write_timer_cb, tt->timer_opaque);
}
+/*
+ * Initialize the ThrottleConfig structure to a valid state
+ * @cfg: the config to initialize
+ */
+void throttle_config_init(ThrottleConfig *cfg)
+{
+ memset(cfg, 0, sizeof(*cfg));
+}
+
/* To be called first on the ThrottleState */
void throttle_init(ThrottleState *ts)
{
memset(ts, 0, sizeof(ThrottleState));
+ throttle_config_init(&ts->cfg);
}
/* To be called first on the ThrottleTimers */
--
2.7.0
- [Qemu-devel] [PATCH 00/13] throttle: Allow I/O bursts for a user-defined period of time, Alberto Garcia, 2016/02/05
- [Qemu-devel] [PATCH 05/13] throttle: Set always an average value when setting a maximum value, Alberto Garcia, 2016/02/05
- [Qemu-devel] [PATCH 09/13] throttle: Add command-line settings to define the burst periods, Alberto Garcia, 2016/02/05
- [Qemu-devel] [PATCH 06/13] throttle: Merge all functions that check the configuration into one, Alberto Garcia, 2016/02/05
- [Qemu-devel] [PATCH 01/13] throttle: Make throttle_compute_timer() static, Alberto Garcia, 2016/02/05
- [Qemu-devel] [PATCH 04/13] throttle: Make throttle_is_valid() set errp, Alberto Garcia, 2016/02/05
- [Qemu-devel] [PATCH 02/13] throttle: Make throttle_conflicting() set errp, Alberto Garcia, 2016/02/05
- [Qemu-devel] [PATCH 12/13] throttle: Check that burst_level leaks correctly, Alberto Garcia, 2016/02/05
- [Qemu-devel] [PATCH 07/13] throttle: Use throttle_config_init() to initialize ThrottleConfig,
Alberto Garcia <=
- [Qemu-devel] [PATCH 08/13] throttle: Add support for burst periods, Alberto Garcia, 2016/02/05
- [Qemu-devel] [PATCH 11/13] qapi: Add burst length fields to BlockDeviceInfo, Alberto Garcia, 2016/02/05
- [Qemu-devel] [PATCH 13/13] throttle: Test throttle_compute_wait() during bursts, Alberto Garcia, 2016/02/05
- [Qemu-devel] [PATCH 03/13] throttle: Make throttle_max_is_missing_limit() set errp, Alberto Garcia, 2016/02/05
- [Qemu-devel] [PATCH 10/13] qapi: Add burst length parameters to block_set_io_throttle, Alberto Garcia, 2016/02/05
- Re: [Qemu-devel] [PATCH 00/13] throttle: Allow I/O bursts for a user-defined period of time, Kevin Wolf, 2016/02/12
- Re: [Qemu-devel] [Qemu-block] [PATCH 00/13] throttle: Allow I/O bursts for a user-defined period of time, Stefan Hajnoczi, 2016/02/15