Hi, > > Well, not *that* simple. vga checks the dirty bitmap with scanline > > granularity, like that: > > > > foreach (scanline) { > > if (get_dirty(scanline)) > > update_scanline() > > } > > reset_dirty(framebuffer) > > > > I suspect simply transforming that to > > > > foreach (scanline) { > > if (test_and_clear_dirty(scanline)) > > update_scanline() > > } > > > > is not going to fly due to page tracking working with page granularity. > > With two subsequent scanlines within one page the second scanline will > > never be updated because updating first clears the dirty bit of the > > page ...
> You're right; an alternative is to copy the dirty bitmap to a local one > and clear the global one (the dirty bitmap for an 8 MB full HD frame > buffer is just 256 bytes). With the right API to abstract the job, it > should be relatively easy to fix all adapters. Started looking into this. So I guess you are thinking about a variant of memory_region_test_and_clear_dirty and/or cpu_physical_memory_test_and_clear_dirty which returns a bitmap instead of a bool? Plus some helper function which use the returned bitmap to figure whenever a specific scanline has been touched or not? cheers, Gerd