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