[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC 1/6] bitmap: add atomic set functions
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [RFC 1/6] bitmap: add atomic set functions |
Date: |
Thu, 27 Nov 2014 17:42:41 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 |
On 27/11/2014 13:29, Stefan Hajnoczi wrote:
> +void bitmap_set_atomic(unsigned long *map, long start, long nr)
> +{
> + unsigned long *p = map + BIT_WORD(start);
> + const long size = start + nr;
> + int bits_to_set = BITS_PER_LONG - (start % BITS_PER_LONG);
> + unsigned long mask_to_set = BITMAP_FIRST_WORD_MASK(start);
> +
> + while (nr - bits_to_set >= 0) {
> + atomic_or(p, mask_to_set);
atomic_or is unnecessary while mask_to_set is ~0UL. I think not even a
smp_wmb() is necessary.
Paolo
> + nr -= bits_to_set;
> + bits_to_set = BITS_PER_LONG;
> + mask_to_set = ~0UL;
> + p++;
> + }
> + if (nr) {
> + mask_to_set &= BITMAP_LAST_WORD_MASK(size);
> + atomic_or(p, mask_to_set);
> + }
> +}
> +
- [Qemu-devel] [RFC 0/6] memory: make dirty_memory[] accesses atomic, Stefan Hajnoczi, 2014/11/27
- [Qemu-devel] [RFC 1/6] bitmap: add atomic set functions, Stefan Hajnoczi, 2014/11/27
- Re: [Qemu-devel] [RFC 1/6] bitmap: add atomic set functions,
Paolo Bonzini <=
- [Qemu-devel] [RFC 2/6] bitmap: add atomic test and clear, Stefan Hajnoczi, 2014/11/27
- [Qemu-devel] [RFC 4/6] migration: move dirty bitmap sync to ram_addr.h, Stefan Hajnoczi, 2014/11/27
- [Qemu-devel] [RFC 3/6] memory: use atomic ops for setting dirty memory bits, Stefan Hajnoczi, 2014/11/27
- [Qemu-devel] [RFC 5/6] memory: replace cpu_physical_memory_reset_dirty() with test-and-clear, Stefan Hajnoczi, 2014/11/27
- [Qemu-devel] [RFC 6/6] memory: make cpu_physical_memory_sync_dirty_bitmap() fully atomic, Stefan Hajnoczi, 2014/11/27
- Re: [Qemu-devel] [RFC 0/6] memory: make dirty_memory[] accesses atomic, Peter Maydell, 2014/11/27