diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-06-04 22:25:10 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-06-04 22:25:10 +0100 |
commit | 183d02baf2fe56ad83784f0c9011d5dc7fee1502 (patch) | |
tree | 9165062c3f3c525780d041c5d3346e86901b0fd7 /xen/include/asm-x86/hap.h | |
parent | 57d9503643d99ef7a1b167038e39b4ab4bd477fd (diff) | |
download | xen-183d02baf2fe56ad83784f0c9011d5dc7fee1502.tar.gz xen-183d02baf2fe56ad83784f0c9011d5dc7fee1502.tar.bz2 xen-183d02baf2fe56ad83784f0c9011d5dc7fee1502.zip |
x86: hap dirty vram tracking
Currently HAP systems suffer a significant performance loss when a vnc
client is connect or the sdl interface is used, because HAP is lacking
an implementation of track_dirty_vram.
As a consequence qemu always tries to update the whole screen because
it does not know which areas of the screen have been updated by the
guest.
This patch implements track_dirty_vram for HAP enabling the logdirty
mechanism only in a specific gfn range and adding a
paging_log_dirty_range function that returns the log dirty bitmap in a
requested range.
Paging_log_dirty_range is different from paging_log_dirty_op because
operates on a range and also because it does not pause the domain. In
order not to lose any update I moved clean_dirty_bitmap at the
beginning of the function before evaluating the logdirty bitmap.
The bitmap is still safe because it is protected by the logdirty lock.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Diffstat (limited to 'xen/include/asm-x86/hap.h')
-rw-r--r-- | xen/include/asm-x86/hap.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/xen/include/asm-x86/hap.h b/xen/include/asm-x86/hap.h index 60a2ad4ed0..3f3cf3f22e 100644 --- a/xen/include/asm-x86/hap.h +++ b/xen/include/asm-x86/hap.h @@ -91,6 +91,11 @@ int hap_enable(struct domain *d, u32 mode); void hap_final_teardown(struct domain *d); void hap_teardown(struct domain *d); void hap_vcpu_init(struct vcpu *v); +void hap_logdirty_init(struct domain *d); +int hap_track_dirty_vram(struct domain *d, + unsigned long begin_pfn, + unsigned long nr, + XEN_GUEST_HANDLE_64(uint8) dirty_bitmap); extern struct paging_mode hap_paging_real_mode; extern struct paging_mode hap_paging_protected_mode; |