diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2012-05-09 16:09:46 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2012-06-15 14:03:42 +0200 |
commit | 6ef228fc0de1d5fb43ebfef039563d39a3a37067 (patch) | |
tree | 86b1d3979c5f45a723277ca067a4f1a0dd4661d6 /block | |
parent | 188a7bbf94aa53019ef7d2438c8e9d900e590091 (diff) |
stream: move rate limiting to a separate header file
Make the code reusable.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block')
-rw-r--r-- | block/stream.c | 31 |
1 files changed, 2 insertions, 29 deletions
diff --git a/block/stream.c b/block/stream.c index 811388a402..37c46525d2 100644 --- a/block/stream.c +++ b/block/stream.c @@ -13,6 +13,7 @@ #include "trace.h" #include "block_int.h" +#include "qemu/ratelimit.h" enum { /* @@ -25,34 +26,6 @@ enum { #define SLICE_TIME 100000000ULL /* ns */ -typedef struct { - int64_t next_slice_time; - uint64_t slice_quota; - uint64_t dispatched; -} RateLimit; - -static int64_t ratelimit_calculate_delay(RateLimit *limit, uint64_t n) -{ - int64_t now = qemu_get_clock_ns(rt_clock); - - if (limit->next_slice_time < now) { - limit->next_slice_time = now + SLICE_TIME; - limit->dispatched = 0; - } - if (limit->dispatched == 0 || limit->dispatched + n <= limit->slice_quota) { - limit->dispatched += n; - return 0; - } else { - limit->dispatched = n; - return limit->next_slice_time - now; - } -} - -static void ratelimit_set_speed(RateLimit *limit, uint64_t speed) -{ - limit->slice_quota = speed / (1000000000ULL / SLICE_TIME); -} - typedef struct StreamBlockJob { BlockJob common; RateLimit limit; @@ -198,7 +171,7 @@ static void stream_set_speed(BlockJob *job, int64_t speed, Error **errp) error_set(errp, QERR_INVALID_PARAMETER, "speed"); return; } - ratelimit_set_speed(&s->limit, speed / BDRV_SECTOR_SIZE); + ratelimit_set_speed(&s->limit, speed / BDRV_SECTOR_SIZE, SLICE_TIME); } static BlockJobType stream_job_type = { |