<rss version="2.0">
<channel>
<title>mailing.openbsd.tech</title>
<link>http://www.nnseek.com/e/mailing.openbsd.tech/</link>
<description>Posts for mailing.openbsd.tech</description>
<lastBuildDate>Fri, 05 Sep 2008 17:01:13 PDT</lastBuildDate>
  <image>
    <title>http://www.nnseek.com/</title>
    <link>http://www.nnseek.com/</link>
    <url>http://www.nnseek.com/img/64.png</url>
    <width>64</width>
    <height>64</height>
    <description>NNSeek</description>
  </image>
<item>
	<title><![CDATA[truss]]></title>
	<guid>http://www.nnseek.com/e/mailing.openbsd.tech/truss_91699106t.html</guid>
	<link>http://www.nnseek.com/e/mailing.openbsd.tech/truss_91699106t.html</link>
	<description><![CDATA[This diff makes some changes to ktracing and introduces a new<br>fktrace() syscall (like NetBSD) allowing for a truss-like program.<br><br>Included is also a diff that makes a few modifications to kdump<br>to support the new feature and links a new ktruss program to it.<br><br>Installation instructions:<br>  - install this patch:<br>	# cd /usr/src && patch < ktruss.diff<br>  - rebuild syscalls:<br>	# cd /sys/kern && sh makesyscalls.sh <a href="http://syscalls.conf" rel="nofollow" class="url" target="_blank">syscalls.conf</a> syscalls.master<br>  - build, install and boot into new kernel:<br>	see <a href="http://www.openbsd.org/faq/faq5.html" rel="nofollow" class="url" target="_blank">http://www.openbsd.org/faq/faq5.html</a>#BldKernel<br>  - install new headers:<br>	# cd /usr/src/include<br>	# make prereq<br>	# make includes<br>  - update libc:<br>	# cd /usr/src/lib/libc<br>	# rm -rf /usr/obj/lib/libc<br>	# make obj && make depend && make && make install<br>  - update kdump:<br>	# cd /usr/src/usr.bin/kdump<br>	# rm -rf /usr/obj/usr.bin/kdump<br>	# make obj && make depend && make && make install<br><br>Confession: some ideas I stole from NetBSD.<br><br>Index: lib/libc/sys/Makefile.inc<br>===================================================================<br>RCS file: /cvs/src/lib/libc/sys/Makefile.inc,v<br>retrieving revision 1.85<br>diff -u -p -r1.85 Makefile.inc<br>--- lib/libc/sys/Makefile.inc	22 Mar 2008 19:18:42 -0000	1.85<br>+++ lib/libc/sys/Makefile.inc	5 Sep 2008 22:25:46 -0000<br>@@ -38,7 +38,7 @@ ASM=	accept.o access.o acct.o adjfreq.o <br> 	chown.o chroot.o clock_gettime.o clock_settime.o clock_getres.o \<br> 	close.o closefrom.o connect.o dup.o dup2.o execve.o fchdir.o \<br> 	fchflags.o fchmod.o fchown.o fcntl.o fhopen.o fhstat.o fhstatfs.o \<br>-	flock.o fpathconf.o fstat.o \<br>+	fktrace.o flock.o fpathconf.o fstat.o \<br> 	fstatfs.o fsync.o futimes.o getdirentries.o getegid.o geteuid.o \<br> 	getfh.o getfsstat.o getgid.o getgroups.o getitimer.o getpeereid.o \<br> 	getpeername.o \<br>Index: sys/kern/kern_exec.c<br>===================================================================<br>RCS file: /cvs/src/sys/kern/kern_exec.c,v<br>retrieving revision 1.106<br>diff -u -p -r1.106 kern_exec.c<br>--- sys/kern/kern_exec.c	13 Feb 2008 19:31:22 -0000	1.106<br>+++ sys/kern/kern_exec.c	5 Sep 2008 22:26:05 -0000<br>@@ -499,10 +499,8 @@ sys_execve(struct proc *p, void *v, regi<br> 		 * If process is being ktraced, turn off - unless<br> 		 * root set it.<br> 		 */<br>-		if (p->p_tracep && !(p->p_traceflag & KTRFAC_ROOT)) {<br>-			p->p_traceflag = 0;<br>-			ktrsettracevnode(p, NULL);<br>-		}<br>+		if (p->p_tracep && !(p->p_traceflag & KTRFAC_ROOT))<br>+			ktrcleartracefile(p);<br> #endif<br> 		p->p_ucred = crcopy(cred);<br> 		if (attr.va_mode & VSUID)<br>Index: sys/kern/kern_exit.c<br>===================================================================<br>RCS file: /cvs/src/sys/kern/kern_exit.c,v<br>retrieving revision 1.73<br>diff -u -p -r1.73 kern_exit.c<br>--- sys/kern/kern_exit.c	11 May 2008 23:54:40 -0000	1.73<br>+++ sys/kern/kern_exit.c	5 Sep 2008 22:26:05 -0000<br>@@ -224,9 +224,8 @@ exit1(struct proc *p, int rv, int flags)<br> 	/* <br> 	 * release trace file<br> 	 */<br>-	p->p_traceflag = 0;	/* don't trace the vrele() */<br> 	if (p->p_tracep)<br>-		ktrsettracevnode(p, NULL);<br>+		ktrcleartracefile(p);<br> #endif<br> #if NSYSTRACE > 0<br> 	if (ISSET(p->p_flag, P_SYSTRACE))<br>Index: sys/kern/kern_fork.c<br>===================================================================<br>RCS file: /cvs/src/sys/kern/kern_fork.c,v<br>retrieving revision 1.95<br>diff -u -p -r1.95 kern_fork.c<br>--- sys/kern/kern_fork.c	11 May 2008 23:54:40 -0000	1.95<br>+++ sys/kern/kern_fork.c	5 Sep 2008 22:26:05 -0000<br>@@ -327,8 +327,7 @@ fork1(struct proc *p1, int exitsig, int <br> 	 */<br> 	if (p1->p_traceflag & KTRFAC_INHERIT) {<br> 		p2->p_traceflag = p1->p_traceflag;<br>-		if ((p2->p_tracep = p1->p_tracep) != NULL)<br>-			VREF(p2->p_tracep);<br>+		ktrsettracefile(p2, p1->p_tracep);<br> 	}<br> #endif<br> <br>Index: sys/kern/kern_ktrace.c<br>===================================================================<br>RCS file: /cvs/src/sys/kern/kern_ktrace.c,v<br>retrieving revision 1.43<br>diff -u -p -r1.43 kern_ktrace.c<br>--- sys/kern/kern_ktrace.c	22 May 2008 17:04:59 -0000	1.43<br>+++ sys/kern/kern_ktrace.c	5 Sep 2008 22:26:05 -0000<br>@@ -39,6 +39,7 @@<br> #include <sys/proc.h><br> #include <sys/sched.h><br> #include <sys/file.h><br>+#include <sys/filedesc.h><br> #include <sys/namei.h><br> #include <sys/vnode.h><br> #include <sys/ktrace.h><br>@@ -53,31 +54,42 @@<br> #include <uvm/uvm_extern.h><br> <br> void ktrinitheader(struct ktr_header *, struct proc *, int);<br>-int ktrops(struct proc *, struct proc *, int, int, struct vnode *);<br>-int ktrsetchildren(struct proc *, struct proc *, int, int,<br>-			struct vnode *);<br>+int ktrops(struct proc *, struct proc *, int, int, struct file *);<br>+int ktrsetchildren(struct proc *, struct proc *, int, int, struct file *);<br> int ktrwrite(struct proc *, struct ktr_header *);<br> int ktrcanset(struct proc *, struct proc *);<br>+int ktrcommon(struct proc *, struct file *, int, int, pid_t);<br> <br> /*<br>- * Change the trace vnode in a correct way (to avoid races).<br>+ * Change the trace file in a correct way (to avoid races).<br>  */<br> void<br>-ktrsettracevnode(struct proc *p, struct vnode *newvp)<br>+ktrsettracefile(struct proc *p, struct file *fp)<br> {<br>-	struct vnode *vp;<br>+	struct file *oldfp;<br> <br>-	if (p->p_tracep == newvp)	/* avoid work */<br>+	if (p->p_tracep && p->p_tracep == fp)		/* avoid work */<br> 		return;<br> <br>-	if (newvp != NULL)<br>-		VREF(newvp);<br>+	FREF(fp);<br> <br>-	vp = p->p_tracep;<br>-	p->p_tracep = newvp;<br>+	oldfp = p->p_tracep;<br>+	p->p_tracep = fp;<br> <br>-	if (vp != NULL)<br>-		vrele(vp);<br>+	if (oldfp)<br>+		closef(oldfp, p);<br>+}<br>+<br>+void<br>+ktrcleartracefile(struct proc *p)<br>+{<br>+	struct file *fp;<br>+<br>+	p->p_traceflag = 0;		/* prevent tracing of vrele */<br>+	fp = p->p_tracep;<br>+	p->p_tracep = NULL;<br>+	if (fp)<br>+		closef(fp, p);<br> }<br> <br> void<br>@@ -87,7 +99,7 @@ ktrinitheader(struct ktr_header *kth, st<br> 	kth->ktr_type = type;<br> 	microtime(&kth->ktr_time);<br> 	kth->ktr_pid = p->p_pid;<br>-	bcopy(p->p_comm, kth->ktr_comm, MAXCOMLEN);	<br>+	bcopy(p->p_comm, kth->ktr_comm, MAXCOMLEN);<br> }<br> <br> void<br>@@ -232,7 +244,6 @@ ktrgenio(struct proc *p, int fd, enum ui<br> <br> 	free(ktp, M_TEMP);<br> 	p->p_traceflag &= ~KTRFAC_ACTIVE;<br>-	<br> }<br> <br> void<br>@@ -280,7 +291,7 @@ ktrcsw(struct proc *p, int out, int user<br>  */<br> /* ARGSUSED */<br> int<br>-sys_ktrace(struct proc *curp, void *v, register_t *retval)<br>+sys_ktrace(struct proc *p, void *v, register_t *retval)<br> {<br> 	struct sys_ktrace_args /* {<br> 		syscallarg(const char *) fname;<br>@@ -288,122 +299,174 @@ sys_ktrace(struct proc *curp, void *v, r<br> 		syscallarg(int) facs;<br> 		syscallarg(pid_t) pid;<br> 	} */ *uap = v;<br>-	struct vnode *vp = NULL;<br>-	struct proc *p = NULL;<br>-	struct pgrp *pg;<br>-	int facs = SCARG(uap, facs) & ~((unsigned) KTRFAC_ROOT);<br>-	int ops = KTROP(SCARG(uap, ops));<br>-	int descend = SCARG(uap, ops) & KTRFLAG_DESCEND;<br>-	int ret = 0;<br>-	int error = 0;<br>+	struct file *fp = NULL;<br>+	struct vnode *vp;<br> 	struct nameidata nd;<br>+	int fd, error, ops = SCARG(uap, ops);<br> <br>-	curp->p_traceflag |= KTRFAC_ACTIVE;<br>-	if (ops != KTROP_CLEAR) {<br>+	p->p_traceflag |= KTRFAC_ACTIVE;<br>+	if (KTROP(ops) == KTROP_SET) {<br> 		/*<br>-		 * an operation which requires a file argument.<br>+		 * The process file table is used to store the<br>+		 * trace file struct until we return.<br> 		 */<br>-		NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, SCARG(uap, fname),<br>-		    curp);<br>-		if ((error = vn_open(&nd, FREAD|FWRITE|O_NOFOLLOW, 0)) != 0) {<br>-			curp->p_traceflag &= ~KTRFAC_ACTIVE;<br>-			return (error);<br>+		fdplock(p->p_fd);<br>+		if ((error = falloc(p, &fp, &fd)) != 0) {<br>+			fdpunlock(p->p_fd);<br>+			goto done;<br> 		}<br>-		vp = nd.ni_vp;<br> <br>-		VOP_UNLOCK(vp, 0, curp);<br>+		NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, SCARG(uap, fname), p);<br>+		if ((error = vn_open(&nd, FWRITE, 0)) != 0)<br>+			goto done;<br>+		vp = nd.ni_vp;<br>+		VOP_UNLOCK(vp, 0, p);<br> 		if (vp->v_type != VREG) {<br>-			(void) vn_close(vp, FREAD|FWRITE, curp->p_ucred, curp);<br>-			curp->p_traceflag &= ~KTRFAC_ACTIVE;<br>-			return (EACCES);<br>+			error = EACCES;<br>+			goto done;<br> 		}<br>+		fp->f_flag = FWRITE;<br>+		fp->f_type = DTYPE_VNODE;<br>+		fp->f_ops = &vnops;<br>+		fp->f_data = vp;<br>+		FILE_SET_MATURE(fp);<br>+	}<br>+	error = ktrcommon(p, fp, SCARG(uap, ops), SCARG(uap, facs),<br>+	    SCARG(uap, pid));<br>+ done:<br>+	if (fp) {<br>+		fdremove(p->p_fd, fd);<br>+		fdpunlock(p->p_fd);<br>+	}<br>+	p->p_traceflag &= ~KTRFAC_ACTIVE;<br>+	return (error);<br>+}<br>+<br>+/*<br>+ * fktrace system call<br>+ */<br>+/* ARGSUSED */<br>+int<br>+sys_fktrace(struct proc *p, void *v, register_t *retval)<br>+{<br>+	struct sys_fktrace_args /* {<br>+		syscallarg(int) fd;<br>+		syscallarg(int) ops;<br>+		syscallarg(int) facs;<br>+		syscallarg(pid_t) pid;<br>+	} */ *uap = v;<br>+	struct file *fp = NULL;<br>+	int error;<br>+<br>+	p->p_traceflag |= KTRFAC_ACTIVE;<br>+	if ((fp = fd_getfile(p->p_fd, SCARG(uap, fd))) == NULL) {<br>+		error = EBADF;<br>+		goto done;<br> 	}<br>+	if ((fp->f_flag & FWRITE) == 0)<br>+		error = EACCES;<br>+	else<br>+		error = ktrcommon(p, fp, SCARG(uap, ops),<br>+		    SCARG(uap, facs), SCARG(uap, pid));<br>+	if (KTROP(SCARG(uap, ops)) == KTROP_SET && !error)<br>+		fp->f_count++;<br>+done:<br>+	p->p_traceflag &= ~KTRFAC_ACTIVE;<br>+	return (error);<br>+}<br>+<br>+/*<br>+ * Do initialization common to both sys_ktrace() and sys_fktrace().<br>+ * Expects a file pointer and descriptor index to the tracefile.<br>+ */<br>+int<br>+ktrcommon(struct proc *curp, struct file *fp, int ops, int facs, pid_t pid)<br>+{<br>+	int descend, ret = 0, error = 0;<br>+	struct pgrp *pg;<br>+	struct proc *p;<br>+<br>+	facs &= ~KTRFAC_ROOT;<br>+	descend = ops & KTRFLAG_DESCEND;<br>+	ops = KTROP(ops);<br>+<br>+	if (ops != KTROP_CLEAR && ops != KTROP_CLEARFILE && ops != KTROP_SET)<br>+		return (EINVAL);<br>+	if (ops == KTROP_CLEAR || ops == KTROP_CLEARFILE)<br>+		fp = p->p_tracep;<br>+<br> 	/*<br>-	 * Clear all uses of the tracefile<br>+	 * Clear all uses of the tracefile.<br> 	 */<br> 	if (ops == KTROP_CLEARFILE) {<br>-		LIST_FOREACH(p, &allproc, p_list) {<br>-			if (p->p_tracep == vp) {<br>-				if (ktrcanset(curp, p)) {<br>-					p->p_traceflag = 0;<br>-					ktrsettracevnode(p, NULL);<br>-				} else<br>+		LIST_FOREACH(p, &allproc, p_list)<br>+			if (p->p_tracep->f_data == fp->f_data) {<br>+				if (ktrcanset(curp, p))<br>+					ktrcleartracefile(p);<br>+				else<br> 					error = EPERM;<br> 			}<br>-		}<br>-		goto done;<br>+		return (error);<br> 	}<br> 	/*<br> 	 * need something to (un)trace (XXX - why is this here?)<br> 	 */<br>-	if (!facs) {<br>-		error = EINVAL;<br>-		goto done;<br>-	}<br>-	/* <br>+	if (!facs)<br>+		return (EINVAL);<br>+	/*<br> 	 * do it<br> 	 */<br>-	if (SCARG(uap, pid) < 0) {<br>+	if (pid < 0) {<br> 		/*<br> 		 * by process group<br> 		 */<br>-		pg = pgfind(-SCARG(uap, pid));<br>-		if (pg == NULL) {<br>-			error = ESRCH;<br>-			goto done;<br>-		}<br>+		pg = pgfind(-pid);<br>+		if (pg == NULL)<br>+			return (ESRCH);<br> 		LIST_FOREACH(p, &pg->pg_members, p_pglist)<br> 			if (descend)<br>-				ret |= ktrsetchildren(curp, p, ops, facs, vp);<br>-			else <br>-				ret |= ktrops(curp, p, ops, facs, vp);<br>-					<br>+				ret |= ktrsetchildren(curp, p, ops, facs, fp);<br>+			else<br>+				ret |= ktrops(curp, p, ops, facs, fp);<br> 	} else {<br> 		/*<br> 		 * by pid<br> 		 */<br>-		p = pfind(SCARG(uap, pid));<br>-		if (p == NULL) {<br>-			error = ESRCH;<br>-			goto done;<br>-		}<br>+		p = pfind(pid);<br>+		if (p == NULL)<br>+			return (ESRCH);<br> 		if (descend)<br>-			ret |= ktrsetchildren(curp, p, ops, facs, vp);<br>+			ret |= ktrsetchildren(curp, p, ops, facs, fp);<br> 		else<br>-			ret |= ktrops(curp, p, ops, facs, vp);<br>+			ret |= ktrops(curp, p, ops, facs, fp);<br> 	}<br> 	if (!ret)<br> 		error = EPERM;<br>-done:<br>-	if (vp != NULL)<br>-		(void) vn_close(vp, FWRITE, curp->p_ucred, curp);<br>-	curp->p_traceflag &= ~KTRFAC_ACTIVE;<br> 	return (error);<br> }<br> <br> int<br>-ktrops(struct proc *curp, struct proc *p, int ops, int facs, struct vnode *vp)<br>+ktrops(struct proc *curp, struct proc *p, int ops, int facs, struct file *fp)<br> {<br> <br> 	if (!ktrcanset(curp, p))<br> 		return (0);<br>+<br> 	if (ops == KTROP_SET) {<br>-		ktrsettracevnode(p, vp);<br>+		ktrsettracefile(p, fp);<br> 		p->p_traceflag |= facs;<br> 		if (curp->p_ucred->cr_uid == 0)<br> 			p->p_traceflag |= KTRFAC_ROOT;<br>-	} else {	<br>+	} else {<br> 		/* KTROP_CLEAR */<br>-		if (((p->p_traceflag &= ~facs) & KTRFAC_MASK) == 0) {<br>+		if (((p->p_traceflag &= ~facs) & KTRFAC_MASK) == 0)<br> 			/* no more tracing */<br>-			p->p_traceflag = 0;<br>-			ktrsettracevnode(p, NULL);<br>-		}<br>+			ktrcleartracefile(p);<br> 	}<br> <br> 	/*<br> 	 * Emit an emulation record, every time there is a ktrace<br>-	 * change/attach request. <br>+	 * change/attach request.<br> 	 */<br> 	if (KTRPOINT(p, KTR_EMUL))<br> 		ktremul(p, p->p_emul->e_name);<br>@@ -413,14 +476,14 @@ ktrops(struct proc *curp, struct proc *p<br> <br> int<br> ktrsetchildren(struct proc *curp, struct proc *top, int ops, int facs,<br>-    struct vnode *vp)<br>+    struct file *fp)<br> {<br> 	struct proc *p;<br> 	int ret = 0;<br> <br> 	p = top;<br> 	for (;;) {<br>-		ret |= ktrops(curp, p, ops, facs, vp);<br>+		ret |= ktrops(curp, p, ops, facs, fp);<br> 		/*<br> 		 * If this process has children, descend to them next,<br> 		 * otherwise do any siblings, and if done with this level,<br>@@ -447,10 +510,11 @@ ktrwrite(struct proc *p, struct ktr_head<br> 	struct uio auio;<br> 	struct iovec aiov[2];<br> 	int error;<br>-	struct vnode *vp = p->p_tracep;<br>+	struct file *fp = p->p_tracep;<br> <br>-	if (vp == NULL)<br>+	if (fp == NULL)<br> 		return 0;<br>+<br> 	auio.uio_iov = &aiov[0];<br> 	auio.uio_offset = 0;<br> 	auio.uio_segflg = UIO_SYSSPACE;<br>@@ -466,31 +530,27 @@ ktrwrite(struct proc *p, struct ktr_head<br> 		aiov[1].iov_len = kth->ktr_len;<br> 		auio.uio_resid += kth->ktr_len;<br> 	}<br>-	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);<br>-	error = VOP_WRITE(vp, &auio, IO_UNIT|IO_APPEND, p->p_ucred);<br>-	VOP_UNLOCK(vp, 0, p);<br>+	error = (*fp->f_ops->fo_write)(fp, &fp->f_offset, &auio, fp->f_cred);<br> 	if (!error)<br>-		return 0;<br>+		return (0);<br>+<br> 	/*<br>-	 * If error encountered, give up tracing on this vnode.<br>+	 * If an error is encountered, give up tracing to this file.<br> 	 */<br> 	log(LOG_NOTICE, "ktrace write failed, errno %%d, tracing stopped\n",<br> 	    error);<br>-	LIST_FOREACH(p, &allproc, p_list) {<br>-		if (p->p_tracep == vp) {<br>-			p->p_traceflag = 0;<br>-			ktrsettracevnode(p, NULL);<br>-		}<br>-	}<br>-<br>-	return error;<br>+	LIST_FOREACH(p, &allproc, p_list)<br>+		if (p->p_tracep &&<br>+		    p->p_tracep->f_data == fp->f_data)<br>+			ktrcleartracefile(p);<br>+	return (error);<br> }<br> <br> /*<br>  * Return true if caller has permission to set the ktracing state<br>  * of target.  Essentially, the target can't possess any<br>  * more permissions than the caller.  KTRFAC_ROOT signifies that<br>- * root previously set the tracing status on the target process, and <br>+ * root previously set the tracing status on the target process, and<br>  * so, only root may further change it.<br>  *<br>  * TODO: check groups.  use caller effective gid.<br>@@ -513,4 +573,4 @@ ktrcanset(struct proc *callp, struct pro<br> 	return (0);<br> }<br> <br>-#endif<br>+#endif /* KTRACE */<br>Index: sys/kern/syscalls.master<br>===================================================================<br>RCS file: /cvs/src/sys/kern/syscalls.master,v<br>retrieving revision 1.90<br>diff -u -p -r1.90 syscalls.master<br>--- sys/kern/syscalls.master	16 Mar 2008 19:42:57 -0000	1.90<br>+++ sys/kern/syscalls.master	5 Sep 2008 22:26:06 -0000<br>@@ -618,3 +618,7 @@<br> 308	STD		{ int sys_fstatfs(int fd, struct statfs *buf); }<br> 309	STD		{ int sys_fhstatfs(const fhandle_t *fhp, \<br> 			    struct statfs *buf); }<br>+<br>+#ifdef KTRACE<br>+310	STD		{ int sys_fktrace(int fd, int ops, int facs, pid_t pid); }<br>+#endif<br>Index: sys/sys/ktrace.h<br>===================================================================<br>RCS file: /cvs/src/sys/sys/ktrace.h,v<br>retrieving revision 1.9<br>diff -u -p -r1.9 ktrace.h<br>--- sys/sys/ktrace.h	17 May 2006 02:11:25 -0000	1.9<br>+++ sys/sys/ktrace.h	5 Sep 2008 22:26:07 -0000<br>@@ -158,6 +158,7 @@ struct ktr_csw {<br> #include <sys/cdefs.h><br> <br> __BEGIN_DECLS<br>+int	fktrace(int, int, int, pid_t);<br> int	ktrace(const char *, int, int, pid_t);<br> __END_DECLS<br> <br>@@ -171,6 +172,7 @@ void ktrpsig(struct proc *, int, sig_t, <br> void ktrsyscall(struct proc *, register_t, size_t, register_t []);<br> void ktrsysret(struct proc *, register_t, int, register_t);<br> <br>-void ktrsettracevnode(struct proc *, struct vnode *);<br>+void ktrcleartracefile(struct proc *);<br>+void ktrsettracefile(struct proc *, struct file *);<br> <br> #endif	/* !_KERNEL */<br>Index: sys/sys/proc.h<br>===================================================================<br>RCS file: /cvs/src/sys/sys/proc.h,v<br>retrieving revision 1.103<br>diff -u -p -r1.103 proc.h<br>--- sys/sys/proc.h	5 May 2008 15:37:41 -0000	1.103<br>+++ sys/sys/proc.h	5 Sep 2008 22:26:07 -0000<br>@@ -206,7 +206,7 @@ struct proc {<br> 	u_quad_t p_iticks;		/* Statclock hits processing intr. */<br> <br> 	int	p_traceflag;		/* Kernel trace points. */<br>-	struct	vnode *p_tracep;	/* Trace to vnode. */<br>+	struct	file *p_tracep;		/* Trace data to file. */<br> <br> 	void	*p_systrace;		/* Back pointer to systrace */<br> <br>Index: usr.bin/kdump/Makefile<br>===================================================================<br>RCS file: /cvs/src/usr.bin/kdump/Makefile,v<br>retrieving revision 1.16<br>diff -u -p -r1.16 Makefile<br>--- usr.bin/kdump/Makefile	31 Jul 2005 10:11:19 -0000	1.16<br>+++ usr.bin/kdump/Makefile	5 Sep 2008 22:26:08 -0000<br>@@ -3,7 +3,9 @@<br> LDSTATIC=${STATIC}<br> PROG=	kdump<br> CFLAGS+=-I${.CURDIR}/../ktrace -I${.CURDIR} -I${.CURDIR}/../../sys<br>-SRCS=	kdump.c ioctl.c subr.c<br>+SRCS=	kdump.c ioctl.c subr.c ktruss.c<br>+LINKS+=	${BINDIR}/kdump ${BINDIR}/ktruss<br>+MAN=	kdump.1 ktruss.1<br> .PATH:	${.CURDIR}/../ktrace<br> CLEANFILES+=ioctl.c<br> <br>Index: usr.bin/kdump/kdump.c<br>===================================================================<br>RCS file: /cvs/src/usr.bin/kdump/kdump.c,v<br>retrieving revision 1.39<br>diff -u -p -r1.39 kdump.c<br>--- usr.bin/kdump/kdump.c	29 May 2007 02:01:03 -0000	1.39<br>+++ usr.bin/kdump/kdump.c	5 Sep 2008 22:26:08 -0000<br>@@ -163,6 +163,18 @@ static void setemul(const char *);<br> static void usage(void);<br> <br> int<br>+is_ktruss(const char *name)<br>+{<br>+	const char *s;<br>+<br>+	if ((s = strrchr(name, '/')) != NULL)<br>+		name = s;<br>+	if (strcmp(name, "ktruss") == 0)<br>+		return (1);<br>+	return (0);<br>+}<br>+<br>+int<br> main(int argc, char *argv[])<br> {<br> 	int ch, silent;<br>@@ -172,6 +184,9 @@ main(int argc, char *argv[])<br> <br> 	current = &emulations[0];	/* native */<br> <br>+	if (is_ktruss(argv[0]))<br>+		return (ktruss_main(argc, argv));<br>+<br> 	while ((ch = getopt(argc, argv, "e:f:dlm:nRp:Tt:xX")) != -1)<br> 		switch (ch) {<br> 		case 'e':<br>@@ -217,12 +232,21 @@ main(int argc, char *argv[])<br> 		}<br> 	if (argc > optind)<br> 		usage();<br>+	if (!freopen(tracefile, "r", stdin))<br>+		err(1, "%%s", tracefile);<br>+	dump(trpoints);<br>+	exit(0);<br>+}<br>+<br>+void<br>+dump(int trpoints)<br>+{<br>+	int ktrlen, size, silent;<br>+	void *m;<br> <br> 	m = malloc(size = 1025);<br> 	if (m == NULL)<br> 		err(1, NULL);<br>-	if (!freopen(tracefile, "r", stdin))<br>-		err(1, "%%s", tracefile);<br> 	while (fread_tail(&ktr_header, sizeof(struct ktr_header), 1)) {<br> 		silent = 0;<br> 		if (pid != -1 && pid != ktr_header.ktr_pid)<br>@@ -271,7 +295,6 @@ main(int argc, char *argv[])<br> 		if (tail)<br> 			(void)fflush(stdout);<br> 	}<br>-	exit(0);<br> }<br> <br> static int<br>Index: usr.bin/kdump/kdump.h<br>===================================================================<br>RCS file: /cvs/src/usr.bin/kdump/kdump.h,v<br>retrieving revision 1.1<br>diff -u -p -r1.1 kdump.h<br>--- usr.bin/kdump/kdump.h	2 Jul 2003 20:54:17 -0000	1.1<br>+++ usr.bin/kdump/kdump.h	5 Sep 2008 22:26:08 -0000<br>@@ -1,3 +1,4 @@<br>+/*	$OpenBSD$	*/<br> /*<br>  * Copyright (c) 2003 Theo de Raadt <deraadt@<a href="http://openbsd.org" rel="nofollow" class="url" target="_blank">openbsd.org</a>><br>  *<br>@@ -15,3 +16,7 @@<br>  */<br> <br> const char *ioctlname(unsigned long);<br>+int ktruss_main(int, char *[]);<br>+void dump(int);<br>+<br>+extern int timestamp;<br>Index: usr.bin/kdump/ktruss.1<br>===================================================================<br>RCS file: usr.bin/kdump/ktruss.1<br>diff -N usr.bin/kdump/ktruss.1<br>--- /dev/null	1 Jan 1970 00:00:00 -0000<br>+++ usr.bin/kdump/ktruss.1	5 Sep 2008 22:26:08 -0000<br>@@ -0,0 +1,73 @@<br>+.\" $OpenBSD$<br>+.\" Written by Jared Yanovich <jaredy@<a href="http://openbsd.org" rel="nofollow" class="url" target="_blank">openbsd.org</a>><br>+.\" Public domain, 2008/09/05.<br>+.Dd September 5, 2008<br>+.Dt KTRUSS 1<br>+.Os<br>+.Sh NAME<br>+.Nm ktruss<br>+.Nd trace system calls<br>+.Sh SYNOPSIS<br>+.Bk -words<br>+.Nm ktruss<br>+.Op Fl Ddf<br>+.Op Fl o Ar file<br>+.Ar command<br>+.Op Ar argument ...<br>+.Nm ktruss<br>+.Op Fl Ddf<br>+.Op Fl o Ar file<br>+.Fl p Ar pid<br>+.Ek<br>+.Sh DESCRIPTION<br>+The<br>+.Nm<br>+utility traces the system calls made by a process.<br>+.Nm<br>+can attach to a live process or start a new one and attach to it<br>+immediately.<br>+.Pp<br>+This following options are available:<br>+.Bl -tag -width indent<br>+.It Fl D<br>+Display the elapsed time between each system call.<br>+.It Fl d<br>+Display an absolute date at the time of each system call.<br>+.It Fl f<br>+Follow any<br>+.Xr fork 2<br>+operations that the given process makes and trace the child processes<br>+generated by such operations.<br>+When attaching to live processes (see<br>+.Fl p ) ,<br>+tracing will descend to include any child processes of the target<br>+process as well.<br>+.It Fl o Ar file<br>+Send the output to the given<br>+.Ar file<br>+instead of to standard output by default.<br>+.It Fl p Ar pid<br>+Attach to and trace the live process with the given<br>+.Ar pid<br>+instead of executing<br>+.Xr fork 2<br>+and tracing a new process.<br>+.El<br>+.Sh EXAMPLES<br>+Display all system calls made in the command<br>+.Ic echo hello :<br>+.Pp<br>+.Dl $ ktruss echo hello<br>+.Pp<br>+Attach to the process with PID 52, tracing any system calls it<br>+performs:<br>+.Pp<br>+.Dl $ ktruss -p 52<br>+.Pp<br>+.Sh SEE ALSO<br>+.Xr ktrace 1 ,<br>+.Xr ps 1 ,<br>+.Xr fork 2<br>+.Sh BUGS<br>+Although the information is displayed in real-time, it is by no means an<br>+accurate depiction of when actual events are occurring in the process.<br>Index: usr.bin/kdump/ktruss.c<br>===================================================================<br>RCS file: usr.bin/kdump/ktruss.c<br>diff -N usr.bin/kdump/ktruss.c<br>--- /dev/null	1 Jan 1970 00:00:00 -0000<br>+++ usr.bin/kdump/ktruss.c	5 Sep 2008 22:26:08 -0000<br>@@ -0,0 +1,115 @@<br>+/*	$OpenBSD$	*/<br>+/*<br>+ * Written by Jared Yanovich <jaredy@<a href="http://openbsd.org" rel="nofollow" class="url" target="_blank">openbsd.org</a>><br>+ * Public domain, 2008/09/05.<br>+ */<br>+<br>+#include <sys/param.h><br>+#include <sys/uio.h><br>+#include <sys/ktrace.h><br>+<br>+#include <err.h><br>+#include <signal.h><br>+#include <stdio.h><br>+#include <stdlib.h><br>+#include <string.h><br>+#include <unistd.h><br>+<br>+#include "ktrace.h"<br>+#include "kdump.h"<br>+<br>+int show_argv;<br>+int show_stats;<br>+int show_envp;<br>+const char *outfn;<br>+<br>+void ktruss_usage(void);<br>+<br>+int<br>+ktruss_main(int argc, char *argv[])<br>+{<br>+	int ch, trpoints, ops, pidset, pid, fds[2];<br>+	const char *errstr;<br>+	FILE *infp;<br>+<br>+	trpoints = DEF_POINTS;<br>+	ops = pid = pidset = 0;<br>+	while ((ch = getopt(argc, argv, "Ddfo:p:")) != -1) {<br>+		switch (ch) {<br>+		case 'D':<br>+			timestamp = 1; /* relative */<br>+			break;<br>+		case 'd':<br>+			timestamp = 2; /* absolute */<br>+			break;<br>+		case 'f':<br>+			trpoints |= KTRFAC_INHERIT;<br>+			ops |= KTRFLAG_DESCEND;<br>+			break;<br>+		case 'o':<br>+			outfn = optarg;<br>+			break;<br>+		case 'p':<br>+			pid = strtonum(optarg, 1, INT_MAX, &errstr);<br>+			if (errstr != NULL)<br>+				errx(1, "%%s: %%s", optarg, errstr);<br>+			pidset = 1;<br>+			break;<br>+		default:<br>+			ktruss_usage();<br>+			/* NOTREACHED */<br>+		}<br>+	}<br>+	argc -= optind;<br>+	argv += optind;<br>+<br>+	if ((pidset && argc) ||<br>+	    (!pidset && !argc))<br>+		ktruss_usage();<br>+<br>+	/* Setup input as stdin for dump(). */<br>+	if (pipe(fds) == -1)<br>+		err(1, "pipe");<br>+<br>+	if (pidset) {<br>+		if (fktrace(fds[1], ops, trpoints, pid) == -1)<br>+			err(1, "fktrace");<br>+	} else {<br>+		switch (fork()) {<br>+		case -1:<br>+			err(1, "fork");<br>+			/* NOTREACHED */<br>+		case 0:<br>+			pid = getpid();<br>+			if (fktrace(fds[1], ops, trpoints, pid) == -1)<br>+				err(1, "fktrace");<br>+			close(fds[1]);<br>+			execvp(argv[0], &argv[0]);<br>+			err(1, "execve");<br>+			/* NOTREACHED */<br>+		}<br>+	}<br>+	/* Set up output file. */<br>+	if (outfn != NULL && freopen(outfn, "w", stdout) == NULL)<br>+		err(1, "%%s", outfn);<br>+<br>+	if ((infp = fdopen(fds[0], "r")) == NULL)<br>+		err(1, "fdopen");<br>+	if (dup2(fds[0], STDIN_FILENO) == -1)<br>+		err(1, "dup2");<br>+	close(fds[1]);<br>+	dump(trpoints);<br>+	exit(0);<br>+}<br>+<br>+void<br>+ktruss_usage(void)<br>+{<br>+	extern char *__progname;<br>+<br>+	fprintf(stderr,<br>+	    "usage: %%s [-Ddf] [-o file] command [argument ...]\n"<br>+	    "       %%s [-Ddf] [-o file] -p pid\n",<br>+	    __progname, __progname);<br>+	exit(1);<br>+}<br><br>
    <table border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="30">&nbsp;</td>
        <td>Posted In: <a href="http://www.nnseek.com/e/mailing.openbsd.tech/">mailing.openbsd.tech</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/truss_91699106t.html"><b>4</b> Comments</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/truss_91699106m.html">Reply</a></td>
      </tr></table><br>]]></description>
	<pubDate>Fri, 05 Sep 2008 17:01:13 PDT</pubDate>
