From 2b8ceebc7d3d2b7e00fbaed4868cc4e0ce2f2bae Mon Sep 17 00:00:00 2001
From: Glauber Costa <glommer@cloudius-systems.com>
Date: Thu, 23 Jan 2014 16:26:11 +0400
Subject: [PATCH] balloon: introduce a conciliation phase

This patch introduces a separate operation, "conciliate", that calculates
the balloon parameters given an arbitrary address

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
---
 java/jvm_balloon.cc | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/java/jvm_balloon.cc b/java/jvm_balloon.cc
index 62d77acc2..1d588b048 100644
--- a/java/jvm_balloon.cc
+++ b/java/jvm_balloon.cc
@@ -34,6 +34,7 @@ public:
     size_t size() { return _balloon_size; }
     size_t move_balloon(unsigned char *dest, unsigned char *src);
 private:
+    void conciliate(unsigned char *addr);
     unsigned char *_jvm_addr;
     unsigned char *_addr;
     unsigned char *_jvm_end_addr;
@@ -72,18 +73,23 @@ static ssize_t recent_jvm_heap()
     return curr - last_jvm_heap_memory.exchange(curr);
 }
 
-ulong balloon::empty_area()
+void balloon::conciliate(unsigned char *addr)
 {
+    _jvm_addr = addr;
     _jvm_end_addr = _jvm_addr + _balloon_size;
     _addr = align_up(_jvm_addr, _alignment);
     _end = align_down(_jvm_end_addr, _alignment);
+}
 
+ulong balloon::empty_area()
+{
     return mmu::map_jvm(_addr, hole_size(), this);
 }
 
 balloon::balloon(unsigned char *jvm_addr, jobject jref, int alignment = mmu::huge_page_size, size_t size = balloon_size)
     : _jvm_addr(jvm_addr), _jref(jref), _alignment(alignment), _balloon_size(size)
 {
+    conciliate(_jvm_addr);
     assert(mutex_owned(&balloons_lock));
     balloons.push_back(this);
 }
-- 
GitLab