From owner-freebsd-hackers@FreeBSD.ORG Tue Apr 3 16:42:05 2012 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 88F45106564A for ; Tue, 3 Apr 2012 16:42:05 +0000 (UTC) (envelope-from marktinguely@gmail.com) Received: from mail-pz0-f44.google.com (mail-pz0-f44.google.com [209.85.210.44]) by mx1.freebsd.org (Postfix) with ESMTP id 5A5D68FC12 for ; Tue, 3 Apr 2012 16:42:05 +0000 (UTC) Received: by dadz14 with SMTP id z14so15840409dad.17 for ; Tue, 03 Apr 2012 09:42:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=slT3W1PpSEE8h0H6MVGZ7FRpy1oQn/Q/fov/zXrDv1g=; b=ex19cSNGmpsPqQVtU64u/Mtxh/C7KiEM87MX9ub7vZzV/xoN5GlbovTf2Dc5UX9cNi zCeHHmaYYi58HGACYUUmKW1hhal4FwyfW3TZitQgsMJ/RQXdJE3AydhlJWIDoY2OUHFB BqqcWf3G80AGJcMjPWWf7rp8EAiTqfYIZ9iSTYa/gWDYA4G7rBunTZmICRDvxqZ7xmYY CVhfYXgpOlzOP+efO9Ftx12CAYT5UCCMUlivRIkAHejdxzZxx/jmDPfZIs0tALtWmK+4 LXsBSzcmr4bUKtiAIlhEW5BpuRDKAO6oDolTnS/WjyVRNHcPdwfqGrz5JrU2BXoSKnbN dwEA== MIME-Version: 1.0 Received: by 10.68.233.135 with SMTP id tw7mr29554696pbc.152.1333471324759; Tue, 03 Apr 2012 09:42:04 -0700 (PDT) Received: by 10.68.189.69 with HTTP; Tue, 3 Apr 2012 09:42:04 -0700 (PDT) In-Reply-To: References: Date: Tue, 3 Apr 2012 11:42:04 -0500 Message-ID: From: Mark Tinguely To: vasanth rao naik sabavat Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: freebsd-hackers@freebsd.org Subject: Re: question about amd64 pagetable page allocation. X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Apr 2012 16:42:05 -0000 On Tue, Apr 3, 2012 at 10:18 AM, vasanth rao naik sabavat wrote: > Hello Mark, > > Thank you for replying, > > Could you please point me to any document which illustrates the > implementation of recursive page tables in FreeBSD for amd64. > > Also, I just found that with the following patch from Alon, the usage of > vtopte() is removed in pmap_remove_pages(). Why was this removed? > > http://lists.freebsd.org/pipermail/svn-src-all/2009-March/006006.html > > Thanks, > Vasanth > > On Tue, Apr 3, 2012 at 10:56 AM, Mark Tinguely > wrote: >> >> On Tue, Apr 3, 2012 at 8:33 AM, vasanth rao naik sabavat >> wrote: >> > Hi, >> > >> > I am trying to understand the page table page allocation for a process >> > in >> > FBSD6.1. I see that the page table pages are allocated by >> > vm_page_alloc(). >> > I believe the virtual address for this allocated page can be derived b= y >> > PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)), however when I compare this address >> > with >> > the virtual address accessed in pmap_remove_pages() they are not the >> > same. >> > >> > The virtual address of a *PTE in pmap_remove_pages() is something like >> > *0xffff800000643200 >> > * >> > However, the virtual address of the page allocated by vm_page_alloc() = is >> > =A0* >> > 0xffffff033c6a0000 >> > >> > *I would also like to understand the importance of loc_PTmap, I believ= e >> > the >> > pmap_remove_pages() is derving the page table page addresses from >> > loc_PTmap? >> > (kgdb) p loc_PTmap >> > Cannot access memory at address 0xffff800000000000 >> > >> > How do we relate the loc_PTmap to the page table pages allocated by >> > vm_page_alloc() in _pmap_allocpte(). >> > >> > Thanks, >> > Vasanth >> >> >> >> The answer to your questions will be more obvious when you get an >> understanding of the Recursive Page Tables. >> >> --Mark Tinguely. > > Search for "recursive page tables" start with 32 bits first. I did not read it, but the below page looks promising: http://www.rohitab.com/discuss/topic/31139-tutorial-paging-memory-mapping-w= ith-a-recursive-page-directory/ The nice thing about recursive page table is the MMU does the work. But: 1) User recursive page tables work only for the current map. 2) Kernel mappings are placed at the top of every map - so the kernel recursive addresses will always be valid. As the comment in the link states, that change converted from using user recursive page table virtual address (which is only valid when the map is current) to using the physical to virtual direct map (which is always valid). --Mark Tinguely.