Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Sep 2003 23:14:52 -0700 (PDT)
From:      Serguei Tzukanov <tzukanov@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 38564 for review
Message-ID:  <200309250614.h8P6Eqf6060880@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=38564

Change 38564 by tzukanov@tzukanov_antares on 2003/09/24 23:14:02

	Update to -current.
	Move some definitions related to ELF relocation into one file.
	Misc style(9) fixes.

Affected files ...

.. //depot/projects/s390/libexec/rtld-elf/s390/reloc.c#6 edit
.. //depot/projects/s390/sys/s390/include/elf.h#2 edit
.. //depot/projects/s390/sys/s390/include/endian.h#2 edit
.. //depot/projects/s390/sys/s390/include/signal.h#4 edit
.. //depot/projects/s390/sys/s390/s390/critical.c#3 edit
.. //depot/projects/s390/sys/s390/s390/elf_machdep.c#6 edit
.. //depot/projects/s390/sys/s390/s390/external.c#5 edit
.. //depot/projects/s390/sys/s390/s390/identcpu.c#6 edit
.. //depot/projects/s390/sys/s390/s390/machdep.c#11 edit
.. //depot/projects/s390/sys/s390/s390/mp_machdep.c#3 edit
.. //depot/projects/s390/sys/s390/s390/pmap.c#16 edit
.. //depot/projects/s390/sys/s390/s390/sys_machdep.c#4 edit
.. //depot/projects/s390/sys/s390/s390/trap.c#11 edit
.. //depot/projects/s390/sys/s390/s390/vm_machdep.c#10 edit
.. //depot/projects/s390/usr.bin/Makefile#12 edit

Differences ...

==== //depot/projects/s390/libexec/rtld-elf/s390/reloc.c#6 (text+ko) ====

@@ -41,65 +41,10 @@
 #include <unistd.h>
 
 #include "debug.h"
+#define _RTLD_COMMON_RELOC
 #include "rtld.h"
 