</item>
<item>
	<title><![CDATA[Da li zaista znate sve o veli]]></title>
	<guid>http://www.nnseek.com/e/mailing.openbsd.tech/da_li_zaista_znate_sve_o_veli_91691170t.html</guid>
	<link>http://www.nnseek.com/e/mailing.openbsd.tech/da_li_zaista_znate_sve_o_veli_91691170t.html</link>
	<description><![CDATA[Top Shop<br><br>Top e-revija: 26 l 5. septembar 2008.<br><br>Najbolja praktiDna reE!enja i saveti za bolji E>ivot<br><br>PoDetna l Budi fit l Lepota l Zdravlje l Kuhinja i domaDinstvo<br><br>Zabava i deca l Carstvo igraDaka l Knjige<br><br>Top Shop<br><br>HIT TV proizvodi!<br><br>ab rocket<br><br>Ab Rocket<br><br>steam mop<br><br>H20<br>Steam Mop<br><br>leg magic<br><br>Massage Cusshion<br><br>massage cushion<br><br>Kleen<br>Kut<br><br>turbo maximus<br><br>Turbo Maximus<br><br>Da li znate baE! sve o veliDinama?<br><br>"Penjanje uz stepenice" za lepE!i izgled<br><br>5 trikova za prijatniju kancelariju<br><br>Znanje se nagraDuje: Nagrade za favorite<br><br>Dovek je jedno od biDa na planeti, Diji bmuE>jakb ima najveDi<br>muE!ki polni organ spram svoje veliDine.<br><br>Kada pobrojimo najpopularnije fitnes sprave - meDu njima De se sigurno<br>naDi i steper.<br><br>Kako se odeDate na svom radnom mestu? Da li Desto imate glavobolje,<br>oseDate da vam je zaguE!ljivo...<br><br>U kvizu "Moj favorit" koji je Top Shop organizovao, dodeljene su vredne<br>nagrade...<br><br>Sve o veliDinama<br><br>Da li znate baE! sve o veliDinama?<br><br>Dovek je jedno od biDa na planeti, Diji bmuE>jakb ima najveDi<br>polni organ spram svoje veliDine... ZaE!to su muE!karci Desto<br>nezadovoljni? E ta E>ene E>ele? Ko uspostavlja standarde po pitanju<br>veliDine? Postoji viE!e kriterijuma utvrDivanja veliDine ljudskog<br>penisa... [viE!e...]<br><br>Septembarska uE!teda!<br><br>Power Juicer Express + POKLON<br><br>Celluless<br><br>Pancake Puffs<br><br>Jucer i opener<br>Cena: 9.990 RSD<br><br>Celluless<br>Cena: 3.590 RSD<br><br>Turbo Maximus Queen<br>Cena: 1.890 RSD<br><br>Sokovnik i POKLON - elektriDni otvaraD za konzerve!<br><br>JoE! samo 24 komada po 10%% niE>oj ceni! Oslobodite se celulita.<br><br>Za uE!topke savE!enog izgleda, od sada po niE>oj ceni!<br><br>[ViE!e l PoruDi odmah]<br><br>[ViE!e l PoruDi odmah]<br><br>[ViE!e l PoruDi odmah]<br><br>Steper<br><br>"Penjanje uz stepenice" za lepE!i izgled<br><br>Kada pobrojimo najpopularnije fitnes sprave - bilo za veE>banje kod<br>kuDe, bilo u fitnes klubovima - meDu njima Demo se sigurno prisetiti i<br>stepera. VeE>be na steperu, po principu bbeskonaDnog penjanja uz<br>stepeniceb pomaE>u lepE!em izgledu, troE!enju suviE!ne energije i<br>kalorija. [viE!e...]<br><br>Lep izgled - zdrav E>ivot<br><br>Steper sa tegovima<br><br>Air Climber<br><br>Slim Stepper<br><br>Steper sa tegovima<br>Cena: 5.990 RSD<br><br>Air Climber<br>Cena: 8.990 RSD<br><br>Slim Stepper<br>Cena: 2.990 RSD<br><br>NOVO! Steper koji ima dodatke za akupresuru, tegove, disk za struk.<br><br>Vakuumski steper kombinuje kardio i veE>be za trbuE!njake.<br><br>VeE>bajte kod kuDe, ne bacajte novac na skupe treninge.<br><br>[ViE!e l PoruDi odmah]<br><br>[ViE!e l PoruDi odmah]<br><br>[ViE!e l PoruDi odmah]<br><br>VoDe<br><br>5 trikova za prijatniju kancelariju<br><br>Kako se odeDate na svom radnom mestu? Da li Desto imate glavobolje,<br>oseDate da vam je zaguE!ljivo ili postajete anksiozni? MoE>da baE! mesto<br>na koje dolazite dan za danom b kancelarija b ima tako negativan<br>uticaj na vas. Pa...NaDinite je prijatnijim mestom za boravak...<br>ProDitajte kako. [viE!e...]<br><br>Obradujte sebe i svoju porodicu<br><br>Tweeze<br><br>Kleen Kut<br><br>Joy BOX<br><br>Tweeze<br>Cena: 2.190 RSD<br><br>Kleen Kut<br>Cena: 2.190 RSD<br><br>Joy Box<br>Cena: 4.890 RSD<br><br>Pinceta koja precizno hvata i potpuno uklanja neE>eljenje dlake!<br><br>ElektriDni, vodootporni brijaD na baterijeza muE!karce.<br><br>Pevajte, gledajte filmove, sluE!ajte muziku, igrajte igrice porodiDno.<br><br>[ViE!e l PoruDi odmah]<br><br>[ViE!e l PoruDi odmah]<br><br>[ViE!e l PoruDi odmah]<br><br>Dobitnici<br><br>Nagrade za favorite<br><br>Svi koji redovno poseDuju e-Topshop web stranicu, znaju da pored velikog<br>izbora proizvoda i tekstova iz raznih oblasti E>ivota, povremeno<br>organizujemo i nagradne kvizove.Jedan od takvih bio je i junski kviz<br>bMoj Favoritb posveDen Evropskom prvenstvu u fudbalu Euro 2008... [viE!e...]<br><br>Za praktiDan i udoban E>ivot<br><br>Total Sauna<br><br>Roto Duster<br><br>Snap'n'slice<br><br>Total Sauna<br>Cena: 8.990 RSD<br><br>Roto Duster<br>Cena: 2.490 RSD<br><br>Snap n Slice<br>Cena: 3.490 RSD<br><br>Mala portabl sauna koju moE>ete koristiti u udobnosti doma!<br><br>DistaD koji radi na baterije i Disti statiDkim elektricitetom.<br><br>Za dekorativno i brzo seckanje svih vrsta namirnica..<br><br>[ViE!e l PoruDi odmah]<br><br>[ViE!e l PoruDi odmah]<br><br>[ViE!e l PoruDi odmah]<br><br>Ovu elektronsku poE!tu primate, ukoliko ste svojevoljno ostavili svoju<br>e-mail adresu na nekom od sajtova Top Shop-a, uDestvovali u naE!oj<br>poklon igri ili nagradnom kvizu ili se prijavili za e-Dasopis Top Shop-a<br>ili nekog od nasih brendova.<br><br>Ponude date u ovom e-mailu vaE>e iskljuDivo za porudE>bine upuDene<br>putem Interneta ili broja telefona 021 489 26 60.<br><br>Ukoliko ne E>elite viE!e da primate naE!e elektronske poruke, za<br>odjavljivanje sa naE!e e-mailing liste, kliknite ovde.<br><br>Studio Moderna d.o.o., Laze NanDiDa 50, 21000 Novi Sad, Tel: 021 489 26<br>60, Fax: 021 489 26 08,<br>E-mail: info@<a href="http://news.e-topshop.tv" rel="nofollow" class="url" target="_blank">news.e-topshop.tv</a><br><br>[IMAGE]If you would no longer like to receive our emails please<br>unsubscribe by clicking here.<br><br>
    <table border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="30">&nbsp;</td>
        <td>Posted In: <a href="http://www.nnseek.com/e/mailing.openbsd.tech/">mailing.openbsd.tech</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/da_li_zaista_znate_sve_o_veli_91691170t.html">no comments</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/da_li_zaista_znate_sve_o_veli_91691170m.html">Reply</a></td>
      </tr></table><br>]]></description>
	<pubDate>Fri, 05 Sep 2008 13:27:28 PDT</pubDate>
