diff options
author | Robert Phillips <robert.phillips@citrix.com> | 2012-12-13 12:10:14 +0000 |
---|---|---|
committer | Robert Phillips <robert.phillips@citrix.com> | 2012-12-13 12:10:14 +0000 |
commit | fd91a2a662bc59677e0f217423a7a155d5465886 (patch) | |
tree | 72a8aa72a4460d9c8a17593315cc18c9da043390 /xen/include/asm-x86/paging.h | |
parent | a31ed4edbe48c8f24b4a7f1f41c7cc9d7453721e (diff) | |
download | xen-fd91a2a662bc59677e0f217423a7a155d5465886.tar.gz xen-fd91a2a662bc59677e0f217423a7a155d5465886.tar.bz2 xen-fd91a2a662bc59677e0f217423a7a155d5465886.zip |
x86/mm/hap: Adjust vram tracking to play nicely with log-dirty.
The previous code assumed the guest would be in one of three mutually exclusive
modes for bookkeeping dirty pages: (1) shadow, (2) hap utilizing the log dirty
bitmap to support functionality such as live migrate, (3) hap utilizing the
log dirty bitmap to track dirty vram pages.
Races arose when a guest attempted to track dirty vram while performing live
migrate. (The dispatch table managed by paging_log_dirty_init() might change
in the middle of a log dirty or a vram tracking function.)
This change allows hap log dirty and hap vram tracking to be concurrent.
Vram tracking no longer uses the log dirty bitmap. Instead it detects
dirty vram pages by examining their p2m type. The log dirty bitmap is only
used by the log dirty code. Because the two operations use different
mechanisms, they are no longer mutually exclusive.
Signed-Off-By: Robert Phillips <robert.phillips@citrix.com>
Acked-by: Tim Deegan <tim@xen.org>
Minor whitespace changes to conform with coding style
Signed-off-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
Diffstat (limited to 'xen/include/asm-x86/paging.h')
-rw-r--r-- | xen/include/asm-x86/paging.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/xen/include/asm-x86/paging.h b/xen/include/asm-x86/paging.h index 9a40f2cf25..c3a8848a56 100644 --- a/xen/include/asm-x86/paging.h +++ b/xen/include/asm-x86/paging.h @@ -137,10 +137,10 @@ struct paging_mode { void paging_free_log_dirty_bitmap(struct domain *d); /* get the dirty bitmap for a specific range of pfns */ -int paging_log_dirty_range(struct domain *d, - unsigned long begin_pfn, - unsigned long nr, - XEN_GUEST_HANDLE_64(uint8) dirty_bitmap); +void paging_log_dirty_range(struct domain *d, + unsigned long begin_pfn, + unsigned long nr, + uint8_t *dirty_bitmap); /* enable log dirty */ int paging_log_dirty_enable(struct domain *d); |