-#define _ILL	0
-#define _B8	1
-#define _L12	2
-#define _H16	3
-#define _PC16	5
-#define _W32	6
-
-#ifdef __s390x__
-#define _PC32	7
-#define _Q64	8
-
-#define _AD	_Q64
-#else
-#define _AD	_W32
-#endif
-
-#define _B	1
-#define _G	2
-#define _L	4
-#define _O	8
-#define _P	16
-#define _S	32
-
-static struct _reldesc {
-	uint8_t field;
-	uint8_t action;
-} reldesc[] = {
-	{ _ILL                }, /* R_390_NONE     */
-	{ _B8,   _S,          }, /* R_390_8        */
-	{ _L12,  _S,          }, /* R_390_12       */
-	{ _H16,  _S,          }, /* R_390_16       */
-	{ _W32,  _S,          }, /* R_390_32       */
-	{ _W32,  _S | _P      }, /* R_390_PC32     */
-	{ _L12,  _O           }, /* R_390_GOT12    */
-	{ _W32,  _O,          }, /* R_390_GOT32    */
-	{ _W32,  _L,          }, /* R_390_PLT32    */
-	{ _ILL                }, /* R_390_COPY     */
-	{ _AD,   _S           }, /* R_390_GLOB_DAT */
-	{ _ILL                }, /* R_390_JMP_SLOT */
-	{ _AD,   _B           }, /* R_390_RELATIVE */
-	{ _AD,   _S | _G      }, /* R_390_GOTOFF   */
-	{ _AD,   _G | _P      }, /* R_390_GOTPC    */
-	{ _H16,  _O           }, /* R_390_GOT16    */
-	{ _H16,  _S | _P      }, /* R_390_PC16     */
-	{ _PC16, _S | _P      }, /* R_390_PC16DBL  */
-	{ _PC16, _L | _P      }, /* R_390_PLT16DBL */
-#ifdef __s390x__
-	{ _PC32, _S | _P      }, /* R_390_PC32DBL  */
-	{ _PC32, _L | _P      }, /* R_390_PLT32DBL */
-	{ _PC32, _G | _P      }, /* R_390_GOTPCDBL */
-	{ _Q64,  _S           }, /* R_390_64       */
-	{ _Q64,  _S | _P      }, /* R_390_PC64     */
-	{ _Q64,  _O           }, /* R_390_GOT64    */
-	{ _Q64,  _L           }, /* R_390_PLT64    */
-	{ _PC32, _G | _O | _P }, /* R_390_GOTENT   */
-#endif
-};
+static struct _reldesc reldesc[] = _RELDESC_INITIALIZER;
 
 /*
  * Process the special R_390_COPY relocations in the main program.  These

==== //depot/projects/s390/sys/s390/include/elf.h#2 (text+ko) ====

@@ -108,4 +108,76 @@
 #define ELF_RTLD_ADDR(vmspace) (round_page((vmspace)->vm_daddr + maxdsiz))
 #endif
 
+#ifdef _RTLD_COMMON_RELOC
+#define _ILL	0
+#define _B8	1
+#define _L12	2
+#define _H16	3
+#define _PC16	5
+#define _W32	6
+
+#define _B	1
+#define _G	2
+#define _L	4
+#define _O	8
+#define _P	16
+#define _S	32
+
+struct _reldesc {
+	uint8_t field;
+	uint8_t action;
+};
+
+#define _RELDESC_INITIALIZER_S390			\
+	{ _ILL                }, /* R_390_NONE     */	\
+	{ _B8,   _S,          }, /* R_390_8        */	\
+	{ _L12,  _S,          }, /* R_390_12       */	\
+	{ _H16,  _S,          }, /* R_390_16       */	\
+	{ _W32,  _S,          }, /* R_390_32       */	\
+	{ _W32,  _S | _P      }, /* R_390_PC32     */	\
+	{ _L12,  _O           }, /* R_390_GOT12    */	\
+	{ _W32,  _O,          }, /* R_390_GOT32    */	\
+	{ _W32,  _L,          }, /* R_390_PLT32    */	\
+	{ _ILL                }, /* R_390_COPY     */	\
+	{ _AD,   _S           }, /* R_390_GLOB_DAT */	\
+	{ _ILL                }, /* R_390_JMP_SLOT */	\
+	{ _AD,   _B           }, /* R_390_RELATIVE */	\
+	{ _AD,   _S | _G      }, /* R_390_GOTOFF   */	\
+	{ _AD,   _G | _P      }, /* R_390_GOTPC    */	\
+	{ _H16,  _O           }, /* R_390_GOT16    */	\
+	{ _H16,  _S | _P      }, /* R_390_PC16     */	\
+	{ _PC16, _S | _P      }, /* R_390_PC16DBL  */	\
+	{ _PC16, _L | _P      }, /* R_390_PLT16DBL */
+
+#ifdef __s390x__
+#define _PC32	7
+#define _Q64	8
+
+#define _AD	_Q64
+
+#define _RELDESC_INITIALIZER_S390X			\
+	{ _PC32, _S | _P      }, /* R_390_PC32DBL  */	\
+	{ _PC32, _L | _P      }, /* R_390_PLT32DBL */	\
+	{ _PC32, _G | _P      }, /* R_390_GOTPCDBL */	\
+	{ _Q64,  _S           }, /* R_390_64       */	\
+	{ _Q64,  _S | _P      }, /* R_390_PC64     */	\
+	{ _Q64,  _O           }, /* R_390_GOT64    */	\
+	{ _Q64,  _L           }, /* R_390_PLT64    */	\
+	{ _PC32, _G | _O | _P }, /* R_390_GOTENT   */
+
+#define _RELDESC_INITIALIZER		\
+{					\
+	_RELDESC_INITIALIZER_S390	\
+	_RELDESC_INITIALIZER_S390X	\
+}
+#else
+#define _AD	_W32
+
+#define _RELDESC_INITIALIZER		\
+{					\
+	_RELDESC_INITIALIZER_S390	\
+}
+#endif
+
+#endif /* _RTLD_COMMON_RELOC */
 #endif /* !_MACHINE_ELF_H_ */

==== //depot/projects/s390/sys/s390/include/endian.h#2 (text+ko) ====

@@ -29,6 +29,8 @@
 #define BYTE_ORDER	_BYTE_ORDER
 #endif
 
