# HG changeset patch
# User Tim Deegan <Tim.Deegan@xxxxxxxxxxxxx>
# Date 1173370801 0
# Node ID 0e08d98dfd57ea1e950164460f342ea468ede795
# Parent f78b4aad353ec349e582cedbc2191186ecfc182b
[XEN] Shadow: fix mark_dirty invocation to use gfn, not mfn
Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxxxxx>
---
xen/arch/x86/hvm/hvm.c | 13 ++++++++-----
1 files changed, 8 insertions(+), 5 deletions(-)
diff -r f78b4aad353e -r 0e08d98dfd57 xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c Thu Mar 08 16:18:50 2007 +0000
+++ b/xen/arch/x86/hvm/hvm.c Thu Mar 08 16:20:01 2007 +0000
@@ -380,7 +380,7 @@ void hvm_triple_fault(void)
*/
static int __hvm_copy(void *buf, paddr_t addr, int size, int dir, int virt)
{
- unsigned long mfn;
+ unsigned long gfn, mfn;
char *p;
int count, todo;
@@ -390,9 +390,11 @@ static int __hvm_copy(void *buf, paddr_t
count = min_t(int, PAGE_SIZE - (addr & ~PAGE_MASK), todo);
if ( virt )
- mfn = get_mfn_from_gpfn(paging_gva_to_gfn(current, addr));
+ gfn = paging_gva_to_gfn(current, addr);
else
- mfn = get_mfn_from_gpfn(addr >> PAGE_SHIFT);
+ gfn = addr >> PAGE_SHIFT;
+
+ mfn = get_mfn_from_gpfn(gfn);
if ( mfn == INVALID_MFN )
return todo;
@@ -400,14 +402,15 @@ static int __hvm_copy(void *buf, paddr_t
p = (char *)map_domain_page(mfn) + (addr & ~PAGE_MASK);
if ( dir )
+ {
memcpy(p, buf, count); /* dir == TRUE: *to* guest */
+ mark_dirty(current->domain, gfn);
+ }
else
memcpy(buf, p, count); /* dir == FALSE: *from guest */
unmap_domain_page(p);
- mark_dirty(current->domain, mfn);
-
addr += count;
buf += count;
todo -= count;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|