From 2c32196a2f90f9a38ca0487e79886b08b86cc7a5 Mon Sep 17 00:00:00 2001
From: Daniel Veillard <veillard@redhat.com>
Date: Fri, 29 Sep 2006 16:12:08 +0000
Subject: [PATCH] * src/xen_internal.c: fix for system with page size != 4k
 Daniel

---
 ChangeLog          |  4 ++++
 src/xen_internal.c | 11 +++++++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 6293f9ffe4..38a5764085 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Fri Sep 29 17:16:40 CEST 2006 Daniel Veillard <veillard@redhat.com>
+
+	* src/xen_internal.c: fix for system with page size != 4k
+
 Fri Sep 29 13:05:12 CEST 2006 Daniel Veillard <veillard@redhat.com>
 
 	* docs/bugs.html docs/libvir.html: added pointers on how to report
diff --git a/src/xen_internal.c b/src/xen_internal.c
index 37315edc8a..31e3e546f2 100644
--- a/src/xen_internal.c
+++ b/src/xen_internal.c
@@ -1489,6 +1489,13 @@ xenHypervisorGetDomInfo(virConnectPtr conn, int id, virDomainInfoPtr info)
 {
     xen_getdomaininfo dominfo;
     int ret;
+    static int kb_per_pages = 0;
+
+    if (kb_per_pages == 0) {
+        kb_per_pages = sysconf(_SC_PAGESIZE) / 1024;
+	if (kb_per_pages <= 0) 
+	    kb_per_pages = 4;
+    }
 
     if ((conn == NULL) || (conn->handle < 0) || (info == NULL))
         return (-1);
@@ -1527,8 +1534,8 @@ xenHypervisorGetDomInfo(virConnectPtr conn, int id, virDomainInfoPtr info)
      * kilobytes from page counts
      */
     info->cpuTime = XEN_GETDOMAININFO_CPUTIME(dominfo);
-    info->memory = XEN_GETDOMAININFO_TOT_PAGES(dominfo) * 4;
-    info->maxMem = XEN_GETDOMAININFO_MAX_PAGES(dominfo) * 4;
+    info->memory = XEN_GETDOMAININFO_TOT_PAGES(dominfo) * kb_per_pages;
+    info->maxMem = XEN_GETDOMAININFO_MAX_PAGES(dominfo) * kb_per_pages;
     info->nrVirtCpu = XEN_GETDOMAININFO_CPUCOUNT(dominfo);
     return (0);
 }