From 3913d154bc3e33ad7749d481e9c6b1fd11954ed8 Mon Sep 17 00:00:00 2001 From: Andrea Arcangeli <aarcange@redhat.com> Date: Tue, 20 Jan 2009 21:26:11 +0100 Subject: [PATCH 45/54] imported patch ksm-register RH-Upstream-status: pending --- qemu/vl.c | 35 +++++++++++++++++++++++++++++++++++ 1 files changed, 35 insertions(+), 0 deletions(-) diff --git a/qemu/vl.c b/qemu/vl.c index 6918f40..d77317f 100644 --- a/qemu/vl.c +++ b/qemu/vl.c @@ -21,6 +21,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + +#include "../kernel/ksm/ksm.h" #include "hw/hw.h" #include "hw/boards.h" #include "hw/usb.h" @@ -4825,6 +4827,37 @@ static void termsig_setup(void) #endif +int ksm_register_memory(void) +{ + int fd; + int ksm_fd; + int r = 1; + struct ksm_memory_region ksm_region; + + fd = open("/dev/ksm", O_RDWR | O_TRUNC, (mode_t)0600); + if (fd == -1) + goto out; + + ksm_fd = ioctl(fd, KSM_CREATE_SHARED_MEMORY_AREA); + if (ksm_fd == -1) + goto out_free; + + ksm_region.npages = phys_ram_size / TARGET_PAGE_SIZE; + ksm_region.addr = (unsigned long) phys_ram_base; + r = ioctl(ksm_fd, KSM_REGISTER_MEMORY_REGION, &ksm_region); + if (r) + goto out_free1; + + return r; + +out_free1: + close(ksm_fd); +out_free: + close(fd); +out: + return r; +} + int main(int argc, char **argv, char **envp) { #ifdef CONFIG_GDBSTUB @@ -5881,6 +5914,8 @@ int main(int argc, char **argv, char **envp) /* init the dynamic translator */ cpu_exec_init_all(tb_size * 1024 * 1024); + ksm_register_memory(); + bdrv_init(); /* we always create the cdrom drive, even if no disk is there */ -- 1.6.1