From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: KVM swapping with mmu notifiers Date: Tue, 22 Jan 2008 18:17:38 +0200 Message-ID: <47961722.2010804@qumranet.com> References: <20080114142457.GF7062@v2.random> <478B833E.1020801@qumranet.com> <20080114174447.GA30812@v2.random> <478CC5D3.2040201@qumranet.com> <20080115155253.GA7059@v2.random> <478CD7CF.3080603@qumranet.com> <20080115160936.GC7059@v2.random> <479365B3.3000600@qumranet.com> <20080121113715.GE6970@v2.random> <4795F1B7.9050604@qumranet.com> <20080122145631.GG7331@v2.random> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: Marcelo Tosatti , kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org To: Andrea Arcangeli Return-path: In-Reply-To: <20080122145631.GG7331-lysg2Xt5kKMAvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Errors-To: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: kvm.vger.kernel.org Andrea Arcangeli wrote: > On Tue, Jan 22, 2008 at 03:37:59PM +0200, Avi Kivity wrote: > >> Andrea Arcangeli wrote: >> >>> On Sun, Jan 20, 2008 at 05:16:03PM +0200, Avi Kivity wrote: >>> >>> >>>> Yes, it's supposed to work (we can't prevent userspace from doing it). >>>> >>>> >>> Hmm, I think we already prevent it, so I don't think I need to update >>> my swap code until the below is removed. >>> >>> /* Check for overlaps */ >>> r = -EEXIST; >>> for (i = 0; i < KVM_MEMORY_SLOTS; ++i) { >>> struct kvm_memory_slot *s = &kvm->memslots[i]; >>> >>> if (s == memslot) >>> continue; >>> if (!((base_gfn + npages <= s->base_gfn) || >>> (base_gfn >= s->base_gfn + s->npages))) >>> goto out_free; >>> } >>> >>> >>> >> Actually, this checks against slots with the overlapping gfns. Aliases >> have different gfns but same hvas. >> > > Hmm not sure to follow, do you mean I need to change something? > Aliases live in a different dimension, and I can't see how my code > could ever notice or care about aliases (that have to be translated to > a real hva-memslot-backed gfn before calling get_user_pages). All I > care about are to find the right rmap structures for each hva. The > above snippet should be enough to guarantee that there can only be 1 > rmap structure for each hva, so when I checked yesterday that looked > enough to prove my kvm_hva_to_rmapp implementation already correct. > There can be more than one rmapp per hva. Real world example: memslot 1: gfn range 0xe000000 - 0xe0800000 @ hva 0x10000000 (8MB framebuffer) memslot 2: gfn range 0xa0000 - 0xa8000 @ hva 0x10000000 (32KB VGA window) If the guest accesses gfn 0xa0000 through one gva, and gfn 0xe0000000 through a second gva, then you will have two rmap chains for hva 0x10000000. This doesn't happen today because we use the alias mechanism in qemu, but we don't forbid it either. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/