Index: kernel/arch/ia64/include/mm/asid.h
===================================================================
--- kernel/arch/ia64/include/mm/asid.h	(revision 0ff9e67f7c2c8fa8131d075d54fd17e3dc98f207)
+++ kernel/arch/ia64/include/mm/asid.h	(revision c03f610e65346872d240cc10daf706dc37099a7b)
@@ -50,14 +50,16 @@
  * but those extra bits are not used by the kernel. 
  */
-#define RIDS_PER_ASID		7
+#define RIDS_PER_ASID		8
 
 #define RID_MAX			262143		/* 2^18 - 1 */
-#define RID_KERNEL		0
-#define RID_INVALID		1
+#define RID_KERNEL7		7
 
-#define ASID2RID(asid, vrn)	(((asid)>RIDS_PER_ASID)?(((asid)*RIDS_PER_ASID)+(vrn)):(asid))
-#define RID2ASID(rid)		((rid)/RIDS_PER_ASID)
+#define ASID2RID(asid, vrn) \
+	((asid) * RIDS_PER_ASID + (vrn))
 
-#define ASID_MAX_ARCH		(RID_MAX/RIDS_PER_ASID)
+#define RID2ASID(rid) \
+	((rid) / RIDS_PER_ASID)
+
+#define ASID_MAX_ARCH		(RID_MAX / RIDS_PER_ASID)
 
 #endif
Index: kernel/arch/ia64/src/mm/as.c
===================================================================
--- kernel/arch/ia64/src/mm/as.c	(revision 0ff9e67f7c2c8fa8131d075d54fd17e3dc98f207)
+++ kernel/arch/ia64/src/mm/as.c	(revision c03f610e65346872d240cc10daf706dc37099a7b)
@@ -70,8 +70,5 @@
 		rr.word = rr_read(i);
 		rr.map.ve = false;		/* disable VHPT walker */
-		if (as == AS_KERNEL)
-			rr.map.rid = RID_INVALID;
-		else
-			rr.map.rid = ASID2RID(as->asid, i);
+		rr.map.rid = ASID2RID(as->asid, i);
 		rr.map.ps = PAGE_WIDTH;
 		rr_write(i, rr.word);
Index: kernel/arch/ia64/src/mm/page.c
===================================================================
--- kernel/arch/ia64/src/mm/page.c	(revision 0ff9e67f7c2c8fa8131d075d54fd17e3dc98f207)
+++ kernel/arch/ia64/src/mm/page.c	(revision c03f610e65346872d240cc10daf706dc37099a7b)
@@ -71,26 +71,12 @@
 
 	/*
-	 * First set up kernel region register.
-	 * This is redundant (see start.S) but we keep it here just for sure.
-	 */
-	rr.word = rr_read(VRN_KERNEL);
-	rr.map.ve = 0;                  /* disable VHPT walker */
-	rr.map.ps = PAGE_WIDTH;
-	rr.map.rid = ASID2RID(ASID_KERNEL, VRN_KERNEL);
-	rr_write(VRN_KERNEL, rr.word);
-	srlz_i();
-	srlz_d();
-
-	/*
-	 * And setup the rest of region register.
+	 * Set up kernel region registers.
+	 * VRN_KERNEL has already been set in start.S.
+	 * For paranoia reasons, we set it again.
 	 */
 	for(i = 0; i < REGION_REGISTERS; i++) {
-		/* skip kernel rr */
-		if (i == VRN_KERNEL)
-			continue;
-	
 		rr.word = rr_read(i);
 		rr.map.ve = 0;		/* disable VHPT walker */
-		rr.map.rid = RID_INVALID;
+		rr.map.rid = ASID2RID(ASID_KERNEL, i);
 		rr.map.ps = PAGE_WIDTH;
 		rr_write(i, rr.word);
Index: kernel/arch/ia64/src/start.S
===================================================================
--- kernel/arch/ia64/src/start.S	(revision 0ff9e67f7c2c8fa8131d075d54fd17e3dc98f207)
+++ kernel/arch/ia64/src/start.S	(revision c03f610e65346872d240cc10daf706dc37099a7b)
@@ -74,5 +74,5 @@
 	movl r10 = (RR_MASK)
 	and r9 = r10, r9
-	movl r10 = ((RID_KERNEL << RID_SHIFT) | (KERNEL_PAGE_WIDTH << PS_SHIFT))
+	movl r10 = (((RID_KERNEL7) << RID_SHIFT) | (KERNEL_PAGE_WIDTH << PS_SHIFT))
 	or r9 = r10, r9
 	
