Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Oct 2004 20:45:01 GMT
From:      Julian Elischer <julian@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 62690 for review
Message-ID:  <200410052045.i95Kj1wa072587@repoman.freebsd.org>

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

Change 62690 by julian@julian_ref on 2004/10/05 20:44:50

	IFC@62689

Affected files ...

.. //depot/projects/nsched/sys/alpha/osf1/osf1_misc.c#4 integrate
.. //depot/projects/nsched/sys/amd64/linux32/linux32_machdep.c#4 integrate
.. //depot/projects/nsched/sys/boot/common/help.common#5 integrate
.. //depot/projects/nsched/sys/boot/forth/loader.conf#9 integrate
.. //depot/projects/nsched/sys/cam/cam_periph.h#3 integrate
.. //depot/projects/nsched/sys/cam/cam_xpt.c#5 integrate
.. //depot/projects/nsched/sys/compat/freebsd32/freebsd32_misc.c#4 integrate
.. //depot/projects/nsched/sys/compat/linux/linux_misc.c#4 integrate
.. //depot/projects/nsched/sys/compat/svr4/svr4_misc.c#3 integrate
.. //depot/projects/nsched/sys/conf/NOTES#22 integrate
.. //depot/projects/nsched/sys/dev/cy/cy.c#10 integrate
.. //depot/projects/nsched/sys/dev/fdc/fdc_isa.c#6 integrate
.. //depot/projects/nsched/sys/dev/rp/rp.c#9 integrate
.. //depot/projects/nsched/sys/dev/rp/rpvar.h#3 integrate
.. //depot/projects/nsched/sys/dev/usb/umct.c#5 integrate
.. //depot/projects/nsched/sys/fs/procfs/procfs_status.c#3 integrate
.. //depot/projects/nsched/sys/fs/unionfs/union.h#3 integrate
.. //depot/projects/nsched/sys/fs/unionfs/union_vfsops.c#5 integrate
.. //depot/projects/nsched/sys/fs/unionfs/union_vnops.c#5 integrate
.. //depot/projects/nsched/sys/geom/mirror/g_mirror.c#10 integrate
.. //depot/projects/nsched/sys/kern/init_main.c#14 integrate
.. //depot/projects/nsched/sys/kern/kern_acct.c#3 integrate
.. //depot/projects/nsched/sys/kern/kern_clock.c#8 integrate
.. //depot/projects/nsched/sys/kern/kern_descrip.c#9 integrate
.. //depot/projects/nsched/sys/kern/kern_exit.c#20 integrate
.. //depot/projects/nsched/sys/kern/kern_kse.c#32 integrate
.. //depot/projects/nsched/sys/kern/kern_proc.c#14 integrate
.. //depot/projects/nsched/sys/kern/kern_resource.c#9 integrate
.. //depot/projects/nsched/sys/kern/kern_shutdown.c#10 integrate
.. //depot/projects/nsched/sys/kern/kern_sig.c#13 integrate
.. //depot/projects/nsched/sys/kern/kern_synch.c#17 integrate
.. //depot/projects/nsched/sys/kern/kern_thread.c#42 integrate
.. //depot/projects/nsched/sys/kern/kern_time.c#5 integrate
.. //depot/projects/nsched/sys/kern/subr_taskqueue.c#4 integrate
.. //depot/projects/nsched/sys/kern/subr_trap.c#7 integrate
.. //depot/projects/nsched/sys/kern/subr_turnstile.c#6 integrate
.. //depot/projects/nsched/sys/kern/tty.c#12 integrate
.. //depot/projects/nsched/sys/kern/vfs_mount.c#10 integrate
.. //depot/projects/nsched/sys/net/ethernet.h#3 integrate
.. //depot/projects/nsched/sys/net/route.h#5 integrate
.. //depot/projects/nsched/sys/net/rtsock.c#9 integrate
.. //depot/projects/nsched/sys/netinet/tcp_input.c#10 integrate
.. //depot/projects/nsched/sys/netinet/tcp_output.c#8 integrate
.. //depot/projects/nsched/sys/netinet/tcp_sack.c#3 integrate
.. //depot/projects/nsched/sys/netinet/tcp_subr.c#9 integrate
.. //depot/projects/nsched/sys/netinet/tcp_var.h#7 integrate
.. //depot/projects/nsched/sys/pci/agp_amd64.c#2 integrate
.. //depot/projects/nsched/sys/sys/_task.h#3 integrate
.. //depot/projects/nsched/sys/sys/interrupt.h#3 integrate
.. //depot/projects/nsched/sys/sys/proc.h#37 integrate
.. //depot/projects/nsched/sys/sys/resourcevar.h#6 integrate
.. //depot/projects/nsched/sys/sys/syscallsubr.h#4 integrate
.. //depot/projects/nsched/sys/sys/taskqueue.h#3 integrate
.. //depot/projects/nsched/sys/ufs/ffs/ffs_vfsops.c#10 integrate

Differences ...

==== //depot/projects/nsched/sys/alpha/osf1/osf1_misc.c#4 (text+ko) ====

