From owner-svn-src-user@FreeBSD.ORG Sat Jan 9 23:40:46 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1DBAC106566B; Sat, 9 Jan 2010 23:40:46 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0C7128FC08; Sat, 9 Jan 2010 23:40:46 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o09Nejg9050803; Sat, 9 Jan 2010 23:40:45 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o09NejSX050800; Sat, 9 Jan 2010 23:40:45 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <201001092340.o09NejSX050800@svn.freebsd.org> From: Kip Macy Date: Sat, 9 Jan 2010 23:40:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r201961 - in user/kmacy/releng_8_fcs_buf_xen/sys/i386: include xen X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 09 Jan 2010 23:40:46 -0000 Author: kmacy Date: Sat Jan 9 23:40:45 2010 New Revision: 201961 URL: http://svn.freebsd.org/changeset/base/201961 Log: make QUEUE_MACRO_DEBUG work with Peter's PV chunk changes Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/pmap.h user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/pmap.h ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/pmap.h Sat Jan 9 23:37:29 2010 (r201960) +++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/pmap.h Sat Jan 9 23:40:45 2010 (r201961) @@ -441,14 +441,21 @@ typedef struct pv_entry { * pv_entries are allocated in chunks per-process. This avoids the * need to track per-pmap assignments. */ +#ifdef QUEUE_MACRO_DEBUG +#define _NPCM 5 +#define _NPCPV 144 +#define _NSPARE ((PAGE_SIZE - (4 + 24 + _NPCM*4 + _NPCPV*28))>>2) +#else #define _NPCM 11 #define _NPCPV 336 +#define _NSPARE 2 +#endif struct pv_chunk { - pmap_t pc_pmap; - TAILQ_ENTRY(pv_chunk) pc_list; - uint32_t pc_map[_NPCM]; /* bitmap; 1 = free */ - uint32_t pc_spare[2]; - struct pv_entry pc_pventry[_NPCPV]; + pmap_t pc_pmap; /* 4 */ + TAILQ_ENTRY(pv_chunk) pc_list; /* 8 | 24 */ + uint32_t pc_map[_NPCM]; /* _NPCM*4 - bitmap; 1 = free */ + uint32_t pc_spare[_NSPARE]; /* _NSPARE*4 */ + struct pv_entry pc_pventry[_NPCPV]; /* _NPCPV * 12 | 28 */ }; #ifdef _KERNEL Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c ============================================================================== --- user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c Sat Jan 9 23:37:29 2010 (r201960) +++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c Sat Jan 9 23:40:45 2010 (r201961) @@ -1339,15 +1339,16 @@ pmap_qenter_prot(vm_offset_t sva, vm_pag #else uint32_t flags = 0; #endif - if (prot & VM_PROT_WRITE) flags |= PG_RW; + if (prot & VM_PROT_READ) + flags |= PG_V; CTR2(KTR_PMAP, "pmap_qenter:sva=0x%x count=%d", va, count); pte = vtopte(sva); endpte = pte + count; while (pte < endpte) { - pa = xpmap_ptom(VM_PAGE_TO_PHYS(*ma)) | pgeflag | flags | PG_V | PG_M | PG_A; + pa = xpmap_ptom(VM_PAGE_TO_PHYS(*ma)) | pgeflag | flags; mclp->op = __HYPERVISOR_update_va_mapping; mclp->args[0] = va; @@ -1980,16 +1981,19 @@ pmap_growkernel(vm_offset_t addr) ***************************************************/ CTASSERT(sizeof(struct pv_chunk) == PAGE_SIZE); -CTASSERT(_NPCM == 11); +#ifdef QUEUE_MACRO_DEBUG +CTASSERT(_NPCM == 5); -static __inline struct pv_chunk * -pv_to_chunk(pv_entry_t pv) -{ +#define PC_FREE0_3 0xfffffffful /* Free values for index 0 through 9 */ +#define PC_FREE5 0x0000fffful /* Free values for index 10 */ - return (struct pv_chunk *)((uintptr_t)pv & ~(uintptr_t)PAGE_MASK); -} +static uint32_t pc_freemask[5] = { + PC_FREE0_3, PC_FREE0_3, PC_FREE0_3, + PC_FREE0_3, PC_FREE5 +}; -#define PV_PMAP(pv) (pv_to_chunk(pv)->pc_pmap) +#else +CTASSERT(_NPCM == 11); #define PC_FREE0_9 0xfffffffful /* Free values for index 0 through 9 */ #define PC_FREE10 0x0000fffful /* Free values for index 10 */ @@ -2001,6 +2005,18 @@ static uint32_t pc_freemask[11] = { PC_FREE0_9, PC_FREE10 }; +#endif +static __inline struct pv_chunk * +pv_to_chunk(pv_entry_t pv) +{ + + return (struct pv_chunk *)((uintptr_t)pv & ~(uintptr_t)PAGE_MASK); +} + +#define PV_PMAP(pv) (pv_to_chunk(pv)->pc_pmap) + + + SYSCTL_INT(_vm_pmap, OID_AUTO, pv_entry_count, CTLFLAG_RD, &pv_entry_count, 0, "Current number of pv entries");