diff options
author | Wen Congyang <wency@cn.fujitsu.com> | 2015-05-22 09:29:46 +0800 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2015-06-23 15:06:16 +0100 |
commit | c6a8c3283f1d53e360073bdb32f87a97e78e2880 (patch) | |
tree | fb2710f814a4c5ddd36096ac781168ecb3adee6e /util | |
parent | 6e40b3bfc7e82823cf4df5f0bf668f56db41e53a (diff) | |
download | qemu-c6a8c3283f1d53e360073bdb32f87a97e78e2880.zip qemu-c6a8c3283f1d53e360073bdb32f87a97e78e2880.tar.gz qemu-c6a8c3283f1d53e360073bdb32f87a97e78e2880.tar.bz2 |
util/hbitmap: Add an API to reset all set bits in hbitmap
The function bdrv_clear_dirty_bitmap() is updated to use
faster hbitmap_reset_all() call.
Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Message-id: 555E868A.60506@cn.fujitsu.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'util')
-rw-r--r-- | util/hbitmap.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/util/hbitmap.c b/util/hbitmap.c index a10c7ae..50b888f 100644 --- a/util/hbitmap.c +++ b/util/hbitmap.c @@ -356,6 +356,19 @@ void hbitmap_reset(HBitmap *hb, uint64_t start, uint64_t count) hb_reset_between(hb, HBITMAP_LEVELS - 1, start, last); } +void hbitmap_reset_all(HBitmap *hb) +{ + unsigned int i; + + /* Same as hbitmap_alloc() except for memset() instead of malloc() */ + for (i = HBITMAP_LEVELS; --i >= 1; ) { + memset(hb->levels[i], 0, hb->sizes[i] * sizeof(unsigned long)); + } + + hb->levels[0][0] = 1UL << (BITS_PER_LONG - 1); + hb->count = 0; +} + bool hbitmap_get(const HBitmap *hb, uint64_t item) { /* Compute position and bit in the last layer. */ |