@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/osf1/osf1_misc.c,v 1.48 2004/08/24 20:21:21 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/osf1/osf1_misc.c,v 1.49 2004/10/05 18:51:09 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1335,29 +1335,16 @@
 	struct thread *td;
 	struct osf1_getrusage_args *uap;
 {
-	struct proc *p;
-	struct rusage *rup;
 	struct osf1_rusage oru;
+	struct rusage ru;
+	int error;
 
-	p = td->td_proc;
-	switch (uap->who) {
-	case RUSAGE_SELF:
-		rup = &p->p_stats->p_ru;
-		mtx_lock_spin(&sched_lock);
-		calcru(p, &rup->ru_utime, &rup->ru_stime, NULL);
-		mtx_unlock_spin(&sched_lock);
-		break;
-
-	case RUSAGE_CHILDREN:
-		rup = &p->p_stats->p_cru;
-		break;
-
-	default:
-		return (EINVAL);
-	}
-	TV_CP(rup->ru_utime, oru.ru_utime);
-	TV_CP(rup->ru_stime, oru.ru_stime);
-	bcopy(&(rup->ru_first), &(oru.ru_first),
+	error = kern_getrusage(td, uap->who, &ru);
+	if (error)
+		return (error);
+	TV_CP(ru.ru_utime, oru.ru_utime);
+	TV_CP(ru.ru_stime, oru.ru_stime);
+	bcopy(&(ru.ru_first), &(oru.ru_first),
 	    (&(oru.ru_last) - &(oru.ru_first)));
 
 	return (copyout((caddr_t)&oru, (caddr_t)uap->rusage,
@@ -1372,9 +1359,13 @@
 {
 	int error, status;
 	struct osf1_rusage oru;
-	struct rusage ru;
+	struct rusage ru, *rup;
 
-	error = kern_wait(td, uap->pid, &status, uap->options, &ru);
+	if (uap->rusage != NULL)
+		rup = &ru;
+	else
+		rup = NULL;
+	error = kern_wait(td, uap->pid, &status, uap->options, rup);
 	if (error)
 		return (error);
 	if (uap->status != NULL)

==== //depot/projects/nsched/sys/amd64/linux32/linux32_machdep.c#4 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_machdep.c,v 1.4 2004/09/01 02:11:27 julian Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_machdep.c,v 1.5 2004/10/05 18:51:10 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -940,24 +940,14 @@
 int
 linux_getrusage(struct thread *td, struct linux_getrusage_args *uap)
 {
+	struct l_rusage s32;
+	struct rusage s;
 	int error;
-	caddr_t sg;
-	struct l_rusage *p32, s32;
-	struct rusage *p = NULL, s;
 
-	p32 = uap->rusage;
-	if (p32 != NULL) {
-		sg = stackgap_init();
-		p = stackgap_alloc(&sg, sizeof(struct rusage));
-		uap->rusage = (struct l_rusage *)p;
-	}
-	error = getrusage(td, (struct getrusage_args *) uap);
+	error = kern_getrusage(td, uap->who, &s);
 	if (error != 0)
 		return (error);
-	if (p32 != NULL) {
-		error = copyin(p, &s, sizeof(s));
-		if (error != 0)
-			return (error);
+	if (uap->rusage != NULL) {
 		s32.ru_utime.tv_sec = s.ru_utime.tv_sec;
 		s32.ru_utime.tv_usec = s.ru_utime.tv_usec;
 		s32.ru_stime.tv_sec = s.ru_stime.tv_sec;
@@ -976,7 +966,7 @@
 		s32.ru_nsignals = s.ru_nsignals;
 		s32.ru_nvcsw = s.ru_nvcsw;
 		s32.ru_nivcsw = s.ru_nivcsw;
-		error = copyout(&s32, p32, sizeof(s32));
+		error = copyout(&s32, uap->rusage, sizeof(s32));
 	}
 	return (error);
 }

==== //depot/projects/nsched/sys/boot/common/help.common#5 (text+ko) ====

@@ -319,13 +319,6 @@
 		value is 1 (default), but this may cause problems with
 		some peripherals.  Set to 0 to disable.
 
-	set vfs.root.mountdelay=<value>
-
-		Delay root partition mount if there is no required provider.
-
-		value is a maximum number of seconds to wait for provider to
-		show up (default is 5 seconds).
-
 ################################################################################
 # Tshow DShow the values of variables
 

==== //depot/projects/nsched/sys/boot/forth/loader.conf#9 (text+ko) ====

@@ -6,7 +6,7 @@
 #
 # All arguments must be in double quotes.
 #
-# $FreeBSD: src/sys/boot/forth/loader.conf,v 1.90 2004/09/30 20:02:07 ru Exp $
+# $FreeBSD: src/sys/boot/forth/loader.conf,v 1.91 2004/10/05 11:26:43 pjd Exp $
 
 ##############################################################
 ###  Basic configuration options  ############################
@@ -98,8 +98,6 @@
 #net.inet.tcp.tcbhashsize=""	# Set the value of TCBHASHSIZE
 #vfs.root.mountfrom=""		# Specify root partition in a way the
 				# kernel understands
-#vfs.root.mountdelay="5"	# Delay root partition mount if there is no
-				# required provider
 #vm.kmem_size=""		# Sets the size of kernel memory (bytes)
 #debug.ktr.cpumask="0xf"	# Bitmask of CPUs to enable KTR on
 #debug.ktr.mask="0x1200"	# Bitmask of KTR events to enable

==== //depot/projects/nsched/sys/cam/cam_periph.h#3 (text+ko) ====

@@ -25,7 +25,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/cam/cam_periph.h,v 1.14 2004/07/15 08:25:59 phk Exp $
+ * $FreeBSD: src/sys/cam/cam_periph.h,v 1.15 2004/10/05 04:22:20 scottl Exp $
  */
 
 #ifndef _CAM_CAM_PERIPH_H
@@ -81,8 +81,7 @@
 };
 
 typedef enum {
-	CAM_PERIPH_BIO,
-	CAM_PERIPH_NET
+	CAM_PERIPH_BIO
 } cam_periph_type;
 
 /* Generically usefull offsets into the peripheral private area */

==== //depot/projects/nsched/sys/cam/cam_xpt.c#5 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.142 2004/07/15 08:25:59 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.143 2004/10/05 04:22:20 scottl Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -598,7 +598,6 @@
 /* Queues for our software interrupt handler */
 typedef TAILQ_HEAD(cam_isrq, ccb_hdr) cam_isrq_t;
 static cam_isrq_t cam_bioq;
-static cam_isrq_t cam_netq;
 
 /* "Pool" of inactive ccbs managed by xpt_alloc_ccb and xpt_free_ccb */
 static SLIST_HEAD(,ccb_hdr) ccb_freeq;
@@ -658,7 +657,6 @@
 #endif
 
 /* Pointers to software interrupt handlers */
-static void *camnet_ih;
 static void *cambio_ih;
 
 #if defined(CAM_DEBUG_FLAGS) && !defined(CAMDEBUG)
@@ -1367,7 +1365,6 @@
 
 	TAILQ_INIT(&xpt_busses);
 	TAILQ_INIT(&cam_bioq);
-	TAILQ_INIT(&cam_netq);
 	SLIST_INIT(&ccb_freeq);
 	STAILQ_INIT(&highpowerq);
 
@@ -1429,7 +1426,6 @@
 	}
 
 	/* Install our software interrupt handlers */
-	swi_add(NULL, "camnet", camisr, &cam_netq, SWI_CAMNET, 0, &camnet_ih);
 	swi_add(NULL, "cambio", camisr, &cam_bioq, SWI_CAMBIO, 0, &cambio_ih);
 }
 
@@ -3610,7 +3606,6 @@
 	   && (--timeout > 0)) {
 		DELAY(1000);
 		(*(sim->sim_poll))(sim);
-		camisr(&cam_netq);
 		camisr(&cam_bioq);
 	}
 	
@@ -3621,7 +3616,6 @@
 		xpt_action(start_ccb);
 		while(--timeout > 0) {
 			(*(sim->sim_poll))(sim);
-			camisr(&cam_netq);
 			camisr(&cam_bioq);
 			if ((start_ccb->ccb_h.status  & CAM_STATUS_MASK)
 			    != CAM_REQ_INPROG)
@@ -4838,12 +4832,9 @@
 			done_ccb->ccb_h.pinfo.index = CAM_DONEQ_INDEX;
 			swi_sched(cambio_ih, 0);
 			break;
-		case CAM_PERIPH_NET:
-			TAILQ_INSERT_TAIL(&cam_netq, &done_ccb->ccb_h,
-					  sim_links.tqe);
-			done_ccb->ccb_h.pinfo.index = CAM_DONEQ_INDEX;
-			swi_sched(camnet_ih, 0);
-			break;
+		default:
+			panic("unknown periph type %d",
+			    done_ccb->ccb_h.path->periph->type);
 		}
 	}
 	splx(s);

==== //depot/projects/nsched/sys/compat/freebsd32/freebsd32_misc.c#4 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/freebsd32/freebsd32_misc.c,v 1.23 2004/06/17 17:16:41 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/freebsd32/freebsd32_misc.c,v 1.24 2004/10/05 18:51:10 jhb Exp $");
 
 #include "opt_compat.h"
 
@@ -91,9 +91,13 @@
 {
 	int error, status;
 	struct rusage32 ru32;
-	struct rusage ru;
+	struct rusage ru, *rup;
 
-	error = kern_wait(td, uap->pid, &status, uap->options, &ru);
+	if (uap->rusage != NULL)
+		rup = &ru;
+	else
+		rup = NULL;
+	error = kern_wait(td, uap->pid, &status, uap->options, rup);
 	if (error)
 		return (error);
 	if (uap->status != NULL)
@@ -639,24 +643,14 @@
 int
 freebsd32_getrusage(struct thread *td, struct freebsd32_getrusage_args *uap)
 {
+	struct rusage32 s32;
+	struct rusage s;
 	int error;
-	caddr_t sg;
-	struct rusage32 *p32, s32;
-	struct rusage *p = NULL, s;
 
-	p32 = uap->rusage;
-	if (p32) {
-		sg = stackgap_init();
-		p = stackgap_alloc(&sg, sizeof(struct rusage));
-		uap->rusage = (struct rusage32 *)p;
-	}
-	error = getrusage(td, (struct getrusage_args *) uap);
+	error = kern_getrusage(td, uap->who, &s);
 	if (error)
 		return (error);
-	if (p32) {
-		error = copyin(p, &s, sizeof(s));
-		if (error)
-			return (error);
+	if (uap->rusage != NULL) {
 		TV_CP(s, s32, ru_utime);
 		TV_CP(s, s32, ru_stime);
 		CP(s, s32, ru_maxrss);
@@ -673,7 +667,7 @@
 		CP(s, s32, ru_nsignals);
 		CP(s, s32, ru_nvcsw);
 		CP(s, s32, ru_nivcsw);
-		error = copyout(&s32, p32, sizeof(s32));
+		error = copyout(&s32, uap->rusage, sizeof(s32));
 	}
 	return (error);
 }

==== //depot/projects/nsched/sys/compat/linux/linux_misc.c#4 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linux/linux_misc.c,v 1.160 2004/08/16 11:12:57 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linux/linux_misc.c,v 1.161 2004/10/05 18:51:10 jhb Exp $");
 
 #include "opt_mac.h"
 
@@ -689,9 +689,9 @@
 int
 linux_times(struct thread *td, struct linux_times_args *args)
 {
-	struct timeval tv;
+	struct timeval tv, utime, stime, cutime, cstime;
 	struct l_times_argv tms;
-	struct rusage ru;
+	struct proc *p;
 	int error;
 
 #ifdef DEBUG
@@ -699,15 +699,17 @@
 		printf(ARGS(times, "*"));
 #endif
 
-	mtx_lock_spin(&sched_lock);
-	calcru(td->td_proc, &ru.ru_utime, &ru.ru_stime, NULL);
-	mtx_unlock_spin(&sched_lock);
+	p = td->td_proc;
+	PROC_LOCK(p);
+	calcru(p, &utime, &stime);
+	calccru(p, &cutime, &cstime);
+	PROC_UNLOCK(p);
 
-	tms.tms_utime = CONVTCK(ru.ru_utime);
-	tms.tms_stime = CONVTCK(ru.ru_stime);
+	tms.tms_utime = CONVTCK(utime);
+	tms.tms_stime = CONVTCK(stime);
 
-	tms.tms_cutime = CONVTCK(td->td_proc->p_stats->p_cru.ru_utime);
-	tms.tms_cstime = CONVTCK(td->td_proc->p_stats->p_cru.ru_stime);
+	tms.tms_cutime = CONVTCK(cutime);
+	tms.tms_cstime = CONVTCK(cstime);
 
 	if ((error = copyout(&tms, args->buf, sizeof(tms))))
 		return error;
@@ -851,7 +853,7 @@
 linux_wait4(struct thread *td, struct linux_wait4_args *args)
 {
 	int error, options, tmpstat;
-	struct rusage ru;
+	struct rusage ru, *rup;
 	struct proc *p;
 
 #ifdef DEBUG
@@ -866,7 +868,11 @@
 	if (args->options & __WCLONE)
 		options |= WLINUXCLONE;
 
-	error = kern_wait(td, args->pid, &tmpstat, options, &ru);
+	if (args->rusage != NULL)
+		rup = &ru;
+	else
+		rup = NULL;
+	error = kern_wait(td, args->pid, &tmpstat, options, rup);
 	if (error)
 		return error;
 

==== //depot/projects/nsched/sys/compat/svr4/svr4_misc.c#3 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_misc.c,v 1.73 2004/09/24 20:26:15 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_misc.c,v 1.74 2004/10/05 18:51:10 jhb Exp $");
 
 #include "opt_mac.h"
 
@@ -861,44 +861,30 @@
 	struct thread *td;
 	struct svr4_sys_times_args *uap;
 {
-	int			 error, *retval = td->td_retval;
-	struct tms		 tms;
-	struct timeval		 t;
-	struct rusage		*ru;
-	struct rusage		 r;
-	struct getrusage_args 	 ga;
+	struct timeval tv, utime, stime, cutime, cstime;
+	struct tms tms;
+	struct proc *p;
+	int error;
 
-	caddr_t sg = stackgap_init();
-	ru = stackgap_alloc(&sg, sizeof(struct rusage));
+	p = td->td_proc;
+	PROC_LOCK(p);
+	calcru(p, &utime, &stime);
+	calccru(p, &cutime, &cstime);
+	PROC_UNLOCK(p);
 
-	ga.who = RUSAGE_SELF;
-	ga.rusage = ru;
+	tms.tms_utime = timeval_to_clock_t(&utime);
+	tms.tms_stime = timeval_to_clock_t(&stime);
 
-	error = getrusage(td, &ga);
-	if (error)
-		return error;
+	tms.tms_cutime = timeval_to_clock_t(&cutime);
+	tms.tms_cstime = timeval_to_clock_t(&cstime);
 
-	if ((error = copyin(ru, &r, sizeof r)) != 0)
-		return error;
-
-	tms.tms_utime = timeval_to_clock_t(&r.ru_utime);
-	tms.tms_stime = timeval_to_clock_t(&r.ru_stime);
-
-	ga.who = RUSAGE_CHILDREN;
-	error = getrusage(td, &ga);
+	error = copyout(&tms, uap->tp, sizeof(tms));
 	if (error)
-		return error;
+		return (error);
 
-	if ((error = copyin(ru, &r, sizeof r)) != 0)
-		return error;
-
-	tms.tms_cutime = timeval_to_clock_t(&r.ru_utime);
-	tms.tms_cstime = timeval_to_clock_t(&r.ru_stime);
-
-	microtime(&t);
-	*retval = timeval_to_clock_t(&t);
-
-	return copyout(&tms, uap->tp, sizeof(tms));
+	microtime(&tv);
+	td->td_retval[0] = (int)timeval_to_clock_t(&tv);
+	return (0);
 }
 
 
@@ -1149,6 +1135,7 @@
 	int st;
 	svr4_siginfo_t *s;
 {
+	struct timeval utime, stime;
 	svr4_siginfo_t i;
 	int sig;
 
@@ -1159,16 +1146,11 @@
 
 	if (p) {
 		i.si_pid = p->p_pid;
-		mtx_lock_spin(&sched_lock);
-		if (p->p_state == PRS_ZOMBIE) {
-			i.si_stime = p->p_ru->ru_stime.tv_sec;
-			i.si_utime = p->p_ru->ru_utime.tv_sec;
-		}
-		else {
-			i.si_stime = p->p_stats->p_ru.ru_stime.tv_sec;
-			i.si_utime = p->p_stats->p_ru.ru_utime.tv_sec;
-		}
-		mtx_unlock_spin(&sched_lock);
+		PROC_LOCK(p);
+		calcru(p, &utime, &stime);
+		PROC_UNLOCK(p);
+		i.si_stime = stime.tv_sec;
+		i.si_utime = utime.tv_sec;
 	}
 
 	if (WIFEXITED(st)) {
@@ -1296,7 +1278,8 @@
 			PROC_UNLOCK(q);
 			sx_xunlock(&proctree_lock);
 			q->p_xstat = 0;
-			ruadd(&p->p_stats->p_cru, q->p_ru);
+			ruadd(&p->p_stats->p_cru, &p->p_crux, q->p_ru,
+			    &q->p_rux);
 			FREE(q->p_ru, M_ZOMBIE);
 			q->p_ru = NULL;
 

==== //depot/projects/nsched/sys/conf/NOTES#22 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/NOTES,v 1.1279 2004/09/23 08:34:50 phk Exp $
+# $FreeBSD: src/sys/conf/NOTES,v 1.1281 2004/10/04 14:16:17 yar Exp $
 #
 # NOTES -- Lines that can be cut/pasted into kernel and hints configs.
 #
@@ -514,6 +514,8 @@
 #  The `ether' device provides generic code to handle
 #  Ethernets; it is MANDATORY when an Ethernet device driver is
 #  configured or token-ring is enabled.
+#  The `vlan' device implements the VLAN tagging of Ethernet frames
+#  according to IEEE 802.1Q.  It requires `device miibus'.
 #  The `wlan' device provides generic code to support 802.11
 #  drivers, including host AP mode; it is MANDATORY for the wi
 #  driver and will eventually be required by all 802.11 drivers.
@@ -558,7 +560,7 @@
 # See pppd(8) for more details.
 #
 device		ether			#Generic Ethernet
-device		vlan			#VLAN support
+device		vlan			#VLAN support (needs miibus)
 device		wlan			#802.11 support
 device		token			#Generic TokenRing
 device		fddi			#Generic FDDI

==== //depot/projects/nsched/sys/dev/cy/cy.c#10 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/cy/cy.c,v 1.159 2004/07/15 20:47:37 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/cy/cy.c,v 1.160 2004/10/05 07:42:19 phk Exp $");
 
 #include "opt_compat.h"
 
@@ -77,6 +77,7 @@
 #include <sys/lock.h>
 #include <sys/malloc.h>
 #include <sys/mutex.h>
+#include <sys/serial.h>
 #include <sys/syslog.h>
 #include <sys/tty.h>
 
@@ -89,51 +90,7 @@
 
 #define	NCY 10			/* KLUDGE */
 
-/*
- * Dictionary so that I can name everything *sio* or *com* to compare with
- * sio.c.  There is also lots of ugly formatting and unnecessary ifdefs to
- * simplify the comparision.  These will go away.
- */
-#define	LSR_BI		CD1400_RDSR_BREAK
-#define	LSR_FE		CD1400_RDSR_FE
-#define	LSR_OE		CD1400_RDSR_OE
-#define	LSR_PE		CD1400_RDSR_PE
-#define	MCR_DTR		CD1400_MSVR2_DTR
-#define	MCR_RTS		CD1400_MSVR1_RTS
-#define	MSR_CTS		CD1400_MSVR2_CTS
-#define	MSR_DCD		CD1400_MSVR2_CD
-#define	MSR_DSR		CD1400_MSVR2_DSR
-#define	MSR_RI		CD1400_MSVR2_RI
-#define	NSIO		(NCY * CY_MAX_PORTS)
-#define	comconsole	cyconsole
-#define	comdefaultrate	cydefaultrate
-#define	com_events	cy_events
-#define	comhardclose	cyhardclose
-#define	commctl		cymctl
-#define	comparam	cyparam
-#define	comspeed	cyspeed
-#define	comstart	cystart
-#define	comwakeup	cywakeup
-#define	p_com_addr	p_cy_addr
-#define	sioclose	cyclose
-#define	siodriver	cydriver
-#define	sioinput	cyinput
-#define	siointr1	cyintr
-#define	sioioctl	cyioctl
-#define	sioopen		cyopen
-#define	siopoll		cypoll
-#define	siosettimeout	cysettimeout
-#define	siosetwater	cysetwater
-#define	comstop		cystop
-#define	siowrite	cywrite
-#define	sio_fast_ih	cy_fast_ih
-#define	sio_inited	cy_inited
-#define	sio_irec	cy_irec
-#define	sio_lock	cy_lock
-#define	sio_slow_ih	cy_slow_ih
-#define	sio_timeout	cy_timeout
-#define	sio_timeout_handle cy_timeout_handle
-#define	sio_timeouts_until_log	cy_timeouts_until_log
+#define	NPORTS		(NCY * CY_MAX_PORTS)
 
 #define	CY_MAX_PORTS		(CD1400_NO_OF_CHANNELS * CY_MAX_CD1400s)
 
@@ -153,34 +110,18 @@
 
 #define	LOTS_OF_EVENTS	64	/* helps separate urgent events from input */
 
-#define	CALLOUT_MASK		0x80
-#define	CONTROL_MASK		0x60
-#define	CONTROL_INIT_STATE	0x20
-#define	CONTROL_LOCK_STATE	0x40
-#define	DEV_TO_UNIT(dev)	(MINOR_TO_UNIT(minor(dev)))
-#define	MINOR_MAGIC_MASK	(CALLOUT_MASK | CONTROL_MASK)
 /*
- * Not all of the magic is parametrized in the following macros.  16 and
- * 0xff are related to the bitfields in a dev_t.  CY_MAX_PORTS must be
- * ((0xff & ~MINOR_MAGIC_MASK) + 1) for things to work.
- */
-#define	MINOR_TO_UNIT(mynor)	(((mynor) >> 16) * CY_MAX_PORTS \
-				 | (((mynor) & 0xff) & ~MINOR_MAGIC_MASK))
-#define	UNIT_TO_MINOR(unit)	(((unit) / CY_MAX_PORTS) << 16 \
-				 | (((unit) & 0xff) & ~MINOR_MAGIC_MASK))
-
-/*
  * com state bits.
  * (CS_BUSY | CS_TTGO) and (CS_BUSY | CS_TTGO | CS_ODEVREADY) must be higher
  * than the other bits so that they can be tested as a group without masking
  * off the low bits.
  *
  * The following com and tty flags correspond closely:
- *	CS_BUSY		= TS_BUSY (maintained by comstart(), siopoll() and
+ *	CS_BUSY		= TS_BUSY (maintained by cystart(), cypoll() and
  *				   comstop())
- *	CS_TTGO		= ~TS_TTSTOP (maintained by comparam() and comstart())
- *	CS_CTS_OFLOW	= CCTS_OFLOW (maintained by comparam())
- *	CS_RTS_IFLOW	= CRTS_IFLOW (maintained by comparam())
+ *	CS_TTGO		= ~TS_TTSTOP (maintained by cyparam() and cystart())
+ *	CS_CTS_OFLOW	= CCTS_OFLOW (maintained by cyparam())
+ *	CS_RTS_IFLOW	= CRTS_IFLOW (maintained by cyparam())
  * TS_FLUSH is not used.
  * XXX I think TIOCSETA doesn't clear TS_TTSTOP when it clears IXON.
  * XXX CS_*FLOW should be CF_*FLOW in com->flags (control flags not state).
@@ -207,8 +148,8 @@
 #define	CE_RECORD(com, errnum)		(++(com)->delta_error_counts[errnum])
 
 #ifdef SMP
-#define	COM_LOCK()	mtx_lock_spin(&sio_lock)
-#define	COM_UNLOCK()	mtx_unlock_spin(&sio_lock)
+#define	COM_LOCK()	mtx_lock_spin(&cy_lock)
+#define	COM_UNLOCK()	mtx_unlock_spin(&cy_lock)
 #else
 #define	COM_LOCK()
 #define	COM_UNLOCK()
@@ -228,36 +169,13 @@
 /* com device structure */
 struct com_s {
 	u_char	state;		/* miscellaneous flag bits */
-	bool_t  active_out;	/* nonzero if the callout device is open */
-#if 0
-	u_char	cfcr_image;	/* copy of value written to CFCR */
-#endif
 	u_char	etc;		/* pending Embedded Transmit Command */
 	u_char	extra_state;	/* more flag bits, separate for order trick */
-#if 0
-	u_char	fifo_image;	/* copy of value written to FIFO */
-#endif
 	u_char	gfrcr_image;	/* copy of value read from GFRCR */
-#if 0
-	bool_t	hasfifo;	/* nonzero for 16550 UARTs */
-	bool_t	loses_outints;	/* nonzero if device loses output interrupts */
-#endif
 	u_char	mcr_dtr;	/* MCR bit that is wired to DTR */
 	u_char	mcr_image;	/* copy of value written to MCR */
 	u_char	mcr_rts;	/* MCR bit that is wired to RTS */
-#if 0
-#ifdef COM_MULTIPORT
-	bool_t	multiport;	/* is this unit part of a multiport device? */
-#endif /* COM_MULTIPORT */
-	bool_t	no_irq;		/* nonzero if irq is not attached */
-	bool_t	poll;		/* nonzero if polling is required */
-	bool_t	poll_output;	/* nonzero if polling for output is required */
-#endif
 	int	unit;		/* unit	number */
-#if 0
-	u_int	tx_fifo_size;
-#endif
-	u_int	wopeners;	/* # processes waiting for DCD in open() */
 
 	/*
 	 * The high level of the driver never reads status registers directly
@@ -286,17 +204,6 @@
 
 	struct tty	*tp;	/* cross reference */
 
-	/* Initial state. */
-	struct termios	it_in;	/* should be in struct tty */
-	struct termios	it_out;
-
-	/* Lock state. */
-	struct termios	lt_in;	/* should be in struct tty */
-	struct termios	lt_out;
-
-	bool_t	do_timestamp;
-	struct timeval	timestamp;
-
 	u_long	bytes_in;	/* statistics */
 	u_long	bytes_out;
 	u_int	delta_error_counts[CE_NTYPES];
@@ -305,7 +212,7 @@
 	u_int	recv_exception;	/* exception chars received */
 	u_int	mdm;		/* modem signal changes */
 #ifdef CyDebug
-	u_int	start_count;	/* no. of calls to comstart() */
+	u_int	start_count;	/* no. of calls to cystart() */
 	u_int	start_real;	/* no. of calls that did something */
 #endif
 	u_char	car;		/* CD1400 CAR shadow (if first unit in cd) */
@@ -329,55 +236,41 @@
 static	void	cd_etc(struct com_s *com, int etc);
 static	int	cd_getreg(struct com_s *com, int reg);
 static	void	cd_setreg(struct com_s *com, int reg, int val);
-static	void	comhardclose(struct com_s *com);
-static	void	sioinput(struct com_s *com);
-static	int	commctl(struct com_s *com, int bits, int how);
-static	int	comparam(struct tty *tp, struct termios *t);
-static	void	siopoll(void *arg);
-static	void	siosettimeout(void);
-static	int	siosetwater(struct com_s *com, speed_t speed);
-static	int	comspeed(speed_t speed, u_long cy_clock, int *prescaler_io);
-static	void	comstart(struct tty *tp);
+static	void	cyinput(struct com_s *com);
+static	int	cyparam(struct tty *tp, struct termios *t);
+static	void	cypoll(void *arg);
+static	void	cysettimeout(void);
+static	int	cysetwater(struct com_s *com, speed_t speed);
+static	int	cyspeed(speed_t speed, u_long cy_clock, int *prescaler_io);
+static	void	cystart(struct tty *tp);
 static	void	comstop(struct tty *tp, int rw);
-static	timeout_t comwakeup;
+static	timeout_t cywakeup;
 static	void	disc_optim(struct tty *tp, struct termios *t,
 		    struct com_s *com);
 
+static t_break_t	cybreak;
+static t_modem_t	cymodem;
+static t_open_t		cyopen;
+static t_close_t	cyclose;
+
 #ifdef CyDebug
 void	cystatus(int unit);
 #endif
 
-static struct	mtx sio_lock;
-static int	sio_inited;
+static struct	mtx cy_lock;
+static int	cy_inited;
 
 /* table and macro for fast conversion from a unit number to its com struct */
-static	struct com_s	*p_com_addr[NSIO];
-#define	com_addr(unit)	(p_com_addr[unit])
+static	struct com_s	*p_cy_addr[NPORTS];
+#define	cy_addr(unit)	(p_cy_addr[unit])
 
-static	d_open_t	sioopen;
-static	d_close_t	sioclose;
-static	d_write_t	siowrite;
-static	d_ioctl_t	sioioctl;
-
-static struct cdevsw sio_cdevsw = {
-	.d_version =	D_VERSION,
-	.d_open =	sioopen,
-	.d_close =	sioclose,
-	.d_write =	siowrite,
-	.d_ioctl =	sioioctl,
-	.d_name =	cy_driver_name,
-	.d_flags =	D_TTY | D_NEEDGIANT,
-};
-
-static	int	comconsole = -1;
-static	speed_t	comdefaultrate = TTYDEF_SPEED;
-static	u_int	com_events;	/* input chars + weighted output completions */
-static	void	*sio_fast_ih;
-static	void	*sio_slow_ih;
-static	int	sio_timeout;
-static	int	sio_timeouts_until_log;
-static	struct	callout_handle sio_timeout_handle
-    = CALLOUT_HANDLE_INITIALIZER(&sio_timeout_handle);
+static	u_int	cy_events;	/* input chars + weighted output completions */
+static	void	*cy_fast_ih;
+static	void	*cy_slow_ih;
+static	int	cy_timeout;
+static	int	cy_timeouts_until_log;
+static	struct	callout_handle cy_timeout_handle
+    = CALLOUT_HANDLE_INITIALIZER(&cy_timeout_handle);
 
 #ifdef CyDebug
 static	u_int	cd_inbs;
@@ -397,9 +290,7 @@
 static	int	volatile RxFifoThreshold = (CD1400_RX_FIFO_SIZE / 2);
 
 int
-cy_units(cy_iobase, cy_align)
-	cy_addr	cy_iobase;
-	int	cy_align;
+cy_units(cy_addr cy_iobase, int cy_align)
 {
 	int	cyu;
 	u_char	firmware_version;
@@ -449,22 +340,20 @@
 }
 
 void *
-cyattach_common(cy_iobase, cy_align)
-	cy_addr	cy_iobase;
-	int	cy_align;
+cyattach_common(cy_addr cy_iobase, int cy_align)
 {
 	int	adapter;
 	int	cyu;
 	u_char	firmware_version;
 	cy_addr	iobase;
-	int	minorbase;
 	int	ncyu;
 	int	unit;
+	struct tty *tp;
 
-	while (sio_inited != 2)
-		if (atomic_cmpset_int(&sio_inited, 0, 1)) {
-			mtx_init(&sio_lock, cy_driver_name, NULL, MTX_SPIN);
-			atomic_store_rel_int(&sio_inited, 2);
+	while (cy_inited != 2)
+		if (atomic_cmpset_int(&cy_inited, 0, 1)) {
+			mtx_init(&cy_lock, cy_driver_name, NULL, MTX_SPIN);
+			atomic_store_rel_int(&cy_inited, 2);
 		}
 
 	adapter = cy_total_devices;
@@ -497,325 +386,116 @@
 			struct com_s	*com;
 			int		s;
 
-	com = malloc(sizeof *com, M_DEVBUF, M_NOWAIT | M_ZERO);
-	if (com == NULL)
-		break;
-	com->unit = unit;
+			com = malloc(sizeof *com, M_DEVBUF, M_NOWAIT | M_ZERO);
+			if (com == NULL)
+				break;
+			com->unit = unit;
 			com->gfrcr_image = firmware_version;
 			if (CY_RTS_DTR_SWAPPED(firmware_version)) {
-				com->mcr_dtr = MCR_RTS;
-				com->mcr_rts = MCR_DTR;
+				com->mcr_dtr = CD1400_MSVR1_RTS;
+				com->mcr_rts = CD1400_MSVR2_DTR;
 				com->mcr_rts_reg = CD1400_MSVR2;
 			} else {
-				com->mcr_dtr = MCR_DTR;
-				com->mcr_rts = MCR_RTS;
+				com->mcr_dtr = CD1400_MSVR2_DTR;
+				com->mcr_rts = CD1400_MSVR1_RTS;
 				com->mcr_rts_reg = CD1400_MSVR1;
 			}
-	com->obufs[0].l_head = com->obuf1;
-	com->obufs[1].l_head = com->obuf2;
+			com->obufs[0].l_head = com->obuf1;
+			com->obufs[1].l_head = com->obuf2;
 
 			com->cy_align = cy_align;
 			com->cy_iobase = cy_iobase;
-	com->iobase = iobase;
+			com->iobase = iobase;
 			com->car = ~CD1400_CAR_CHAN;
 
-	/*
-	 * We don't use all the flags from <sys/ttydefaults.h> since they
-	 * are only relevant for logins.  It's important to have echo off
-	 * initially so that the line doesn't start blathering before the
-	 * echo flag can be turned off.
-	 */
-	com->it_in.c_iflag = 0;
-	com->it_in.c_oflag = 0;
-	com->it_in.c_cflag = TTYDEF_CFLAG;
-	com->it_in.c_lflag = 0;
-	if (unit == comconsole) {
-		com->it_in.c_iflag = TTYDEF_IFLAG;
-		com->it_in.c_oflag = TTYDEF_OFLAG;
-		com->it_in.c_cflag = TTYDEF_CFLAG | CLOCAL;
-		com->it_in.c_lflag = TTYDEF_LFLAG;
-		com->lt_out.c_cflag = com->lt_in.c_cflag = CLOCAL;
-	}
-	if (siosetwater(com, com->it_in.c_ispeed) != 0) {
-		free(com, M_DEVBUF);
-		return (NULL);
-	}
-	termioschars(&com->it_in);
-	com->it_in.c_ispeed = com->it_in.c_ospeed = comdefaultrate;
-	com->it_out = com->it_in;
+			tp = com->tp = ttyalloc();
+			tp->t_open = cyopen;
+			tp->t_close = cyclose;
+			tp->t_oproc = cystart;
+			tp->t_stop = comstop;
+			tp->t_param = cyparam;
+			tp->t_break = cybreak;
+			tp->t_modem = cymodem;
+			tp->t_sc = com;
+
+			if (cysetwater(com, tp->t_init_in.c_ispeed) != 0) {
+				free(com, M_DEVBUF);
+				return (NULL);
+			}
 
-	s = spltty();
-	com_addr(unit) = com;
-	splx(s);
+			s = spltty();
+			cy_addr(unit) = com;
+			splx(s);
 
-	if (sio_fast_ih == NULL) {
-		swi_add(&tty_ithd, "cy", siopoll, NULL, SWI_TTY, 0,
-			&sio_fast_ih);
-		swi_add(&clk_ithd, "cy", siopoll, NULL, SWI_CLOCK, 0,
-			&sio_slow_ih);
-	}
-	minorbase = UNIT_TO_MINOR(unit);
-	make_dev(&sio_cdevsw, minorbase,
-		UID_ROOT, GID_WHEEL, 0600, "ttyc%r%r", adapter,
-		unit % CY_MAX_PORTS);
-	make_dev(&sio_cdevsw, minorbase | CONTROL_INIT_STATE,
-		UID_ROOT, GID_WHEEL, 0600, "ttyic%r%r", adapter,
-		unit % CY_MAX_PORTS);
-	make_dev(&sio_cdevsw, minorbase | CONTROL_LOCK_STATE,
-		UID_ROOT, GID_WHEEL, 0600, "ttylc%r%r", adapter,
-		unit % CY_MAX_PORTS);
-	make_dev(&sio_cdevsw, minorbase | CALLOUT_MASK,

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



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