+#ifdef __GNUC__
+
 static __inline __uint16_t
 __bswap16(__uint16_t x)
 {
@@ -83,4 +85,15 @@
 #define	__ntohl(x)	((__uint32_t)(x))
 #define	__ntohs(x)	((__uint16_t)(x))
 
+#else /* !__GNUC__ */
+
+/*
+ * No optimizations are available for this compiler.  Fall back to
+ * non-optimized functions by defining the constant usually used to prevent
+ * redefinition.
+ */
+#define _BYTEORDER_FUNC_DEFINED
+
+#endif /* __GNUC__ */
+
 #endif /* !_MACHINE_ENDIAN_H_ */

==== //depot/projects/s390/sys/s390/include/signal.h#4 (text+ko) ====

@@ -11,7 +11,6 @@
 #define	_MACHINE_SIGNAL_H_
 
 #include <sys/types.h>
-#include <machine/psw.h>
 
 typedef int sig_atomic_t;
 
@@ -59,6 +58,8 @@
 #endif
 
 #if __BSD_VISIBLE
+#include <machine/psw.h>
+
 struct sigcontext {
 	struct __sigset	sc_mask;
 	int		sc_onstack;

==== //depot/projects/s390/sys/s390/s390/critical.c#3 (text+ko) ====

@@ -9,7 +9,6 @@
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/pcpu.h>
-#include <sys/ktr.h>
 #include <sys/kernel.h>
 #include <sys/proc.h>
 #include <machine/critical.h>
@@ -20,8 +19,6 @@
 {
 	struct thread *td = curthread;
 
-	CTR1(KTR_PROC, "cpu_critical_fork_exit: td = %p", td);
-
 	td->td_critnest = 1;
 	td->td_md.md_savecrit = SM_T|SM_IO|SM_EX|esa_sm_per;
 }

==== //depot/projects/s390/sys/s390/s390/elf_machdep.c#6 (text+ko) ====

@@ -11,10 +11,10 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD: src/sys/s390/s390/elf_machdep.c,v 1.0 2002/08/01 23:51:16 tzukanov Exp $");
 
+#define _RTLD_COMMON_RELOC
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/ktr.h>
 #include <sys/exec.h>
 #include <sys/imgact.h>
 #include <sys/linker.h>
@@ -24,74 +24,10 @@
 #include <sys/signalvar.h>
 #include <sys/vnode.h>
 #include <vm/vm.h>
-#include <vm/pmap.h>
 #include <vm/vm_param.h>
-#include <machine/elf.h>
+
 #include <machine/md_var.h>
 
-#ifndef KTR_LD
-#define KTR_LD	KTR_GEN
-#endif
-
-#define _SHIFT1	(1 << 7)
-
-#define _B8	1
-#define _L12	2
-#define _H16	3
-#define _PC16	(_H16 | _SHIFT1)
-#define _W32	4
-#define _PC32	(_W32 | _SHIFT1)
-#define _Q64	5
-
-#ifdef __s390x__
-#define _AD	_Q64
-#else
-#define _AD	_W32
-#endif
-
-#define _B	1
-#define _G	2
-#define _L	3
-#define _O	4
-#define _P	5
-#define _S	6
-
-#define _ILL	0
-
-static struct _reldesc {
-	uint8_t op[4];
-} reldesc[] = {
-	{{ _ILL              }}, /* R_390_NONE     */
-	{{ _B8,   _S,        }}, /* R_390_8        */
-	{{ _L12,  _S,        }}, /* R_390_12       */
-	{{ _H16,  _S,        }}, /* R_390_16       */
-	{{ _W32,  _S,        }}, /* R_390_32       */
-	{{ _W32,  _S, _P     }}, /* R_390_PC32     */
-	{{ _L12,  _O,        }}, /* R_390_GOT12    */
-	{{ _W32,  _O,        }}, /* R_390_GOT32    */
-	{{ _W32,  _L,        }}, /* R_390_PLT32    */
-	{{ _ILL              }}, /* R_390_COPY     */
-	{{ _AD,   _S         }}, /* R_390_GLOB_DAT */
-	{{ _ILL              }}, /* R_390_JMP_SLOT */
-	{{ _AD,   _B         }}, /* R_390_RELATIVE */
-	{{ _AD,   _S, _G     }}, /* R_390_GOTOFF   */
-	{{ _AD,   _G, _P     }}, /* R_390_GOTPC    */
-	{{ _H16,  _O         }}, /* R_390_GOT16    */
-	{{ _H16,  _S, _P     }}, /* R_390_PC16     */
-	{{ _PC16, _S, _P     }}, /* R_390_PC16DBL  */
-	{{ _PC16, _L, _P     }}, /* R_390_PLT16DBL */
-#ifdef __s390x__
-	{{ _PC32, _S, _P     }}, /* R_390_PC32DBL  */
-	{{ _PC32, _L, _P     }}, /* R_390_PLT32DBL */
-	{{ _PC32, _G, _P     }}, /* R_390_GOTPCDBL */
-	{{ _Q64,  _S         }}, /* R_390_64       */
-	{{ _Q64,  _S, _P     }}, /* R_390_PC64     */
-	{{ _Q64,  _O         }}, /* R_390_GOT64    */
-	{{ _Q64,  _L         }}, /* R_390_PLT64    */
-	{{ _PC32, _G, _O, _P }}, /* R_390_GOTENT   */
-#endif
-};
-
 struct sysentvec elf32_freebsd_sysvec = {
 	SYS_MAXSYSCALL,
 	sysent,
@@ -133,78 +69,65 @@
 	(sysinit_cfunc_t)elf32_insert_brand_entry,
 	&freebsd_brand_info);
 
+static struct _reldesc reldesc[] = _RELDESC_INITIALIZER;
+
 static int
 elf_reloc_internal(linker_file_t lf, const void *data, int type, int local)
 {
-	Elf_Addr A, *where = NULL; /* XXX */
+	Elf_Addr value, *where;
 	const Elf_Rela *rela;
-	struct _reldesc d;
-	int t, i;
+	struct _reldesc desc;
 
-	CTR3(KTR_LD, "elf_reloc: lf = %p, data = %p, type = %d", lf, data, type);
-
-	/* S/390 and zSeries use only Elf32_Rela and Elf64_Rela respectively. */
+	/*
+	 * S/390 and zSeries use only Elf32_Rela
+	 * and Elf64_Rela respectively.
+	 */
 	if (type != ELF_RELOC_RELA)
 		return -1;
 
 	rela = (const Elf_Rela *)data;
 
-	d = reldesc[ELF_R_TYPE(rela->r_info)];
-	t = d.op[0];
-	if (t == _ILL) {
-		return -1;
-	}
+	desc = reldesc[ELF_R_TYPE(rela->r_info)];
+
+	value = rela->r_addend;
+	where = (Elf_Addr *)(lf->address + rela->r_offset);
+
+	if (desc.action & _B)
+		value += (Elf_Addr)lf->address;
 
-	A = rela->r_addend;
-	for (i = 1; d.op[i] && (i < 4); i++) {
-		switch (d.op[i]) {
-		case _B:
-			A += (Elf_Addr)lf->address;
-			break;
-		case _G:
-			CTR0(KTR_LD, "elf_reloc: unimplemented t");
-			break;
-		case _L:
-			CTR0(KTR_LD, "elf_reloc: unimplemented t");
-			break;
-		case _O:
-			CTR0(KTR_LD, "elf_reloc: unimplemented t");
-			break;
-		case _P:
-			A -= (Elf_Addr)where;
-			break;
-		case _S:
-			A += elf_lookup(lf, ELF_R_SYM(rela->r_info), 1);
-			break;
-		}
-	}
+	if (desc.action & (_S|_L))
+		value += elf_lookup(lf, ELF_R_SYM(rela->r_info), 1);
 
-	if (t & _SHIFT1) {
-		/* We need shifting with sign copying. */
-		A = ((long)A) >> 1;
-		t &= ~_SHIFT1;
-	}
+	if (desc.action & _P)
+		value -= (Elf_Addr)where;
 
-	switch (t) {
+	switch (desc.field) {
 	case _B8:
-		*(uint8_t *)where = (uint8_t)A;
+		*(uint8_t *)where = (uint8_t)value;
 		break;
 	case _L12:
-		*(uint16_t *)where += A << 4;
+		*(uint16_t *)where |= value << 4;
+		break;
+	case _PC16:
+		*(int16_t *)where = ((int16_t)value) >> 1;
 		break;
 	case _H16:
-		*(int16_t *)where = (int16_t)A;
+		*(int16_t *)where = (int16_t)value;
 		break;
 	case _W32:
-		*(int32_t *)where = (int32_t)A;
+		*(int32_t *)where = (int32_t)value;
 		break;
 #ifdef __s390x__
+	case _PC32:
+		*(int32_t *)where = ((int32_t)value) >> 1;
+		break;
 	case _Q64:
-		*where = A;
+		*where = value;
+		break;
 #endif
 	}
 
-	return 0;
+	return (0);
 }
 
 int

==== //depot/projects/s390/sys/s390/s390/external.c#5 (text+ko) ====

@@ -13,7 +13,6 @@
 #include <sys/bus.h>
 #include <sys/kernel.h>
 #include <sys/interrupt.h>
-#include <sys/ktr.h>
 #include <machine/frame.h>
 #include <machine/sysarea.h>
 #include <s390/s390/external.h>
@@ -84,8 +83,6 @@
 
 	code = sysarea.external_code;
 
-	CTR1(KTR_INTR, "Entering external interruption %#x", code);
-
 	td = curthread;
 	atomic_add_int(&td->td_intr_nesting_level, 1);
 
@@ -105,8 +102,6 @@
 	}
 
 	atomic_subtract_int(&td->td_intr_nesting_level, 1);
-
-	CTR1(KTR_INTR, "Leaving external interruption %#x", code);
 }
 
 /*

==== //depot/projects/s390/sys/s390/s390/identcpu.c#6 (text+ko) ====

@@ -58,6 +58,7 @@
 	{"9672", "Yn7", "Generation 6"},
 	{"2066", "nnn", "z800"},
 	{"2064", "nnn", "z900"},
+	{"2084", "nnn", "z990"},
 	{"nnnn", "HERCULES", "Hercules"}
 };
 
@@ -111,10 +112,10 @@
 	: [r0]"r"(r1), [r1]"r"(r1), [sysib]"a"(sysib)
 	: "r0", "r1", "cc");
 	
-	return cc;
+	return (cc);
 
 nostsi:
-	return 3;
+	return (3);
 }
 
 /*
@@ -149,15 +150,15 @@
 		mc = *model++;
 		if (mc == '\0') {
 			if (pc == '\0')
-				return 0;
+				return (0);
 			else
-				return 1;
+				return (1);
 		}
 		if ((pc != mc) && (pc != 'n'))
-			return 1;
+			return (1);
 	}
 
-	return 0;
+	return (0);
 }
 
 void

==== //depot/projects/s390/sys/s390/s390/machdep.c#11 (text+ko) ====

@@ -49,7 +49,6 @@
 #include <sys/systm.h>
 #include <sys/cons.h>
 #include <sys/kernel.h>
-#include <sys/ktr.h>
 #include <sys/linker.h>
 #include <sys/lock.h>
 #include <sys/malloc.h>
@@ -260,8 +259,6 @@
 	struct proc *p;
 	int oonstack;
 
-	CTR3(KTR_SIG, "sendsig: td = %p, sig = %d, code = %u", curthread, sig, code);
-
 	td = curthread;
 	p = td->td_proc;
 
@@ -323,8 +320,6 @@
 	psw_define_addr(&tf->tf_psw, PS_STRINGS - *(p->p_sysent->sv_szsigcode));
 	tf->tf_gpr[15] = (u_long)sfp - sizeof(struct stackframe);
 
-	CTR2(KTR_SIG, "ps_strings = %p, *sz = %d", PS_STRINGS, *(p->p_sysent->sv_szsigcode));
-
 	PROC_LOCK(p);
 }
 
@@ -345,8 +340,6 @@
 	ucontext_t uc;
 	int error;
 
-	CTR2(KTR_SIG, "sigreturn: td = %p, uap->sigcntxp = %p", td, uap->sigcntxp);
-
 	error = copyin(uap->sigcntxp, &uc, sizeof(uc));
 	if (error)
 		return (error);
@@ -400,9 +393,6 @@
 {
 	struct trapframe *tf;
 
-	CTR4(KTR_PROC, "setregs: td = %p, entry = %x, stack = %x, ps_strings = %x",
-	     td, entry, stack, ps_strings);
-
 	tf = td->td_frame;
 	bzero(tf, sizeof(*tf));
 	psw_define(&tf->tf_psw, PSW_USER, entry);
@@ -415,7 +405,7 @@
 		u_long x;
 		int argc;
 
-		CTR0(KTR_PROC, "setregs: stack not aligned properly");
+		printf("%s: stack is not aligned properly\n", __func__);
 
 		ostack = (caddr_t)stack;
 		stack &= ~7ul;

==== //depot/projects/s390/sys/s390/s390/mp_machdep.c#3 (text+ko) ====

@@ -28,8 +28,8 @@
 static u_int cpu2cpuid[MAXCPU];
 
 /*
- * There are no machines with more than 16 simultaneously
- * online CPUs at the time (July 2002).
+ * There are no machines with more than 32 simultaneously
+ * online CPUs at the time (last revised: September 2003).
  */
 static int mp_overflow;
 

==== //depot/projects/s390/sys/s390/s390/pmap.c#16 (text+ko) ====

@@ -55,14 +55,12 @@
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/ktr.h>
 #include <sys/lock.h>
 #include <sys/mman.h>
 #include <sys/msgbuf.h>
 #include <sys/smp.h>
 #include <sys/mutex.h>
 #include <sys/proc.h>
-#include <sys/sx.h>
 #include <sys/user.h>
 #include <sys/vmmeter.h>
 #include <vm/vm.h>
@@ -297,8 +295,6 @@
 	else
 		pte = (vm_offset_t)&invalid_pte;
 
-	CTR3(KTR_PMAP, "pmap_ptepa: pmap = %p, va = %x, pte = %x", pmap, va, pte);
-
 	return (pte);
 }
 
