This avoids losing precious special memory in places where any memory can be
used.
---- sle11-2009-06-29.orig/arch/x86/mm/hypervisor.c 2009-03-16 16:17:45.000000000 +0100
-+++ sle11-2009-06-29/arch/x86/mm/hypervisor.c 2009-03-30 12:18:24.000000000 +0200
+--- sle11-2009-08-26.orig/arch/x86/mm/hypervisor.c 2009-08-31 11:47:04.000000000 +0200
++++ sle11-2009-08-26/arch/x86/mm/hypervisor.c 2009-03-30 12:18:24.000000000 +0200
@@ -42,6 +42,7 @@
#include <xen/interface/memory.h>
#include <linux/module.h>
}
EXPORT_SYMBOL_GPL(xen_destroy_contiguous_region);
---- sle11-2009-06-29.orig/drivers/xen/balloon/balloon.c 2009-06-29 15:44:49.000000000 +0200
-+++ sle11-2009-06-29/drivers/xen/balloon/balloon.c 2009-06-29 15:46:09.000000000 +0200
-@@ -665,7 +665,7 @@ struct page **alloc_empty_pages_and_page
+--- sle11-2009-08-26.orig/drivers/xen/balloon/balloon.c 2009-08-31 11:47:38.000000000 +0200
++++ sle11-2009-08-26/drivers/xen/balloon/balloon.c 2009-08-31 11:48:33.000000000 +0200
+@@ -696,7 +696,7 @@ struct page **alloc_empty_pages_and_page
goto out;
}
{
unsigned long flags;
int i;
-@@ -678,13 +678,26 @@ void free_empty_pages_and_pagevec(struct
+@@ -707,15 +707,28 @@ void free_empty_pages_and_pagevec(struct
+ balloon_lock(flags);
+ for (i = 0; i < nr_pages; i++) {
BUG_ON(page_count(pagevec[i]) != 1);
- balloon_append(pagevec[i]);
+- balloon_append(pagevec[i], 0);
++ balloon_append(pagevec[i], !free_vec);
}
+ if (!free_vec)
+ totalram_pages = bs.current_pages -= nr_pages;
void balloon_release_driver_page(struct page *page)
{
unsigned long flags;
---- sle11-2009-06-29.orig/include/xen/balloon.h 2009-03-16 16:38:05.000000000 +0100
-+++ sle11-2009-06-29/include/xen/balloon.h 2009-03-16 16:40:33.000000000 +0100
+--- sle11-2009-08-26.orig/include/xen/balloon.h 2009-08-31 11:47:04.000000000 +0200
++++ sle11-2009-08-26/include/xen/balloon.h 2009-03-16 16:40:33.000000000 +0100
@@ -47,6 +47,10 @@ void balloon_update_driver_allowance(lon
struct page **alloc_empty_pages_and_pagevec(int nr_pages);
void free_empty_pages_and_pagevec(struct page **pagevec, int nr_pages);