From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 1/2] kvm tools: Add memory gap for larger RAM sizes Date: Wed, 11 May 2011 11:30:15 +0300 Message-ID: <4DCA4917.9020802@redhat.com> References: <1305061513-28360-1-git-send-email-levinsasha928@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Sasha Levin , mingo@elte.hu, asias.hejun@gmail.com, prasadjoshi124@gmail.com, gorcunov@gmail.com, kvm@vger.kernel.org To: Pekka Enberg Return-path: Received: from mx1.redhat.com ([209.132.183.28]:29827 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751476Ab1EKPg4 (ORCPT ); Wed, 11 May 2011 11:36:56 -0400 In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: On 05/11/2011 08:37 AM, Pekka Enberg wrote: > On Wed, May 11, 2011 at 12:05 AM, Sasha Levin wrote: > > + if (kvm->ram_size< 0xe0000000) { > > Please use the ULL postfix for constants to ensure the types are sane. > Also, please come up with a sane name for these. > > > @@ -60,7 +60,14 @@ static inline u32 segment_to_flat(u16 selector, u16 offset) > > > > static inline void *guest_flat_to_host(struct kvm *self, unsigned long offset) > > { > > - return self->ram_start + offset; > > + /* > > + * We have a gap between 0xe0000000 and 0x100000000. > > + * Consider it when translating an address above 0x100000000. > > + */ > > + if (offset< 0xe0000000) > > + return self->ram_start + offset; > > + else > > + return self->ram_start + 0xe0000000 + (offset - 0x100000000); > > } > > Would it not be simpler to mmap() a "ram_size + gap_size" contiguous > region and mprotect(PROT_NONE) the gap? We'd still tell KVM and E820 > maps about two separate regions but guest_flat_to_host() would > work-as-is. It doesn't work in general - if you have a PCI device with a BAR (like a video card framebuffer), then you need allocations for main memory (0+) and pci (0xe000000+). You can't have a contiguous mapping on i386 containing both. -- error compiling committee.c: too many arguments to function