From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ingo Molnar Subject: Re: [PATCH 1/3 V4] kvm tools: Add memory gap for larger RAM sizes Date: Wed, 11 May 2011 17:30:15 +0200 Message-ID: <20110511153015.GC21707@elte.hu> References: <4dcaa893.5925e30a.0f9e.125c@mx.google.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: penberg@kernel.org, asias.hejun@gmail.com, prasadjoshi124@gmail.com, avi@redhat.com, gorcunov@gmail.com, kvm@vger.kernel.org To: levinsasha928@gmail.com Return-path: Received: from fallback.mail.elte.hu ([157.181.151.13]:43299 "EHLO fallback.mail.elte.hu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757605Ab1EKQ1e (ORCPT ); Wed, 11 May 2011 12:27:34 -0400 Received: from mx3.mail.elte.hu ([157.181.1.138]) by fallback.mail.elte.hu with esmtp (Exim) id 1QKBVy-0003oC-MR from for ; Wed, 11 May 2011 17:39:54 +0200 Content-Disposition: inline In-Reply-To: <4dcaa893.5925e30a.0f9e.125c@mx.google.com> Sender: kvm-owner@vger.kernel.org List-ID: * levinsasha928@gmail.com wrote: > @@ -225,7 +266,18 @@ struct kvm *kvm__init(const char *kvm_dev, unsigned long ram_size) > > self->ram_size = ram_size; > > - self->ram_start = mmap(NULL, ram_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); > + if (self->ram_size < KVM_32BIT_GAP_START) { > + self->ram_start = mmap(NULL, ram_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); > + } else { > + self->ram_start = mmap(NULL, ram_size + KVM_32BIT_GAP_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); > + if (self->ram_start != MAP_FAILED) { > + /* > + * We mprotect the gap (see kvm__init_ram() for details) PROT_NONE so that > + * if we accidently write to it, we will know. > + */ > + mprotect(self->ram_start + KVM_32BIT_GAP_START, KVM_32BIT_GAP_SIZE, PROT_NONE); Nit: the mmaps here wrap off the end of line. It would be a lot more easier to read if kvm.h defined two helpers, like: #define PROT_RW (PROT_READ|PROT_WRITE) #define MAP_ANON (MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE) So the mmaps() would become a bit more readable: > + if (self->ram_size < KVM_32BIT_GAP_START) { > + self->ram_start = mmap(NULL, ram_size, PROT_RW, MAP_ANON, -1, 0); > + } else { > + self->ram_start = mmap(NULL, ram_size + KVM_32BIT_GAP_SIZE, PROT_RW, MAP_ANON, -1, 0); > + if (self->ram_start != MAP_FAILED) { > + /* > + * We mprotect the gap (see kvm__init_ram() for details) PROT_NONE so that > + * if we accidently write to it, we will know. > + */ > + mprotect(self->ram_start + KVM_32BIT_GAP_START, KVM_32BIT_GAP_SIZE, PROT_NONE); I'll test your series. Thanks, Ingo