Index: hw/pl110.c =================================================================== RCS file: /sources/qemu/qemu/hw/pl110.c,v retrieving revision 1.7 diff -u -r1.7 pl110.c --- hw/pl110.c 22 Oct 2006 00:18:54 -0000 1.7 +++ hw/pl110.c 16 Feb 2007 11:33:53 -0000 @@ -113,7 +113,7 @@ uint8_t *dest; uint8_t *src; int first, last = 0; - int dirty, new_dirty; + int dirty; int i; if (!pl110_enabled(s)) @@ -184,25 +184,21 @@ first = -1; addr = base; - dirty = cpu_physical_memory_get_dirty(addr, VGA_DIRTY_FLAG); - new_dirty = dirty; for (i = 0; i < s->rows; i++) { - if ((addr & ~TARGET_PAGE_MASK) + src_width >= TARGET_PAGE_SIZE) { - uint32_t tmp; - new_dirty = 0; - for (tmp = 0; tmp < src_width; tmp += TARGET_PAGE_SIZE) { - new_dirty |= cpu_physical_memory_get_dirty(addr + tmp, - VGA_DIRTY_FLAG); - } + uint32_t tmp; + + dirty = cpu_physical_memory_get_dirty(addr, VGA_DIRTY_FLAG); + for (tmp = (addr+TARGET_PAGE_SIZE) & TARGET_PAGE_MASK; + !dirty && tmp < addr + src_width; tmp += TARGET_PAGE_SIZE) { + dirty |= cpu_physical_memory_get_dirty(tmp, VGA_DIRTY_FLAG); } - if (dirty || new_dirty || s->invalidate) { + if (dirty || s->invalidate) { fn(pallette, dest, src, s->cols); if (first == -1) first = i; last = i; } - dirty = new_dirty; addr += src_width; dest += dest_width; src += src_width;