From owner-svn-src-user@FreeBSD.ORG  Sat Jan  9 23:40:46 2010
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
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 <kmacy@FreeBSD.org>
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 &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=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");