</item>
<item>
	<title><![CDATA[cwm(1) diff]]></title>
	<guid>http://www.nnseek.com/e/mailing.openbsd.tech/cwm_1_diff_91665058t.html</guid>
	<link>http://www.nnseek.com/e/mailing.openbsd.tech/cwm_1_diff_91665058t.html</link>
	<description><![CDATA[Hello,<br><br>In cwm, if you press M-/ C-a to see a list of all windows, the previous<br>title of each window is displayed instead of the current one.<br><br>Regards,<br>Tim<br><br>Index: search.c<br>===================================================================<br>RCS file: /cvs/xenocara/app/cwm/search.c,v<br>retrieving revision 1.12<br>diff -p -u -r1.12 search.c<br>--- search.c	11 Jul 2008 14:21:28 -0000	1.12<br>+++ search.c	5 Sep 2008 15:44:31 -0000<br>@@ -132,7 +132,7 @@ search_print_client(struct menu *mi, int<br> 		flag = '&';<br> <br> 	if (list)<br>-		cc->matchname = TAILQ_FIRST(&cc->nameq)->name;<br>+		cc->matchname = cc->name;<br> <br> 	snprintf(mi->print, sizeof(mi->print), "%%c%%s", flag, cc->matchname);<br><br>
    <table border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="30">&nbsp;</td>
        <td>Posted In: <a href="http://www.nnseek.com/e/mailing.openbsd.tech/">mailing.openbsd.tech</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/cwm_1_diff_91665058t.html">no comments</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/cwm_1_diff_91665058m.html">Reply</a></td>
      </tr></table><br>]]></description>
	<pubDate>Fri, 05 Sep 2008 11:00:32 PDT</pubDate>
</item>
<item>
	<title><![CDATA[upgrade44.html diif]]></title>
	<guid>http://www.nnseek.com/e/mailing.openbsd.tech/upgrade44_html_diif_91584162t.html</guid>
	<link>http://www.nnseek.com/e/mailing.openbsd.tech/upgrade44_html_diif_91584162t.html</link>
	<description><![CDATA[Hi,<br><br>One user is missing in the upgrade 4.4 file.<br><br>Here is the diff for it, but looks like it break the line where is <br>shouldn't.<br><br>only chnages is one line:<br><br>+<b>useradd -u93 -g=uid -c"YP to LDAP Daemon" -d/var/empty <br>-s/sbin/nologin _ypldap</b><br><br><br>Index: upgrade44.html<br>===================================================================<br>RCS file: /cvs/www/faq/upgrade44.html,v<br>retrieving revision 1.10<br>diff -u -p -r1.10 upgrade44.html<br>--- upgrade44.html      3 Sep 2008 10:57:33 -0000       1.10<br>+++ upgrade44.html      5 Sep 2008 02:56:12 -0000<br>@@ -347,6 +347,7 @@ Create the user and group using<br>  <a <br>href="<a href="http://www.openbsd.org/cgi-bin/man.cgi?query=useradd&amp;sektion=8" rel="nofollow" class="url" target="_blank">http://www.openbsd.org/cgi-bin/man.cgi?query=useradd&amp;sektion=8</a>">useradd(8)</a><br>  <blockquote><pre><br>  <b>useradd -u92 -g=uid -c"IPv6 Router Advertisement Daemon" <br>-d/var/empty -s/sbin/nologin _rtadvd</b><br>+<b>useradd -u93 -g=uid -c"YP to LDAP Daemon" -d/var/empty <br>-s/sbin/nologin _ypldap</b><br>  </pre></blockquote><br><br>  <a name="etcUpgrade"></a><br><br>
    <table border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="30">&nbsp;</td>
        <td>Posted In: <a href="http://www.nnseek.com/e/mailing.openbsd.tech/">mailing.openbsd.tech</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/upgrade44_html_diif_91584162t.html"><b>1</b> Comment</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/upgrade44_html_diif_91584162m.html">Reply</a></td>
      </tr></table><br>]]></description>
	<pubDate>Thu, 04 Sep 2008 20:00:22 PDT</pubDate>
</item>
<item>
	<title><![CDATA[another dc(4) diff needs testing.]]></title>
	<guid>http://www.nnseek.com/e/mailing.openbsd.tech/another_dc_4_diff_needs_testing_91579554t.html</guid>
	<link>http://www.nnseek.com/e/mailing.openbsd.tech/another_dc_4_diff_needs_testing_91579554t.html</link>
	<description><![CDATA[The following diff needs tesing if you have a dc(4) NIC using<br>The ADMtek Centaur, Conexant or Davicom chipsets. Please<br>check to make sure link state checking works properly. This<br>can resolve issues with CARP/trunk and some other things.<br><br>Please provide a dmesg.<br><br><br>Index: dc.c<br>===================================================================<br>RCS file: /cvs/src/sys/dev/ic/dc.c,v<br>retrieving revision 1.99<br>diff -u -p -r1.99 dc.c<br>--- dc.c	26 Nov 2007 17:45:14 -0000	1.99<br>+++ dc.c	29 Aug 2008 21:24:22 -0000<br>@@ -2410,8 +2417,12 @@ dc_tick(xsc)<br> 			if (sc->dc_link == 0)<br> 				mii_tick(mii);<br> 		} else {<br>-			r = CSR_READ_4(sc, DC_ISR);<br>-			if ((r & DC_ISR_RX_STATE) == DC_RXSTATE_WAIT &&<br>+			/*<br>+			 * For NICs which never report DC_RXSTATE_WAIT, we<br>+			 * have to bite the bullet...<br>+			 */<br>+			if ((DC_HAS_BROKEN_RXSTATE(sc) || (CSR_READ_4(sc,<br>+			    DC_ISR) & DC_ISR_RX_STATE) == DC_RXSTATE_WAIT) &&<br> 			    sc->dc_cdata.dc_tx_cnt == 0 && !DC_IS_ASIX(sc)) {<br> 				mii_tick(mii);<br> 				if (!(mii->mii_media_status & IFM_ACTIVE))<br><br>-- <br>This message has been scanned for viruses and<br>dangerous content by MailScanner, and is<br>believed to be clean.<br><br>
    <table border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="30">&nbsp;</td>
        <td>Posted In: <a href="http://www.nnseek.com/e/mailing.openbsd.tech/">mailing.openbsd.tech</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/another_dc_4_diff_needs_testing_91579554t.html">no comments</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/another_dc_4_diff_needs_testing_91579554m.html">Reply</a></td>
      </tr></table><br>]]></description>
	<pubDate>Thu, 04 Sep 2008 18:25:14 PDT</pubDate>
</item>
<item>
	<title><![CDATA[pf optimizations, help us test them]]></title>
	<guid>http://www.nnseek.com/e/mailing.openbsd.tech/pf_optimizations_help_us_test_them_91399586t.html</guid>
	<link>http://www.nnseek.com/e/mailing.openbsd.tech/pf_optimizations_help_us_test_them_91399586t.html</link>
	<description><![CDATA[just before the release we had to disable the pf optimizations related<br>to storing a state key pointer in the pkthdr mbufs. these help saving<br>state lookups and thus help performance notably.<br><br>please tess the following diff which re-enables that stuff. it is<br>tested well for regular forwarding setups, tho more never hurts, of<br>course. we need testing with more complicated setups. especially any<br>form of tunnels - ipsec, gif, gre, pppoe, tun, and things like<br>route-to.<br><br>i pretty much expect everything to work fine now. at the same time i<br>expect that the tunnel interfaces except ipsec do not behave the way<br>intended yet, which you should only notice by messages like<br><br>pf: state key linking mismatch! dir=OUT, if=dc0,<br>  stored af=2, a0: <a href="http://1.2.3.4:123" rel="nofollow" class="url" target="_blank">1.2.3.4:123</a>, a1: <a href="http://5.6.7.8:8500" rel="nofollow" class="url" target="_blank">5.6.7.8:8500</a>, proto=17,<br>  found af=2, a0: <a href="http://9.8.3.5:154" rel="nofollow" class="url" target="_blank">9.8.3.5:154</a>, a1: 1.23.42.2:243, proto=17.<br><br>(on one line, wrapped for readability)<br>in the dmesg buffer or /var/log/messages<br><br>stored and found must be the exact reverse of each other, so the two<br>af= and proto= must be the same, stored a0 must be the same as found<br>a1, and stored a1 = found a0. the message is only printed if that is<br>NOT the case, and we need to find out why. probably related to some<br>kind of tunneling. so if you see these messages, please report them to<br>me and include ifconfig -A output.<br><br>Index: pf.c<br>===================================================================<br>RCS file: /cvs/src/sys/net/pf.c,v<br>retrieving revision 1.618<br>diff -u -p -r1.618 pf.c<br>--- pf.c	3 Sep 2008 12:57:19 -0000	1.618<br>+++ pf.c	3 Sep 2008 12:57:57 -0000<br>@@ -5817,10 +5817,8 @@ done:<br> 	if ((s && s->tag) || r->rtableid)<br> 		pf_tag_packet(m, s ? s->tag : 0, r->rtableid);<br> <br>-#if 0<br> 	if (dir == PF_IN && s && s->key[PF_SK_STACK])<br> 		m->m_pkthdr.pf.statekey = s->key[PF_SK_STACK];<br>-#endif<br> <br> #ifdef ALTQ<br> 	if (action == PF_PASS && r->qid) {<br>@@ -6198,10 +6196,8 @@ done:<br> 	if ((s && s->tag) || r->rtableid)<br> 		pf_tag_packet(m, s ? s->tag : 0, r->rtableid);<br> <br>-#if 0<br> 	if (dir == PF_IN && s && s->key[PF_SK_STACK])<br> 		m->m_pkthdr.pf.statekey = s->key[PF_SK_STACK];<br>-#endif<br> <br> #ifdef ALTQ<br> 	if (action == PF_PASS && r->qid) {<br><br>
    <table border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="30">&nbsp;</td>
        <td>Posted In: <a href="http://www.nnseek.com/e/mailing.openbsd.tech/">mailing.openbsd.tech</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/pf_optimizations_help_us_test_them_91399586t.html">no comments</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/pf_optimizations_help_us_test_them_91399586m.html">Reply</a></td>
      </tr></table><br>]]></description>
	<pubDate>Wed, 03 Sep 2008 06:11:52 PDT</pubDate>
</item>
<item>
	<title><![CDATA[pf (missing ioctl in manpage) &amp; relayd]]></title>
	<guid>http://www.nnseek.com/e/mailing.openbsd.tech/pf_missing_ioctl_in_manpage_relayd_91395746t.html</guid>
	<link>http://www.nnseek.com/e/mailing.openbsd.tech/pf_missing_ioctl_in_manpage_relayd_91395746t.html</link>
	<description><![CDATA[Hi tech (and patch submitter)!<br><br>I'm not sure if this is the right list but since this is somewhat<br>technical I'll give it a try..<br><br>I'm playing around with relayd and stumbled on the problem with sticky-<br>address and source-track entries keeping clients from the working<br>servers.<br><br>This should be fixed in upcoming 4.4, but judging from the diff<br>(<a href="http://www.openbsd.org/cgi-bin/cvsweb/src/usr.sbin/relayd/pfe_filter.c.diff" rel="nofollow" class="url" target="_blank">http://www.openbsd.org/cgi-bin/cvsweb/src/usr.sbin/relayd/pfe_filter.c.diff</a>?<br>r1=1.26&r2=1.27<br>) it seem to use DIOCCLRSRCNODES instead of the, in my head, more<br>appropriate DIOCKILLSRCNODES.<br><br>Is there any reason for clearing out ALL source tracking entries<br>instead of just the ones related to the host which just taken down?<br>One reason could be that DIOCKILLSRCNODES doesn't actually see to be<br>documented in pf.4, so it might just have been missed..<br><br>I guess the missing entry in the manpage is a "bug" at least :)<br>However what I'm wondering is if the relayd's usage of CLR instead of<br>KILL is a design decision or if the submitter (mkoc at prime.pl) was<br>just unaware of the existanse of kill?<br><br>Clearing out all source tracking entries works I guess, but in my eyes<br>it would be neater if just the affected ones were removed, right?<br><br>If I'm totally wrong here, I hope you can excuse me, I'm quite new to<br>openbsd and the load balancing part.<br><br>Thanks<br>Johan Strvm<br><br>
    <table border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="30">&nbsp;</td>
        <td>Posted In: <a href="http://www.nnseek.com/e/mailing.openbsd.tech/">mailing.openbsd.tech</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/pf_missing_ioctl_in_manpage_relayd_91395746t.html"><b>5</b> Comments</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/pf_missing_ioctl_in_manpage_relayd_91395746m.html">Reply</a></td>
      </tr></table><br>]]></description>
	<pubDate>Wed, 03 Sep 2008 05:36:18 PDT</pubDate>
</item>
<item>
	<title><![CDATA[[patch] nForce AGP support]]></title>
	<guid>http://www.nnseek.com/e/mailing.openbsd.tech/patch_nforce_agp_support_91369634t.html</guid>
	<link>http://www.nnseek.com/e/mailing.openbsd.tech/patch_nforce_agp_support_91369634t.html</link>
	<description><![CDATA[Hi.<br><br>I wanted to give the DRI stuff that oga@ has been working so hard on<br>a try.  The X server found radeondrm(4) fine after I enabled it via<br>config(8) but then complained that agp(4) wasn't working.  X was right;<br>this machine has the NVIDIA nForce2 core chipset, and there's no support<br>for agp(4) on that.  A search through the archives of this list turned up<br>a posting from March of 2006 in which Dimitry Andric provided a patch to<br>add that support.<br><br>The following is that patch, but tweaked so that it applies to current.<br>My thanks to Mr. Andric and the original developers for the heavy lifting;<br>all I had to do was tweak things to get the patch to apply and compile.<br><br>With this patch, and radeondrm(4) enabled, I now get:<br><br>agp0 at vga1: aperture at 0xe0000000, size 0x4000000<br>radeondrm0 at vga1 ATI Radeon AP 9600(0), 1.29.0 20080613<br><br>That's an ATI Radeon 9600 PRO AGP card in the AGP slot on this mainboard,<br>which is an MSI K7N2 Delta-L (MS-6570).<br><br>I've put a full dmesg after the patch.  Tested on i386 only; I see that<br>agp(4) is also in the amd64 kernel, but I have no amd64 system.<br><br>X reports that DRI is there and glxgears(1) and the GL modes in xlock(1)<br>all run much faster.  Marathon and marathoninfinity (from packages)<br>both start up OK and look nice, but I haven't really had time to play.<br>Celestia (also from packages) throws a software fallback warning from the<br>Mesa r300 driver and then crashes with a propolice-caught stack overflow.<br>I haven't tried any other GL programs yet.<br><br>patch:<br>------------------------------------------------------------------------------<br>Index: sys/arch/i386/conf/files.i386<br>===================================================================<br>RCS file: /cvs/src/sys/arch/i386/conf/files.i386,v<br>retrieving revision 1.182<br>diff -u -r1.182 files.i386<br>--- sys/arch/i386/conf/files.i386	8 Jul 2008 05:22:00 -0000	1.182<br>+++ sys/arch/i386/conf/files.i386	1 Sep 2008 02:41:24 -0000<br>@@ -101,7 +101,7 @@<br> file	arch/i386/pci/pcic_pci_machdep.c	pcic_pci<br> <br> # AGP devices<br>-device agp: agp_ali, agp_amd, agp_i810, agp_intel, agp_sis, agp_via<br>+device agp: agp_ali, agp_amd, agp_i810, agp_intel, agp_nvidia, agp_sis, agp_via<br> attach agp at agpbus<br> file	arch/i386/pci/agp_machdep.c	agp<br> <br>Index: sys/dev/pci/agp.c<br>===================================================================<br>RCS file: /cvs/src/sys/dev/pci/agp.c,v<br>retrieving revision 1.25<br>diff -u -r1.25 agp.c<br>--- sys/dev/pci/agp.c	17 Aug 2008 21:31:38 -0000	1.25<br>+++ sys/dev/pci/agp.c	1 Sep 2008 05:44:14 -0000<br>@@ -52,6 +52,7 @@<br> #include "agp_apple.h"<br> #include "agp_i810.h"<br> #include "agp_intel.h"<br>+#include "agp_nvidia.h"<br> #include "agp_sis.h"<br> #include "agp_via.h"<br> <br>@@ -97,6 +98,10 @@<br> #if NAGP_INTEL > 0<br> 	{ PCI_VENDOR_INTEL, -1, agp_intel_attach },<br> #endif <br>+#if NAGP_NVIDIA > 0<br>+	{ PCI_VENDOR_NVIDIA,PCI_PRODUCT_NVIDIA_NFORCE_PCHB,agp_nvidia_attach },<br>+	{ PCI_VENDOR_NVIDIA,PCI_PRODUCT_NVIDIA_NFORCE2_PCHB,agp_nvidia_attach },<br>+#endif<br> #if NAGP_SIS > 0<br> 	{ PCI_VENDOR_SIS, -1, agp_sis_attach },<br> #endif<br>Index: sys/dev/pci/agp_nvidia.c<br>===================================================================<br>RCS file: sys/dev/pci/agp_nvidia.c<br>diff -N sys/dev/pci/agp_nvidia.c<br>--- /dev/null	1 Jan 1970 00:00:00 -0000<br>+++ sys/dev/pci/agp_nvidia.c	1 Sep 2008 05:31:41 -0000<br>@@ -0,0 +1,392 @@<br>+/*	$OpenBSD$	*/<br>+<br>+/*-<br>+ * Copyright (c) 2003 Matthew N. Dodd <winter_(_at_)_jurai_(_dot_)_net><br>+ * All rights reserved.<br>+ *<br>+ * Redistribution and use in source and binary forms, with or without<br>+ * modification, are permitted provided that the following conditions<br>+ * are met:<br>+ * 1. Redistributions of source code must retain the above copyright<br>+ *    notice, this list of conditions and the following disclaimer.<br>+ * 2. Redistributions in binary form must reproduce the above copyright<br>+ *    notice, this list of conditions and the following disclaimer in the<br>+ *    documentation and/or other materials provided with the distribution.<br>+ *<br>+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND<br>+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE<br>+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE<br>+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE<br>+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL<br>+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS<br>+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)<br>+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT<br>+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY<br>+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF<br>+ * SUCH DAMAGE.<br>+ *<br>+ *	$FreeBSD: src/sys/pci/agp_nvidia.c,v 1.11 2005/12/20 21:12:26 jhb Exp $<br>+ */<br>+<br>+/*<br>+ * Written using information gleaned from the<br>+ * NVIDIA nForce/nForce2 AGPGART Linux Kernel Patch.<br>+ */<br>+<br>+#include <sys/param.h><br>+#include <sys/kernel.h><br>+#include <sys/malloc.h><br>+#include <sys/systm.h><br>+#include <sys/proc.h><br>+#include <sys/conf.h><br>+#include <sys/device.h><br>+#include <sys/lock.h><br>+#include <sys/agpio.h><br>+<br>+#include <dev/pci/pcivar.h><br>+#include <dev/pci/pcireg.h><br>+#include <dev/pci/vga_pcivar.h><br>+#include <dev/pci/agpvar.h><br>+#include <dev/pci/agpreg.h><br>+#include <dev/pci/pcidevs.h><br>+<br>+#include <machine/bus.h><br>+#include <machine/cpufunc.h><br>+<br>+struct agp_nvidia_softc {<br>+	u_int32_t		initial_aperture; /* aperture size at startup */<br>+	struct agp_gatt *	gatt;<br>+<br>+	pcitag_t		tag;		/* AGP Controller */<br>+	pcitag_t		mc1_tag;	/* Memory Controller */<br>+	pcitag_t		mc2_tag;	/* Memory Controller */<br>+	pcitag_t		btag;		/* Bridge */<br>+<br>+	u_int32_t		wbc_mask;<br>+	int			num_dirs;<br>+	int			num_active_entries;<br>+	off_t			pg_offset;<br>+};<br>+<br>+static u_int32_t agp_nvidia_get_aperture(struct agp_softc *);<br>+static int agp_nvidia_set_aperture(struct agp_softc *, u_int32_t);<br>+static int agp_nvidia_bind_page(struct agp_softc *, off_t, bus_addr_t);<br>+static int agp_nvidia_unbind_page(struct agp_softc *, off_t);<br>+static void agp_nvidia_flush_tlb(struct agp_softc *);<br>+static int nvidia_init_iorr(u_int32_t, u_int32_t);<br>+<br>+struct agp_methods agp_nvidia_methods = {<br>+	agp_nvidia_get_aperture,<br>+	agp_nvidia_set_aperture,<br>+	agp_nvidia_bind_page,<br>+	agp_nvidia_unbind_page,<br>+	agp_nvidia_flush_tlb,<br>+	agp_generic_enable,<br>+	agp_generic_alloc_memory,<br>+	agp_generic_free_memory,<br>+	agp_generic_bind_memory,<br>+	agp_generic_unbind_memory,<br>+};<br>+<br>+int<br>+agp_nvidia_attach(struct agp_softc *sc, struct pci_attach_args *pa)<br>+{<br>+	struct agp_nvidia_softc *nsc;<br>+	struct agp_gatt *gatt;<br>+	u_int32_t apbase;<br>+	u_int32_t aplimit;<br>+	pcireg_t temp;<br>+	int size;<br>+	int i;<br>+	int error;<br>+<br>+	nsc = malloc(sizeof *nsc, M_AGP, M_NOWAIT);<br>+	if (nsc == NULL) {<br>+		printf(": can't allocate chipset-specific softc\n");<br>+		return (ENOMEM);<br>+	}<br>+	memset(nsc, 0, sizeof *nsc);<br>+	sc->sc_chipc = nsc;<br>+	sc->sc_methods = &agp_nvidia_methods;<br>+<br>+	if (agp_map_aperture(pa, sc, AGP_APBASE, PCI_MAPREG_TYPE_MEM) != 0) {<br>+		printf(": failed to map aperture\n");<br>+		free(nsc, M_DEVBUF);<br>+		sc->sc_chipc = NULL;<br>+		return (ENXIO);<br>+	}<br>+<br>+	switch (PCI_PRODUCT(pa->pa_id)) {<br>+	case PCI_PRODUCT_NVIDIA_NFORCE_PCHB:<br>+		nsc->wbc_mask = 0x00010000;<br>+		break;<br>+	case PCI_PRODUCT_NVIDIA_NFORCE2_PCHB:<br>+		nsc->wbc_mask = 0x80000000;<br>+		break;<br>+	default:<br>+		printf(": unknown product id %%#x\n", PCI_PRODUCT(pa->pa_id));<br>+		free(nsc, M_DEVBUF);<br>+		sc->sc_chipc = NULL;<br>+		return (ENODEV);<br>+	}<br>+<br>+	/* AGP Controller */<br>+	nsc->tag = pa->pa_tag;<br>+<br>+	/* Memory Controller 1 */<br>+	nsc->mc1_tag = pci_make_tag(pa->pa_pc, pa->pa_bus, 0, 1);<br>+	/* XXX Validate existence  */<br>+<br>+	/* Memory Controller 2 */<br>+	nsc->mc2_tag = pci_make_tag(pa->pa_pc, pa->pa_bus, 0, 2);<br>+	/* XXX Validate existence  */<br>+<br>+	/* AGP Host to PCI Bridge */<br>+	nsc->btag = pci_make_tag(pa->pa_pc, pa->pa_bus, 30, 0);<br>+	/* XXX Validate existence  */<br>+<br>+	nsc->initial_aperture = AGP_GET_APERTURE(sc);<br>+<br>+	for (;;) {<br>+		gatt = agp_alloc_gatt(sc);<br>+		if (gatt != NULL)<br>+			break;<br>+		/*<br>+		 * Probably contigmalloc failure. Try reducing the<br>+		 * aperture so that the gatt size reduces.<br>+		 */<br>+		if (AGP_SET_APERTURE(sc, AGP_GET_APERTURE(sc) / 2)) {<br>+			free(nsc, M_DEVBUF);<br>+			sc->sc_chipc = NULL;<br>+			return (ENOMEM);<br>+		}<br>+	}<br>+	nsc->gatt = gatt;<br>+<br>+	apbase = sc->sc_apaddr;<br>+	aplimit = apbase + AGP_GET_APERTURE(sc) - 1;<br>+	pci_conf_write(sc->sc_pc, nsc->mc2_tag, AGP_NVIDIA_2_APBASE, apbase);<br>+	pci_conf_write(sc->sc_pc, nsc->mc2_tag, AGP_NVIDIA_2_APLIMIT, aplimit);<br>+	pci_conf_write(sc->sc_pc, nsc->btag, AGP_NVIDIA_3_APBASE, apbase);<br>+	pci_conf_write(sc->sc_pc, nsc->btag, AGP_NVIDIA_3_APLIMIT, aplimit);<br>+<br>+	error = nvidia_init_iorr(apbase, AGP_GET_APERTURE(sc));<br>+	if (error) {<br>+		printf("Failed to setup IORRs\n");<br>+		agp_free_gatt(sc, gatt);<br>+		free(nsc, M_DEVBUF);<br>+		sc->sc_chipc = NULL;<br>+		return (ENXIO);<br>+	}<br>+<br>+	/* directory size is 64k */<br>+	size = AGP_GET_APERTURE(sc) / 1024 / 1024;<br>+	nsc->num_dirs = size / 64;<br>+	nsc->num_active_entries = (size == 32) ? 16384 : ((size * 1024) / 4);<br>+	nsc->pg_offset = 0;<br>+	if (nsc->num_dirs == 0) {<br>+		nsc->num_dirs = 1;<br>+		nsc->num_active_entries /= (64 / size);<br>+		nsc->pg_offset = (apbase & (64 * 1024 * 1024 - 1) &<br>+		    ~(AGP_GET_APERTURE(sc) - 1)) / PAGE_SIZE;<br>+	}<br>+<br>+	/* (G)ATT Base Address */<br>+	for (i = 0; i < 8; i++) {<br>+		pci_conf_write(sc->sc_pc, nsc->mc2_tag, AGP_NVIDIA_2_ATTBASE(i),<br>+		    (nsc->gatt->ag_physical +<br>+		    (i %% nsc->num_dirs) * 64 * 1024) | 1);<br>+	}<br>+<br>+	/* GTLB Control */<br>+	temp = pci_conf_read(sc->sc_pc, nsc->mc2_tag, AGP_NVIDIA_2_GARTCTRL);<br>+	pci_conf_write(sc->sc_pc, nsc->mc2_tag, AGP_NVIDIA_2_GARTCTRL, temp | 0x11);<br>+<br>+	/* GART Control */<br>+	temp = pci_conf_read(sc->sc_pc, sc->sc_pcitag, AGP_NVIDIA_0_APSIZE);<br>+	pci_conf_write(sc->sc_pc, sc->sc_pcitag, AGP_NVIDIA_0_APSIZE, temp | 0x100);<br>+<br>+	return (0);<br>+}<br>+<br>+#if 0<br>+static int<br>+agp_nvidia_detach(struct agp_softc *sc)<br>+{<br>+	struct agp_nvidia_softc *nsc = sc->sc_chipc;<br>+	int error;<br>+	pcireg_t temp;<br>+<br>+	error = agp_generic_detach(sc);<br>+	if (error)<br>+		return (error);<br>+<br>+	/* GART Control */<br>+	temp = pci_conf_read(sc->sc_pc, sc->sc_pcitag, AGP_NVIDIA_0_APSIZE);<br>+	pci_conf_write(sc->sc_pc, sc->sc_pcitag, AGP_NVIDIA_0_APSIZE, temp & ~0x100);<br>+<br>+	/* GTLB Control */<br>+	temp = pci_conf_read(sc->sc_pc, nsc->mc2_tag, AGP_NVIDIA_2_GARTCTRL);<br>+	pci_conf_write(sc->sc_pc, nsc->mc2_tag, AGP_NVIDIA_2_GARTCTRL, temp & ~0x11);<br>+<br>+	/* Put the aperture back the way it started. */<br>+	AGP_SET_APERTURE(sc, nsc->initial_aperture);<br>+<br>+	/* restore iorr for previous aperture size */<br>+	nvidia_init_iorr(sc->sc_apaddr, nsc->initial_aperture);<br>+<br>+	agp_free_gatt(sc, nsc->gatt);<br>+<br>+	return (0);<br>+}<br>+#endif<br>+<br>+static u_int32_t<br>+agp_nvidia_get_aperture(struct agp_softc *sc)<br>+{<br>+	pcireg_t reg;<br>+<br>+	reg = pci_conf_read(sc->sc_pc, sc->sc_pcitag, AGP_NVIDIA_0_APSIZE);<br>+	reg &= 0xf;<br>+	switch (reg) {<br>+	case 0: return (512 * 1024 * 1024); break;<br>+	case 8: return (256 * 1024 * 1024); break;<br>+	case 12: return (128 * 1024 * 1024); break;<br>+	case 14: return (64 * 1024 * 1024); break;<br>+	case 15: return (32 * 1024 * 1024); break;<br>+	default:<br>+		printf("Invalid aperture setting 0x%%x", reg);<br>+		return 0;<br>+	}<br>+}<br>+<br>+static int<br>+agp_nvidia_set_aperture(struct agp_softc *sc, u_int32_t aperture)<br>+{<br>+	u_int8_t val;<br>+	u_int8_t key;<br>+<br>+	switch (aperture) {<br>+	case (512 * 1024 * 1024): key = 0; break;<br>+	case (256 * 1024 * 1024): key = 8; break;<br>+	case (128 * 1024 * 1024): key = 12; break;<br>+	case (64 * 1024 * 1024): key = 14; break;<br>+	case (32 * 1024 * 1024): key = 15; break;<br>+	default:<br>+		printf("Invalid aperture size (%%dMb)\n", aperture / 1024 / 1024);<br>+		return (EINVAL);<br>+	}<br>+	val = pci_conf_read(sc->sc_pc, sc->sc_pcitag, AGP_NVIDIA_0_APSIZE);<br>+	val &= ~0xf;<br>+	val |= key;<br>+	pci_conf_write(sc->sc_pc, sc->sc_pcitag, AGP_NVIDIA_0_APSIZE, val);<br>+<br>+	return (0);<br>+}<br>+<br>+static int<br>+agp_nvidia_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical)<br>+{<br>+	struct agp_nvidia_softc *nsc = sc->sc_chipc;<br>+	u_int32_t index;<br>+<br>+	if (offset < 0 || offset >= (nsc->gatt->ag_entries << AGP_PAGE_SHIFT))<br>+		return (EINVAL);<br>+<br>+	index = (nsc->pg_offset + offset) >> AGP_PAGE_SHIFT;<br>+	nsc->gatt->ag_virtual[index] = physical | 1;<br>+<br>+	return (0);<br>+}<br>+<br>+static int<br>+agp_nvidia_unbind_page(struct agp_softc *sc, off_t offset)<br>+{<br>+	struct agp_nvidia_softc *nsc = sc->sc_chipc;<br>+	u_int32_t index;<br>+<br>+	if (offset < 0 || offset >= (nsc->gatt->ag_entries << AGP_PAGE_SHIFT))<br>+		return (EINVAL);<br>+<br>+	index = (nsc->pg_offset + offset) >> AGP_PAGE_SHIFT;<br>+	nsc->gatt->ag_virtual[index] = 0;<br>+<br>+	return (0);<br>+}<br>+<br>+static void<br>+agp_nvidia_flush_tlb(struct agp_softc *sc)<br>+{<br>+	struct agp_nvidia_softc *nsc = sc->sc_chipc;<br>+	u_int32_t wbc_reg, temp;<br>+	volatile u_int32_t *ag_virtual;<br>+	int i;<br>+<br>+	if (nsc->wbc_mask) {<br>+		wbc_reg = pci_conf_read(sc->sc_pc, nsc->mc1_tag, AGP_NVIDIA_1_WBC);<br>+		wbc_reg |= nsc->wbc_mask;<br>+		pci_conf_write(sc->sc_pc, nsc->mc1_tag, AGP_NVIDIA_1_WBC, wbc_reg);<br>+<br>+		/* Wait no more than 3 seconds. */<br>+		for (i = 0; i < 3000; i++) {<br>+			wbc_reg = pci_conf_read(sc->sc_pc, nsc->mc1_tag, AGP_NVIDIA_1_WBC);<br>+			if ((nsc->wbc_mask & wbc_reg) == 0)<br>+				break;<br>+			else<br>+				DELAY(1000);<br>+		}<br>+		if (i == 3000)<br>+			printf("TLB flush took more than 3 seconds.\n");<br>+	}<br>+<br>+	ag_virtual = (volatile u_int32_t *)nsc->gatt->ag_virtual;<br>+<br>+	/* Flush TLB entries. */<br>+	for(i = 0; i < 32 + 1; i++)<br>+		temp = ag_virtual[i * PAGE_SIZE / sizeof(u_int32_t)];<br>+	for(i = 0; i < 32 + 1; i++)<br>+		temp = ag_virtual[i * PAGE_SIZE / sizeof(u_int32_t)];<br>+}<br>+<br>+#define	SYSCFG		0xC0010010<br>+#define	IORR_BASE0	0xC0010016<br>+#define	IORR_MASK0	0xC0010017<br>+#define	AMD_K7_NUM_IORR	2<br>+<br>+static int<br>+nvidia_init_iorr(u_int32_t addr, u_int32_t size)<br>+{<br>+	quad_t base, mask, sys;<br>+	u_int32_t iorr_addr, free_iorr_addr;<br>+<br>+	/* Find the iorr that is already used for the addr */<br>+	/* If not found, determine the uppermost available iorr */<br>+	free_iorr_addr = AMD_K7_NUM_IORR;<br>+	for(iorr_addr = 0; iorr_addr < AMD_K7_NUM_IORR; iorr_addr++) {<br>+		base = rdmsr(IORR_BASE0 + 2 * iorr_addr);<br>+		mask = rdmsr(IORR_MASK0 + 2 * iorr_addr);<br>+<br>+		if ((base & 0xfffff000ULL) == (addr & 0xfffff000))<br>+			break;<br>+<br>+		if ((mask & 0x00000800ULL) == 0)<br>+			free_iorr_addr = iorr_addr;<br>+	}<br>+<br>+	if (iorr_addr >= AMD_K7_NUM_IORR) {<br>+		iorr_addr = free_iorr_addr;<br>+		if (iorr_addr >= AMD_K7_NUM_IORR)<br>+			return (EINVAL);<br>+	}<br>+<br>+	base = (addr & ~0xfff) | 0x18;<br>+	mask = (0xfULL << 32) | ((~(size - 1)) & 0xfffff000) | 0x800;<br>+	wrmsr(IORR_BASE0 + 2 * iorr_addr, base);<br>+	wrmsr(IORR_MASK0 + 2 * iorr_addr, mask);<br>+<br>+	sys = rdmsr(SYSCFG);<br>+	sys |= 0x00100000ULL;<br>+	wrmsr(SYSCFG, sys);<br>+<br>+	return (0);<br>+}<br>Index: sys/dev/pci/agpreg.h<br>===================================================================<br>RCS file: /cvs/src/sys/dev/pci/agpreg.h,v<br>retrieving revision 1.10<br>diff -u -r1.10 agpreg.h<br>--- sys/dev/pci/agpreg.h	23 Mar 2008 08:36:41 -0000	1.10<br>+++ sys/dev/pci/agpreg.h	1 Sep 2008 02:45:25 -0000<br>@@ -266,4 +266,17 @@<br> #define AGP_G33_PGTBL_SIZE_1M		(1U << 8)<br> #define AGP_G33_PGTBL_SIZE_2M		(2U << 8)<br> <br>+/*<br>+ * NVIDIA nForce/nForce2 registers<br>+ */<br>+#define	AGP_NVIDIA_0_APBASE		0x10<br>+#define	AGP_NVIDIA_0_APSIZE		0x80<br>+#define	AGP_NVIDIA_1_WBC		0xf0<br>+#define	AGP_NVIDIA_2_GARTCTRL		0xd0<br>+#define	AGP_NVIDIA_2_APBASE		0xd8<br>+#define	AGP_NVIDIA_2_APLIMIT		0xdc<br>+#define	AGP_NVIDIA_2_ATTBASE(i)		(0xe0 + (i) * 4)<br>+#define	AGP_NVIDIA_3_APBASE		0x50<br>+#define	AGP_NVIDIA_3_APLIMIT		0x54<br>+<br> #endif /* !_PCI_AGPREG_H_ */<br>Index: sys/dev/pci/agpvar.h<br>===================================================================<br>RCS file: /cvs/src/sys/dev/pci/agpvar.h,v<br>retrieving revision 1.14<br>diff -u -r1.14 agpvar.h<br>--- sys/dev/pci/agpvar.h	12 Jul 2008 17:31:06 -0000	1.14<br>+++ sys/dev/pci/agpvar.h	1 Sep 2008 06:05:14 -0000<br>@@ -207,6 +207,7 @@<br> int	agp_amd_attach(struct agp_softc *, struct pci_attach_args *);<br> int	agp_i810_attach(struct agp_softc *, struct pci_attach_args *);<br> int	agp_intel_attach(struct agp_softc *, struct pci_attach_args *);<br>+int	agp_nvidia_attach(struct agp_softc *, struct pci_attach_args *);<br> int	agp_via_attach(struct agp_softc *, struct pci_attach_args *);<br> int	agp_sis_attach(struct agp_softc *, struct pci_attach_args *);<br> <br>Index: sys/dev/pci/files.agp<br>===================================================================<br>RCS file: /cvs/src/sys/dev/pci/files.agp,v<br>retrieving revision 1.2<br>diff -u -r1.2 files.agp<br>--- sys/dev/pci/files.agp	16 Mar 2008 19:00:28 -0000	1.2<br>+++ sys/dev/pci/files.agp	1 Sep 2008 03:00:10 -0000<br>@@ -17,6 +17,9 @@<br> define	agp_intel<br> file	dev/pci/agp_intel.c	agp_intel & agpbus	needs-flag<br> <br>+define	agp_nvidia<br>+file	dev/pci/agp_nvidia.c	agp_nvidia & agpbus	needs-flag<br>+<br> define	agp_sis<br> file	dev/pci/agp_sis.c	agp_sis & agpbus	needs-flag<br> <br>------------------------------------------------------------------------------<br><br>dmesg:<br>------------------------------------------------------------------------------<br>OpenBSD 4.4-current (GENERIC+nvagp) #0: Mon Sep  1 19:11:49 PDT 2008<br>    clamat@bluesong.XXXXXXXXXXXX:/sys/arch/i386/compile/GENERIC+nvagp<br>cpu0: AMD Athlon(tm) XP 2800+ ("AuthenticAMD" 686-class, 512KB L2 cache) 2.08 GHz<br>cpu0: FPU,V86,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE<br>real mem  = 2146988032 (2047MB)<br>avail mem = 2067615744 (1971MB)<br>mainbus0 at root<br>bios0 at mainbus0: AT/286+ BIOS, date 08/02/04, BIOS32 rev. 0 @ 0xfbba0, SMBIOS rev. 2.3 @ 0xf0000 (37 entries)<br>bios0: vendor Phoenix Technologies, LTD version "6.00 PG" date 08/02/2004<br>bios0: MICRO-STAR INTERNATIONAL CO., LTD MS-6570<br>apm0 at bios0: Power Management spec V1.2 (slowidle)<br>apm0: AC on, battery charge unknown<br>acpi at bios0 function 0x0 not configured<br>pcibios0 at bios0: rev 2.1 @ 0xf0000/0xdb04<br>pcibios0: PCI IRQ Routing Table rev 1.0 @ 0xfda40/192 (10 entries)<br>pcibios0: PCI Exclusive IRQs: 7 10 11 14 15<br>pcibios0: no compatible PCI ICU found<br>pcibios0: Warning, unable to fix up PCI interrupt routing<br>pcibios0: PCI bus #2 is the last bus<br>bios0: ROM list: 0xc0000/0xd000 0xd0000/0x4000<br>cpu0 at mainbus0<br>pci0 at mainbus0 bus 0: configuration mode 1 (no bios)<br>pchb0 at pci0 dev 0 function 0 "NVIDIA nForce2 PCI" rev 0xc1<br>"NVIDIA nForce2" rev 0xc1 at pci0 dev 0 function 1 not configured<br>"NVIDIA nForce2" rev 0xc1 at pci0 dev 0 function 2 not configured<br>"NVIDIA nForce2" rev 0xc1 at pci0 dev 0 function 3 not configured<br>"NVIDIA nForce2" rev 0xc1 at pci0 dev 0 function 4 not configured<br>"NVIDIA nForce2" rev 0xc1 at pci0 dev 0 function 5 not configured<br>pcib0 at pci0 dev 1 function 0 "NVIDIA nForce2 ISA" rev 0xa3<br>nviic0 at pci0 dev 1 function 1 "NVIDIA nForce2 SMBus" rev 0xa2<br>iic0 at nviic0<br>iic0: addr 0x1b 06=f0 08=03 09=03 0b=7f 0c=08 0d=08 0e=f0 0f=07 10=0c 11=03 14=55 15=55 17=ff 18=ff 1c=02 20=7f 22=07 26=30 29=ff words 00=00ff 01=00ff 02=00ff 03=00ff 04=00ff 05=00ff 06=f0ff 07=00ff<br>iic0: addr 0x2f 04=00 06=02 07=00 0c=00 0d=07 0e=84 0f=00 10=ca 11=10 12=00 13=60 14=14 15=62 16=01 17=06 words 00=ffff 01=ffff 02=ffff 03=ffff 04=00ff 05=ffff 06=02ff 07=00ff<br>spdmem0 at iic0 addr 0x50: 1GB DDR SDRAM non-parity PC3200CL3.0<br>spdmem1 at iic0 addr 0x51: 1GB DDR SDRAM non-parity PC3200CL3.0<br>iic1 at nviic0<br>ohci0 at pci0 dev 2 function 0 "NVIDIA nForce2 USB" rev 0xa3: irq 15, version 1.0, legacy support<br>ohci1 at pci0 dev 2 function 1 "NVIDIA nForce2 USB" rev 0xa3: irq 7, version 1.0, legacy support<br>ehci0 at pci0 dev 2 function 2 "NVIDIA nForce2 USB" rev 0xa3: irq 14<br>usb0 at ehci0: USB revision 2.0<br>uhub0 at usb0 "NVIDIA EHCI root hub" rev 2.00/1.00 addr 1<br>ppb0 at pci0 dev 8 function 0 "NVIDIA nForce2 PCI-PCI" rev 0xa3<br>pci1 at ppb0 bus 1<br>siop0 at pci1 dev 7 function 0 "Symbios Logic 53c1010-33" rev 0x01: irq 15, using 8K of on-board RAM<br>scsibus0 at siop0: 16 targets, initiator 7<br>sd0 at scsibus0 targ 5 lun 0: <IBM-ESXS, DTN036W3UWDY10FN, S23J> SCSI3 0/direct fixed<br>sd0: 34715MB, 512 bytes/sec, 71096640 sec total<br>sd1 at scsibus0 targ 6 lun 0: <IBM-ESXS, DTN036W3UWDY10FN, S23J> SCSI3 0/direct fixed<br>sd1: 34715MB, 512 bytes/sec, 71096640 sec total<br>sd2 at scsibus0 targ 15 lun 0: <IBM, DDYS-T18350N, S96H> SCSI3 0/direct fixed<br>sd2: 17501MB, 512 bytes/sec, 35843670 sec total<br>siop1 at pci1 dev 7 function 1 "Symbios Logic 53c1010-33" rev 0x01: irq 11, using 8K of on-board RAM<br>scsibus1 at siop1: 16 targets, initiator 7<br>cd0 at scsibus1 targ 2 lun 0: <PLEXTOR, CD-R PX-W124TS, 1.07> SCSI2 5/cdrom removable<br>st0 at scsibus1 targ 4 lun 0: <ECRIX, VXA-1, 2959> SCSI2 1/sequential removable<br>vr0 at pci1 dev 8 function 0 "VIA VT6105 RhineIII" rev 0x86: irq 11, address 00:05:5d:80:c4:8d<br>ukphy0 at vr0 phy 1: Generic IEEE 802.3u media interface, rev. 4: OUI 0x004063, model 0x0034<br>eap0 at pci1 dev 9 function 0 "Ensoniq AudioPCI" rev 0x00: irq 10<br>audio0 at eap0<br>midi0 at eap0: <AudioPCI MIDI UART><br>pciide0 at pci0 dev 9 function 0 "NVIDIA nForce2 IDE" rev 0xa2: DMA, channel 0 configured to compatibility, channel 1 configured to compatibility<br>pciide0: channel 0 ignored (disabled)<br>pciide0: channel 1 ignored (disabled)<br>ppb1 at pci0 dev 30 function 0 "NVIDIA nForce2 AGP" rev 0xc1<br>pci2 at ppb1 bus 2<br>vga1 at pci2 dev 0 function 0 "ATI Radeon 9600 Pro" rev 0x00<br>wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)<br>wsdisplay0: screen 1-5 added (80x25, vt100 emulation)<br>agp0 at vga1: aperture at 0xe0000000, size 0x4000000<br>radeondrm0 at vga1 ATI Radeon AP 9600(0), 1.29.0 20080613<br>"ATI Radeon 9600 Pro Sec" rev 0x00 at pci2 dev 0 function 1 not configured<br>isa0 at pcib0<br>isadma0 at isa0<br>com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo<br>com1 at isa0 port 0x2f8/8 irq 3: ns16550a, 16 byte fifo<br>pckbc0 at isa0 port 0x60/5<br>pckbd0 at pckbc0 (kbd slot)<br>pckbc0: using irq 1 for kbd slot<br>wskbd0 at pckbd0: console keyboard, using wsdisplay0<br>pmsi0 at pckbc0 (aux slot)<br>pckbc0: using irq 12 for aux slot<br>wsmouse0 at pmsi0 mux 0<br>pcppi0 at isa0 port 0x61<br>midi1 at pcppi0: <PC speaker><br>spkr0 at pcppi0<br>wbsio0 at isa0 port 0x4e/2: W83627HF rev 0x17<br>lm1 at wbsio0 port 0x290/8: W83627HF<br>npx0 at isa0 port 0xf0/16: reported by CPUID; using exception 16<br>fdc0 at isa0 port 0x3f0/6 irq 6 drq 2<br>fd0 at fdc0 drive 0: 1.44MB 80 cyl, 2 head, 18 sec<br>usb1 at ohci0: USB revision 1.0<br>uhub1 at usb1 "NVIDIA OHCI root hub" rev 1.00/1.00 addr 1<br>usb2 at ohci1: USB revision 1.0<br>uhub2 at usb2 "NVIDIA OHCI root hub" rev 1.00/1.00 addr 1<br>biomask ebe5 netmask ebe5 ttymask fbff<br>mtrr: Pentium Pro MTRR support<br>uhub3 at uhub0 port 4 "Standard Microsystems product 0x2514" rev 2.00/0.00 addr 2<br>udsbr0 at uhub2 port 1 "GemTek Corp USB FM Radio" rev 1.00/4.10 addr 2<br>radio0 at udsbr0<br>softraid0 at root<br>siop0: target 5 now using tagged DT 16 bit 80.0 MHz 62 REQ/ACK offset xfers<br>siop0: target 6 now using tagged DT 16 bit 80.0 MHz 62 REQ/ACK offset xfers<br>siop0: target 15 now using tagged DT 16 bit 80.0 MHz 62 REQ/ACK offset xfers<br>root on sd0a swap on sd0b dump on sd0b<br>info: [drm] Setting GART location based on new memory map<br>info: [drm] Loading R300 Microcode<br>info: [drm] Num pipes: 1<br>info: [drm] writeback test succeeded in 1 usecs<br>info: [drm] Num pipes: 1<br>info: [drm] Setting GART location based on new memory map<br>info: [drm] Loading R300 Microcode<br>info: [drm] Num pipes: 1<br>info: [drm] writeback test succeeded in 1 usecs<br>info: [drm] Num pipes: 1<br>info: [drm] Setting GART location based on new memory map<br>info: [drm] Loading R300 Microcode<br>info: [drm] Num pipes: 1<br>info: [drm] writeback test succeeded in 1 usecs<br>siop1: target 4 now using 8 bit 10.0 MHz 31 REQ/ACK offset xfers<br>umass0 at uhub0 port 1 configuration 1 interface 0 "Genesys Logic USB2.0 card Reader" rev 2.00/91.44 addr 3<br>umass0: using SCSI over Bulk-Only<br>scsibus2 at umass0: 2 targets, initiator 0<br>sd3 at scsibus2 targ 1 lun 0: <Generic, STORAGE DEVICE, 9144> SCSI0 0/direct removable<br>sd3: drive offline<br>sd4 at scsibus2 targ 1 lun 1: <Generic, STORAGE DEVICE, 9144> SCSI0 0/direct removable<br>sd4: drive offline<br>sd5 at scsibus2 targ 1 lun 2: <Generic, STORAGE DEVICE, 9144> SCSI0 0/direct removable<br>sd5: drive offline<br>sd6 at scsibus2 targ 1 lun 3: <Generic, STORAGE DEVICE, 9144> SCSI0 0/direct removable<br>sd6: drive offline<br>sd7 at scsibus2 targ 1 lun 4: <Generic, STORAGE DEVICE, 9144> SCSI0 0/direct removable<br>sd7: drive offline<br>umass1 at uhub3 port 2 configuration 1 interface 0 "LEXAR   MEDIA JUMPDRIVE PRO" rev 2.00/0.00 addr 4<br>umass1: using SCSI over Bulk-Only<br>scsibus3 at umass1: 2 targets, initiator 0<br>sd8 at scsibus3 targ 1 lun 0: <LEXAR, JUMPDRIVE PRO, 0> SCSI2 0/direct removable<br>sd8: 246MB, 512 bytes/sec, 503808 sec total<br>sd8 detached<br>scsibus3 detached<br>umass1 detached<br>------------------------------------------------------------------------------<br><br>-- <br>Debugging is twice as hard as writing the code in the first place.<br>Therefore, if you write the code as cleverly as possible, you are, by<br>definition, not smart enough to debug it.  -- Kernighan<br>				-- quoted by Quentyn Taylor<br><br>
    <table border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="30">&nbsp;</td>
        <td>Posted In: <a href="http://www.nnseek.com/e/mailing.openbsd.tech/">mailing.openbsd.tech</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/patch_nforce_agp_support_91369634t.html"><b>2</b> Comments</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/patch_nforce_agp_support_91369634m.html">Reply</a></td>
      </tr></table><br>]]></description>
	<pubDate>Tue, 02 Sep 2008 22:51:41 PDT</pubDate>
</item>
<item>
	<title><![CDATA[Looking for a OpenBSD Kernel-Developer wanted because of a company  seeking for a contact to et their devices supported]]></title>
	<guid>http://www.nnseek.com/e/mailing.openbsd.tech/looking_for_a_openbsd_kernel_developer_wanted_because_91313314t.html</guid>
	<link>http://www.nnseek.com/e/mailing.openbsd.tech/looking_for_a_openbsd_kernel_developer_wanted_because_91313314t.html</link>
	<description><![CDATA[Hello guys,<br><br>I am looking for a developer who would like to get FPGA-Cards (uploading<br>the firmware and more (they have even PPC cores!)) supported (some can get<br>plugged into the cardbus) into the official OpenBSD-Kernel.<br><br>A company I am in contact with already finished nearly a driver (wich may<br>needs checks too) but except this they do look for a way to get these<br>device s supported in GENERIC (and other architectures too as far as I<br>understood him).<br><br>But it would be better if a developer talks to them about all this. :)<br><br><br>Pasted from a e-Mail:<br><br>>             I would be happy to provide whatever we could to OpenBSD<br>> developers. I am not sure that our products meet their criteria for<br>> official inclusion in their distribution kernels.<br>So that's no real issue  I think (also he made some Linux comparsions but<br>hey, I wont be too critic about this)).<br><br>Please send me a mail! :)<br><br><br>Kind regards,<br>Sebastian<br><br>
    <table border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="30">&nbsp;</td>
        <td>Posted In: <a href="http://www.nnseek.com/e/mailing.openbsd.tech/">mailing.openbsd.tech</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/looking_for_a_openbsd_kernel_developer_wanted_because_91313314t.html"><b>2</b> Comments</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/looking_for_a_openbsd_kernel_developer_wanted_because_91313314m.html">Reply</a></td>
      </tr></table><br>]]></description>
	<pubDate>Tue, 02 Sep 2008 08:59:23 PDT</pubDate>
</item>
<item>
	<title><![CDATA[]]></title>
	<guid>http://www.nnseek.com/e/mailing.openbsd.tech/kswxhe_sdhnjmhch_h_nasw_yee_bhden_dk_ahgmeq_g_j_g_m_91016098t.html</guid>
	<link>http://www.nnseek.com/e/mailing.openbsd.tech/kswxhe_sdhnjmhch_h_nasw_yee_bhden_dk_ahgmeq_g_j_g_m_91016098t.html</link>
	<description><![CDATA[Kswxhe `sdhnjmhch h nasw`~yee bhden dk ahgmeq`. <br>G`j`g m` q`ire: biz-audio.nxt.ru<br><br>>Qanpmhj hg 100 @sdhnjmhc dk Ahgmeq`, Lnrhb`vhh h Q`lnp`gbhrh. <br>3 DVD - 40 USD <br><br>>Jnkkejvh hg 21 Bhden-Qelhm`p` ^ph Lnpng`. <br>Qngd`mhe ahgmeq`, }ttejrhbmne opnbedemhe deknb{u oepecnbnpnb, qrp`rech ahgmeq`,<br>onb{xemhej`weqrb` l{xkemh, }ttejrhbmne sop`bkemhe ahgmeqnl h r.d.   <br>9 DVD - 50 USD<br><br>>Dhqr`mvhnmm{i Nasw`~yhi Jspq Xjnk{ Qbnecn Dek` "Ahgmeq q Msk" <br>Ondpnam`, onx`cnb` hmqrpsjvh qngd`mh qbnecn ahgmeq` q msk.<br>10 leqveb naswemh - 30 USD<br><br>>Jnkkejvh 17 nasw`~yhu bhdenjspqnb: "Bqe Reumhweqjhe Lnlemr{ Nmk`im <br>Ahgmeq` b Bhdentnpl`re" Onkm{i nasw`~yhi jnlokejr bhdenjspqnb, jnrnp{e <br>m`sw`r B`q qngd`b`r| j`weqrbemm{e q`ir{, dek`r| jp`qhbs~ cp`thjs b Photoshop, <br>qbnandmn nbk`der| g{jnl p`glerjh HTML, qrhklh CSS h lmncne-lmncne <br>dpscne m` ndmnl DVD-dhqje!<br>20 USD <br><br>Oph g`j`ge ankee ndmncn jnlokejr` - qjhdjh.  <br><br>Nrop`bkel b k~as~ qrp`ms lhp`! <br><br><br><br><br><br>with the arbiter, and, for aught she knew, assiduously cultivating his<br><br>waited for people to come to him. But he always made an exception in        <br>-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-<br>another, and at length, in order to provide for the security of his<br>accordingly proclaimed her queen.<br><br>
    <table border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="30">&nbsp;</td>
        <td>Posted In: <a href="http://www.nnseek.com/e/mailing.openbsd.tech/">mailing.openbsd.tech</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/kswxhe_sdhnjmhch_h_nasw_yee_bhden_dk_ahgmeq_g_j_g_m_91016098t.html">no comments</a></td>
        <td width="20">&nbsp;</td>
        <td><a href="http://www.nnseek.com/e/mailing.openbsd.tech/kswxhe_sdhnjmhch_h_nasw_yee_bhden_dk_ahgmeq_g_j_g_m_91016098m.html">Reply</a></td>
      </tr></table><br>]]></description>
	<pubDate>Sat, 30 Aug 2008 17:20:17 PDT</pubDate>
</item>
</channel>
</rss>