780ec86730
| libxc change #1 is to have xfrd's forked child munmap each 4MB batch | of foreign RAM after it's done writing it, rather than unmapping only | the last one and letting the process's exit clean up the rest. This | really does look like a simple mistake, and strictly speaking it's not | that big a deal -- but on NetBSD, the foreign mappings count against | the process's locked memory rlimit as if it were the dom0's own RAM. | | libxc change #2... I don't really understand the problem; it has | something to do with live migration and the domU releasing | pseudo-physical pages after they were sent but before it's suspended. | Except that, for non-live mode, I think it's reporting all the holes | in the pseudo-physical range, even though those pages haven't been | sent. In any case, the result is that the restoring xfrd fails to | decrease_reservation the pages away. And I distinctly recall this | working at least once under Linux with Xen 2, but I have little idea | what NetBSD might be doing differently. Bump PKGREVISION. This, along with a up to date -current kernel, make xm (save|restore) work properly for a linux domU.
35 lines
959 B
Text
35 lines
959 B
Text
$NetBSD: patch-av,v 1.1 2005/09/10 15:54:39 bouyer Exp $
|
|
|
|
--- libxc/xc_linux_save.c.orig 2005-08-03 19:57:57.000000000 -0400
|
|
+++ libxc/xc_linux_save.c 2005-09-06 23:23:44.000000000 -0400
|
|
@@ -850,11 +850,10 @@
|
|
} /* end of the write out for this batch */
|
|
|
|
sent_this_iter += batch;
|
|
+ munmap(region_base, batch*PAGE_SIZE);
|
|
|
|
} /* end of this while loop for this iteration */
|
|
|
|
- munmap(region_base, batch*PAGE_SIZE);
|
|
-
|
|
skip:
|
|
|
|
total_sent += sent_this_iter;
|
|
@@ -950,7 +949,7 @@
|
|
|
|
for ( i = 0, j = 0; i < nr_pfns; i++ )
|
|
{
|
|
- if ( ! is_mapped(live_pfn_to_mfn_table[i]) )
|
|
+ if ( ! is_mapped(live_pfn_to_mfn_table[i]) && !test_bit(i, to_fix) )
|
|
j++;
|
|
}
|
|
|
|
@@ -962,7 +961,7 @@
|
|
|
|
for ( i = 0, j = 0; i < nr_pfns; )
|
|
{
|
|
- if ( ! is_mapped(live_pfn_to_mfn_table[i]) )
|
|
+ if ( ! is_mapped(live_pfn_to_mfn_table[i]) && !test_bit(i, to_fix) )
|
|
{
|
|
pfntab[j++] = i;
|
|
}
|