* Avi Kivity <avi@xxxxxxxxxx> wrote: > On 05/11/2011 08:37 AM, Pekka Enberg wrote: > >On Wed, May 11, 2011 at 12:05 AM, Sasha Levin<levinsasha928@xxxxxxxxx> 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. I think in tools/kvm/ we can ignore i386 hosts that would like to map more RAM than they have virtual address space for ... Guests up to 1-2 gigs of RAM will still work fine. Thanks, Ingo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html