On 02/08/2010 12:22 PM, OHMURA Kei wrote: > We think access phys_ram_dirty through inline functions is better > than directly for encoupseling reason. > > We devided the ram in a 64 pages block. Each block has a counter, which is > stored in phys_ram_dirty_by_word. It shows the number of dirty pages. > We will find the 64 pages block is dirty or non-dirty using > phys_ram_dirty_by_word. > > Signed-off-by: OHMURA Kei <ohmura.kei@xxxxxxxxxxxxx> > --- > cpu-all.h | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > cpu-defs.h | 1 + > 2 files changed, 75 insertions(+), 0 deletions(-) > > diff --git a/cpu-all.h b/cpu-all.h > index 8ed76c7..2251f14 100644 > --- a/cpu-all.h > +++ b/cpu-all.h > @@ -168,6 +168,33 @@ typedef union { > } CPU_QuadU; > #endif > > +static inline unsigned long unroll_flags_to_ul(int flags) > +{ > + unsigned long ret = 0, flags_ul = (unsigned long)flags; > + > +#if TARGET_LONG_SIZE == 4 > + ret |= flags_ul << 0; > + ret |= flags_ul << 8; > + ret |= flags_ul << 16; > + ret |= flags_ul << 24; > +#elif TARGET_LONG_SIZE == 8 > + ret |= flags_ul << 0; > + ret |= flags_ul << 8; > + ret |= flags_ul << 16; > + ret |= flags_ul << 24; > + ret |= flags_ul << 32; > + ret |= flags_ul << 40; > + ret |= flags_ul << 48; > + ret |= flags_ul << 56; > HOST_LONG_SIZE, not TARGET_LONG_SIZE. > @@ -890,9 +923,50 @@ static inline int cpu_physical_memory_get_dirty(ram_addr_t addr, > > static inline void cpu_physical_memory_set_dirty(ram_addr_t addr) > { > + if (phys_ram_dirty[addr >> TARGET_PAGE_BITS] != 0xff) > + ++phys_ram_dirty_by_word[(addr >> TARGET_PAGE_BITS) / > + TARGET_LONG_BITS]; > + > phys_ram_dirty[addr >> TARGET_PAGE_BITS] = 0xff; > } > Why do you need a counter? It may be sufficient to set a single bit. This reduces the memory overhead and perhaps cache thrashing. -- error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html