@@ -368,26 +364,20 @@
 static int
 pmap_unwire_pte_hold(pmap_t pmap, vm_page_t mpte)
 {
-	CTR2(KTR_PMAP, "pmap_unwire_pte_hold: pmap = %p, mpte = %x", pmap, mpte);
-
 	vm_page_unhold(mpte);
 	if (mpte->hold_count)
-		return 0;
+		return (0);
 
 	while (vm_page_sleep_if_busy(mpte , FALSE, "pmuph"))
 		vm_page_lock_queues();
 
 	if (mpte->hold_count == 0) {
-		CTR0(KTR_PMAP, "\tmpte_hold_count == 0");
-
 		pmap_clear_ste_quad(&pmap->pm_sto[mpte->pindex << 2]);
 
 		pmap->pm_stats.resident_count--;
 
 		/* Free the page if it is finally unwired. */
 		if (--mpte->wire_count == 0) {
-			CTR0(KTR_PMAP, "\t\tmpte->wire_count == 0");
-
 			vm_page_busy(mpte);
 			vm_page_free(mpte);
 			cnt.v_wire_count--;
@@ -400,8 +390,6 @@
 static int
 pmap_unuse_ptp(pmap_t pmap, vm_offset_t va, vm_page_t mpte)
 {
-	CTR3(KTR_PMAP, "pmap_unuse_ptp: pmap = %p, va = %x, mpte = %x", pmap, va, mpte);
-
 	if (pmap == kernel_pmap)
 		return (0);
 
@@ -422,16 +410,12 @@
 	pv_entry_t pv;
 	int rv = 0;
 
-	CTR3(KTR_PMAP, "pmap_remove_entry: pmap = %p, va = %x, pa = %x", pmap, va, VM_PAGE_TO_PHYS(m));
-
 	if (m->md.pv_list_count < pmap->pm_stats.resident_count) {
-		CTR0(KTR_PMAP, "\tpv_list_count < resident_count");
 		TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) {
 			if (pmap == pv->pv_pmap && va == pv->pv_va)
 				break;
 		}
 	} else {
-		CTR0(KTR_PMAP, "\tpv_list_count > resident_count");
 		TAILQ_FOREACH(pv, &pmap->pm_pvlist, pv_plist) {
 			if (va == pv->pv_va)
 				break;
@@ -455,8 +439,6 @@
 {
 	pv_entry_t pv;
 
-	CTR4(KTR_PMAP, "pmap_insert_entry: pmap = %p, va = %x, pa = %x, mpte = %x", pmap, va, VM_PAGE_TO_PHYS(m), mpte);
-
 	pv = pv_get();
 	pv->pv_va = va;
 	pv->pv_pmap = pmap;
@@ -477,8 +459,6 @@
 	pmap_t pmap;
 	pte_t pte;
 
-	CTR1(KTR_PMAP, "pmap_remove_all: pa = %x", VM_PAGE_TO_PHYS(m));
-
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
 	while ((pv = TAILQ_FIRST(&m->md.pv_list)) != NULL) {
 		pmap = pv->pv_pmap;
@@ -514,8 +494,6 @@
 	vm_page_t mpte;
 	int i;
 
-	CTR2(KTR_PMAP, "pmap_create_pte: pmap = %p, ptindex = %u", pmap, ptindex);
-
 	VM_OBJECT_LOCK(pmap->pm_pteobj);
 	mpte = vm_page_grab(pmap->pm_pteobj, (ptindex >> 2),
 			    VM_ALLOC_RETRY | VM_ALLOC_WIRED);
@@ -551,10 +529,7 @@
 	vm_page_t mpte;
 	ste_t ste;
 
-	CTR2(KTR_PMAP, "pmap_get_pte: pmap = %p, va = %x", pmap, va);
-
 	ste = pmap->pm_sto[ptindex];
-	CTR1(KTR_PMAP, "\tste = %x", ste);
 	if (ste_valid(ste)) {
 		mpte = PHYS_TO_VM_PAGE(ste);
 		KASSERT(mpte != NULL, ("pmap_get_pte: mpte == NULL"));
@@ -569,11 +544,9 @@
 static int
 pmap_remove_pte(pmap_t pmap, vm_paddr_t ptepa, vm_offset_t va)
 {
-	vm_page_t m;
+	vm_page_t m, mpte;
 	pte_t pte;
 
-	CTR3(KTR_PMAP, "pmap_remove_pte: pmap = %p, ptepa = %x, va = %x", pmap, ptepa, va);
-
 	ipte(ptepa);
 
 	pte = lura(ptepa);
@@ -582,8 +555,6 @@
 
 	pmap->pm_stats.resident_count--;
 	if (pte & PTE_MANAGED) {
-		CTR0(KTR_PMAP, "\tpage managed");
-
 		m = PHYS_TO_VM_PAGE(pte);
 		if (pmap_is_modified(m) && pmap_track_modified(va))
 			vm_page_dirty(m);
@@ -592,10 +563,9 @@
 
 		return pmap_remove_entry(pmap, m, va);
 	} else {
-		return pmap_unuse_ptp(pmap, va, NULL);
+		mpte = PHYS_TO_VM_PAGE(ptepa);
+		return pmap_unuse_ptp(pmap, va, mpte);
 	}
-
-	return (0);
 }
 
 static void *
@@ -613,8 +583,6 @@
 	pmap_t pmap;
 	u_long cr7;
 
-	CTR1(KTR_PMAP, "pmap_activate: td = %p", td);
-
 	pmap = vmspace_pmap(td->td_proc->p_vmspace);
 	pmap->pm_active |= PCPU_GET(cpumask);
 	stopa = vtophys(pmap->pm_sto);
@@ -626,8 +594,6 @@
 vm_offset_t
 pmap_addr_hint(vm_object_t object, vm_offset_t va, vm_size_t size)
 {
-	CTR3(KTR_PMAP, "pmap_addr_hint: object = %p, va = %x, size = %u", object, va, size);
-
 	return (va);
 }
 
@@ -637,8 +603,6 @@
 	vm_offset_t ptepa;
 	pte_t pte;
 
-	CTR3(KTR_PMAP, "pmap_change_wiring: pmap = %p, va = %x, wired = %d", pmap, va, wired);
-
 	ptepa = pmap_ptepa(pmap, va);
 	pte = lura(ptepa);
 	if (wired) {
@@ -658,8 +622,6 @@
 {
 	vm_paddr_t pa = VM_PAGE_TO_PHYS(m);
 
-	CTR1(KTR_PMAP, "pmap_clear_modify: pa = %x", pa);
-
 	sk_set(pa, sk_get(pa) & ~SK_C);
 }
 
@@ -668,8 +630,6 @@
 {
 	vm_paddr_t pa = VM_PAGE_TO_PHYS(m);
 
-	CTR1(KTR_PMAP, "pmap_clear_reference: pa = %x", pa);
-
 	__asm volatile (
 	"	rrbe	%%r0,	%[pa]"
 	:: [pa]"r"(pa) : "r0", "cc");
@@ -679,9 +639,6 @@
 pmap_copy(pmap_t dst_pmap, pmap_t src_pmap,
 	  vm_offset_t dst_addr, vm_size_t len, vm_offset_t src_addr)
 {
-	CTR5(KTR_PMAP, "pmap_copy: dst_pmap = %p, src_pmap = %p, va = %x, len = %u, src_addr = %x",
-		dst_pmap, src_pmap, dst_addr, len, src_addr);
-
 	/* Optional for perfomance */
 }
 
@@ -691,8 +648,6 @@
 	vm_paddr_t srcpa = VM_PAGE_TO_PHYS(src);
 	vm_paddr_t dstpa = VM_PAGE_TO_PHYS(dst);
 
-	CTR2(KTR_PMAP, "pmap_copy_page: srcpa = %x, dstpa = %x", srcpa, dstpa);
-
 	KASSERT(lura(csrc_ptepa) & PTE_INVALID,
 		("pmap_copy_page: csrc_ptepa busy"));
 	KASSERT(lura(cdst_ptepa) & PTE_INVALID,
@@ -715,9 +670,6 @@
 	pte_t opte, pte;
 	vm_page_t mpte;
 
-	CTR5(KTR_PMAP, "pmap_enter: pmap=%p, va = %x, pa = %x, prot = %x, wired = %d",
-		pmap, va, VM_PAGE_TO_PHYS(m), prot, wired);
-
 	KASSERT(va < VM_MAX_ADDRESS,
 		("pmap_enter: va is too big"));
 
@@ -737,8 +689,6 @@
 
 	/* If this is protection or wiring change. */
 	if (((opte & PTE_INVALID) == 0) && (pte == opa)) {
-		CTR0(KTR_PMAP, "\tprotection or wiring change");
-
 		if (wired && !pte_wired(opte))
 			pmap->pm_stats.wired_count++;
 		else if (!wired && pte_wired(opte))
@@ -775,8 +725,6 @@
 	if ((opte & PTE_INVALID) == 0) {
 		int error;
 
-		CTR0(KTR_PMAP, "\told pte valid");
-
 		vm_page_lock_queues();
 		error = pmap_remove_pte(pmap, ptepa, va);
 		vm_page_unlock_queues();
@@ -786,8 +734,6 @@
 	/* Enter on the pv list if part of our managed memory. */
 	if (pmap_initialized &&
 	    ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)) {
-		CTR0(KTR_PMAP, "\tentering on the pv list");
-
 		pmap_insert_entry(pmap, va, mpte, m);
 		pte |= PTE_MANAGED;
 	}
@@ -873,7 +819,7 @@
 }
 
 vm_page_t
-pmap_extract_and_hold(pmap_t pmap, vm_offset_t va)
+pmap_extract_and_hold(pmap_t pmap, vm_offset_t va, vm_prot_t prot)
 {
 	vm_paddr_t pa;
 	vm_page_t m;
@@ -896,7 +842,6 @@
 pmap_growkernel(vm_offset_t va)
 {
 	kernel_vm_end = 4*nkptp*SEGMENT_SIZE;
-	CTR2(KTR_PMAP, "pmap_growkernel: va = %x, kernel_vm_end = %x", va, kernel_vm_end);
 }
 
 void
@@ -904,8 +849,6 @@
 {
 	int i;
 
-	CTR2(KTR_PMAP, "pmap_init: spa = %x, epa = %x", spa, epa);
-
 	/* Allocate memory for random pmap structures. */
 	for (i = 0; i < vm_page_array_size; i++) {
 		vm_page_t m;
@@ -930,8 +873,6 @@
 {
 	int shpgperproc = PMAP_SHPGPERPROC;
 
-	CTR0(KTR_PMAP, "pmap_init2: ");
-
 	TUNABLE_INT_FETCH("vm.pmap.shpgperproc", &shpgperproc);
 	pv_entry_max = shpgperproc * maxproc + vm_page_array_size;
 	TUNABLE_INT_FETCH("vm.pmap.pv_entries", &pv_entry_max);
@@ -944,8 +885,6 @@
 {
 	vm_paddr_t pa = VM_PAGE_TO_PHYS(m);
 
-	CTR1(KTR_PMAP, "pmap_is_modified: pa = %x", pa);
-
 	if (!pmap_initialized || (m->flags & PG_FICTITIOUS))
 		return FALSE;
 
@@ -957,8 +896,6 @@
 {
 	vm_paddr_t ptepa;
 
-	CTR2(KTR_PMAP, "pmap_kenter: va = %x, pa = %x", va, pa);
-
 	ptepa = pmap_ptepa(kernel_pmap, va);
 	ipte(ptepa);
 	stura(ptepa, pa);
@@ -978,8 +915,6 @@
 void
 pmap_kremove(vm_offset_t va)
 {
-	CTR1(KTR_PMAP, "pmap_kremove: va = %x", va);
-
 	ipte(pmap_ptepa(kernel_pmap, va));
 }
 
@@ -988,8 +923,6 @@
 {
 	vm_offset_t va, sva;
 
-	CTR4(KTR_PMAP, "pmap_map: vap = %p, spa = %x, epa = %x, prot = %d", vap, spa, epa, prot);
-
 	va = sva = *vap;
 	for (; spa < epa; va += PAGE_SIZE, spa += PAGE_SIZE)
 		pmap_kenter(va, spa);
@@ -1005,8 +938,6 @@
 	pte_t pte;
 	int rv;
 
-	CTR2(KTR_PMAP, "pmap_mincore: pmap = %p, va = %x", pmap, va);
-
 	pte = lura(pmap_ptepa(pmap, va));
 	if (!pte_valid(pte))
 		return (0);
@@ -1042,8 +973,6 @@
 	pv_entry_t pv;
 	int loops = 0;
 
-	CTR2(KTR_PMAP, "pmap_page_exists_quick: pmap = %p, pa = %x", pmap, VM_PAGE_TO_PHYS(m));
-
 	if (m->flags & PG_FICTITIOUS)
 		return FALSE;
 
@@ -1063,7 +992,6 @@
 	vm_offset_t pa = VM_PAGE_TO_PHYS(m);
 
 panic("GGGG: %s", __func__);
-	CTR2(KTR_PMAP, "pmap_page_protect: pa = %x, prot = %d", pa, prot);
 
 	KASSERT((prot == VM_PROT_READ) || (prot == VM_PROT_NONE),
 		("pmap_page_protect: unexpected prot"));
@@ -1080,11 +1008,10 @@
 void
 pmap_pinit(pmap_t pmap)
 {
+	static int color;
 	vm_page_t stpg;
 	int i;
 
-	CTR1(KTR_PMAP, "pmap_pinit: pmap = %p", pmap);
-
 	if (pmap->pm_sto == NULL)
 		pmap->pm_sto = (ste_t *)
 			kmem_alloc_pageable(kernel_map, PAGE_SIZE);
@@ -1092,15 +1019,19 @@
 	if (pmap->pm_pteobj == NULL)
 		pmap->pm_pteobj = vm_object_allocate(OBJT_DEFAULT, NPTP + 1);
 
-	VM_OBJECT_LOCK(pmap->pm_pteobj);
-	stpg = vm_page_grab(pmap->pm_pteobj, NPTP,
-			    VM_ALLOC_NORMAL | VM_ALLOC_RETRY |
-			    VM_ALLOC_WIRED);
-	vm_page_lock_queues();
-	vm_page_flag_clear(stpg, PG_BUSY);
-	stpg->valid = VM_PAGE_BITS_ALL;
-	vm_page_unlock_queues();
-	VM_OBJECT_UNLOCK(pmap->pm_pteobj);
+	for (;;) {
+		stpg = vm_page_alloc(NULL, color++,
+				     VM_ALLOC_NORMAL | VM_ALLOC_WIRED |
+				     VM_ALLOC_NOOBJ);
+		if (stpg == NULL) {
+			VM_WAIT;
+		} else {
+			vm_page_lock_queues();
+			vm_page_flag_clear(stpg, PG_BUSY);
+			stpg->valid = VM_PAGE_BITS_ALL;
+			vm_page_unlock_queues();
+		}
+	}
 
 	pmap_kenter((vm_offset_t)pmap->pm_sto, VM_PAGE_TO_PHYS(stpg));
 	for (i = 0; i < 4*NPTP; i++)
@@ -1114,8 +1045,6 @@
 void
 pmap_pinit0(pmap_t pmap)
 {
-	CTR1(KTR_PMAP, "pmap_pinit0: pmap = %p", pmap);
-
 	pmap->pm_sto = proc0sto;
 	pmap->pm_active = 0;
 	TAILQ_INIT(&pmap->pm_pvlist);
@@ -1131,7 +1060,6 @@
 void
 pmap_prefault(pmap_t pmap, vm_offset_t va, vm_map_entry_t entry)
 {
-	CTR3(KTR_PMAP, "pmap_prefault: pmap = %p, va = %x, entry = %p", pmap, va, entry);
 	/* optional */

>>> TRUNCATED FOR MAIL (1000 lines) <<<



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200309250614.h8P6Eqf6060880>