PERFORCE change 71353 for review

Eric Anholt anholt at FreeBSD.org
Sat Feb 19 17:37:06 PST 2005


http://perforce.freebsd.org/chv.cgi?CH=71353

Change 71353 by anholt at anholt_leguin on 2005/02/20 01:36:40

	IFC @71352 to get uipc_syscalls.c fix.

Affected files ...

.. //depot/projects/drm-merge/sys/alpha/include/exec.h#2 integrate
.. //depot/projects/drm-merge/sys/amd64/include/exec.h#2 integrate
.. //depot/projects/drm-merge/sys/arm/arm/cpufunc_asm.S#2 integrate
.. //depot/projects/drm-merge/sys/arm/include/exec.h#2 integrate
.. //depot/projects/drm-merge/sys/dev/acpica/acpi_perf.c#2 integrate
.. //depot/projects/drm-merge/sys/geom/geom_vfs.c#2 integrate
.. //depot/projects/drm-merge/sys/i386/include/_types.h#2 integrate
.. //depot/projects/drm-merge/sys/i386/include/exec.h#2 integrate
.. //depot/projects/drm-merge/sys/ia64/include/exec.h#2 integrate
.. //depot/projects/drm-merge/sys/kern/kern_cpu.c#2 integrate
.. //depot/projects/drm-merge/sys/kern/kern_module.c#2 integrate
.. //depot/projects/drm-merge/sys/kern/kern_sig.c#2 integrate
.. //depot/projects/drm-merge/sys/kern/uipc_syscalls.c#2 integrate
.. //depot/projects/drm-merge/sys/kern/vfs_subr.c#2 integrate
.. //depot/projects/drm-merge/sys/net/if_ethersubr.c#2 integrate
.. //depot/projects/drm-merge/sys/net/if_vlan.c#2 integrate
.. //depot/projects/drm-merge/sys/net/if_vlan_var.h#2 integrate
.. //depot/projects/drm-merge/sys/netgraph/ng_ksocket.c#2 integrate
.. //depot/projects/drm-merge/sys/nfsclient/nfs_socket.c#2 integrate
.. //depot/projects/drm-merge/sys/nfsclient/nfs_vnops.c#2 integrate
.. //depot/projects/drm-merge/sys/powerpc/include/exec.h#2 integrate
.. //depot/projects/drm-merge/sys/sys/bufobj.h#2 integrate
.. //depot/projects/drm-merge/sys/sys/cpu.h#2 integrate
.. //depot/projects/drm-merge/sys/sys/mbuf.h#2 integrate
.. //depot/projects/drm-merge/sys/sys/param.h#2 integrate
.. //depot/projects/drm-merge/sys/ufs/ffs/ffs_snapshot.c#2 integrate
.. //depot/projects/drm-merge/sys/ufs/ffs/ffs_vfsops.c#2 integrate
.. //depot/projects/drm-merge/sys/ufs/ufs/ufs_inode.c#2 integrate
.. //depot/projects/drm-merge/sys/vm/vnode_pager.c#2 integrate

Differences ...

==== //depot/projects/drm-merge/sys/alpha/include/exec.h#2 (text+ko) ====

@@ -29,7 +29,12 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/alpha/include/exec.h,v 1.3 2005/01/05 20:05:50 imp Exp $
+ * $FreeBSD: src/sys/alpha/include/exec.h,v 1.4 2005/02/19 21:16:48 ru Exp $
  */
 
-#define __LDPGSZ	8192
+#ifndef	_MACHINE_EXEC_H_
+#define	_MACHINE_EXEC_H_
+
+#define	__LDPGSZ	8192
+
+#endif /* !_MACHINE_EXEC_H_ */

==== //depot/projects/drm-merge/sys/amd64/include/exec.h#2 (text+ko) ====

@@ -27,12 +27,12 @@
  * SUCH DAMAGE.
  *
  *	@(#)exec.h	8.1 (Berkeley) 6/11/93
- * $FreeBSD: src/sys/amd64/include/exec.h,v 1.9 2004/04/05 21:25:51 imp Exp $
+ * $FreeBSD: src/sys/amd64/include/exec.h,v 1.10 2005/02/19 21:16:48 ru Exp $
  */
 
-#ifndef	_EXEC_H_
-#define	_EXEC_H_
+#ifndef	_MACHINE_EXEC_H_
+#define	_MACHINE_EXEC_H_
 
-#define __LDPGSZ	4096
+#define	__LDPGSZ	4096
 
-#endif /* !_EXEC_H_ */
+#endif /* !_MACHINE_EXEC_H_ */

==== //depot/projects/drm-merge/sys/arm/arm/cpufunc_asm.S#2 (text+ko) ====

@@ -43,7 +43,7 @@
  */
  
 #include <machine/asm.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/cpufunc_asm.S,v 1.3 2005/01/05 21:58:47 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/cpufunc_asm.S,v 1.5 2005/02/20 01:26:01 cognet Exp $");
 
 	.text
 	.align	0
@@ -121,9 +121,7 @@
 
 	teq	r2, r3			/* Only write if there is a change */
 	mcrne	p15, 0, r2, c1, c0, 0	/* Write new control register */
-	#if 0
 	mov	r0, r3			/* Return old value */
-	#endif
 
 	RET
 .Lglou:

==== //depot/projects/drm-merge/sys/arm/include/exec.h#2 (text+ko) ====

@@ -26,12 +26,12 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/arm/include/exec.h,v 1.2 2005/01/05 21:58:48 imp Exp $
+ * $FreeBSD: src/sys/arm/include/exec.h,v 1.3 2005/02/19 21:16:48 ru Exp $
  */
 
-#ifndef _EXEC_H_
-#define	_EXEC_H_
+#ifndef	_MACHINE_EXEC_H_
+#define	_MACHINE_EXEC_H_
 
-#define __LDPGSZ	4096
+#define	__LDPGSZ	4096
 
-#endif /* !_EXEC_H_ */
+#endif /* !_MACHINE_EXEC_H_ */

==== //depot/projects/drm-merge/sys/dev/acpica/acpi_perf.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_perf.c,v 1.9 2005/02/18 00:23:36 njl Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_perf.c,v 1.10 2005/02/19 06:13:26 njl Exp $");
 
 #include "opt_acpi.h"
 #include <sys/param.h>
@@ -64,7 +64,11 @@
 	uint32_t	 sts_val;
 };
 
-#define MAX_PX_STATES	 16
+/* Offsets in struct cf_setting array for storing driver-specific values. */
+#define PX_SPEC_CONTROL	0
+#define PX_SPEC_STATUS	1
+
+#define MAX_PX_STATES	16
 
 struct acpi_perf_softc {
 	device_t	 dev;
@@ -389,6 +393,8 @@
 	set->lat = px->trans_lat;
 	set->volts = CPUFREQ_VAL_UNKNOWN;
 	set->dev = dev;
+	set->spec[PX_SPEC_CONTROL] = px->ctrl_val;
+	set->spec[PX_SPEC_STATUS] = px->sts_val;
 
 	return (0);
 }

==== //depot/projects/drm-merge/sys/geom/geom_vfs.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/geom_vfs.c,v 1.8 2005/02/10 12:10:35 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/geom_vfs.c,v 1.9 2005/02/19 11:44:56 phk Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -153,6 +153,7 @@
 	bo->bo_ops = g_vfs_bufops;
 	bo->bo_private = cp;
 	bo->bo_bsize = pp->sectorsize;
+	gp->softc = bo;
 
 	return (error);
 }
@@ -161,9 +162,12 @@
 g_vfs_close(struct g_consumer *cp, struct thread *td)
 {
 	struct g_geom *gp;
+	struct bufobj *bo;
 
 	g_topology_assert();
 
 	gp = cp->geom;
+	bo = gp->softc;
+	bufobj_invalbuf(bo, V_SAVE, td, 0, 0);
 	g_wither_geom_close(gp, ENXIO);
 }

==== //depot/projects/drm-merge/sys/i386/include/_types.h#2 (text+ko) ====

@@ -33,7 +33,7 @@
  *
  *	From: @(#)ansi.h	8.2 (Berkeley) 1/4/94
  *	From: @(#)types.h	8.3 (Berkeley) 1/5/94
- * $FreeBSD: src/sys/i386/include/_types.h,v 1.9 2004/03/20 20:41:40 marcel Exp $
+ * $FreeBSD: src/sys/i386/include/_types.h,v 1.10 2005/02/19 13:46:40 marius Exp $
  */
 
 #ifndef _MACHINE__TYPES_H_
@@ -119,7 +119,7 @@
 #else
 typedef	char *			__va_list;
 #endif /* ! (__GNUC__ post 2.95 || __INTEL_COMPILER) */
-#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(__GNUC_VA_LIST) && !defined(__NO_GNUC_VA_LIST)
+#if defined(__GNUC__) && !defined(__GNUC_VA_LIST) && !defined(__NO_GNUC_VA_LIST)
 #define __GNUC_VA_LIST
 typedef __va_list		__gnuc_va_list;	/* compatibility w/GNU headers*/
 #endif

==== //depot/projects/drm-merge/sys/i386/include/exec.h#2 (text+ko) ====

@@ -27,12 +27,12 @@
  * SUCH DAMAGE.
  *
  *	@(#)exec.h	8.1 (Berkeley) 6/11/93
- * $FreeBSD: src/sys/i386/include/exec.h,v 1.9 2004/04/07 20:46:05 imp Exp $
+ * $FreeBSD: src/sys/i386/include/exec.h,v 1.10 2005/02/19 21:16:48 ru Exp $
  */
 
-#ifndef	_EXEC_H_
-#define	_EXEC_H_
+#ifndef	_MACHINE_EXEC_H_
+#define	_MACHINE_EXEC_H_
 
-#define __LDPGSZ	4096
+#define	__LDPGSZ	4096
 
-#endif /* !_EXEC_H_ */
+#endif /* !_MACHINE_EXEC_H_ */

==== //depot/projects/drm-merge/sys/ia64/include/exec.h#2 (text+ko) ====

@@ -29,7 +29,12 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/ia64/include/exec.h,v 1.2 2005/01/06 22:18:23 imp Exp $
+ * $FreeBSD: src/sys/ia64/include/exec.h,v 1.3 2005/02/19 21:16:48 ru Exp $
  */
 
-#define __LDPGSZ	4096
+#ifndef	_MACHINE_EXEC_H_
+#define	_MACHINE_EXEC_H_
+
+#define	__LDPGSZ	4096
+
+#endif /* !_MACHINE_EXEC_H_ */

==== //depot/projects/drm-merge/sys/kern/kern_cpu.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_cpu.c,v 1.8 2005/02/18 00:23:36 njl Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_cpu.c,v 1.9 2005/02/20 00:59:15 njl Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -91,6 +91,7 @@
 		    struct cf_level *dup, struct cf_setting *set);
 static int	cpufreq_curr_sysctl(SYSCTL_HANDLER_ARGS);
 static int	cpufreq_levels_sysctl(SYSCTL_HANDLER_ARGS);
+static int	cpufreq_settings_sysctl(SYSCTL_HANDLER_ARGS);
 
 static device_method_t cpufreq_methods[] = {
 	DEVMETHOD(device_probe,		bus_generic_probe),
@@ -745,12 +746,52 @@
 	return (error);
 }
 
+static int
+cpufreq_settings_sysctl(SYSCTL_HANDLER_ARGS)
+{
+	device_t dev;
+	struct cf_setting *sets;
+	struct sbuf sb;
+	int error, i, set_count;
+
+	dev = oidp->oid_arg1;
+	sbuf_new(&sb, NULL, 128, SBUF_AUTOEXTEND);
+
+	/* Get settings from the device and generate the output string. */
+	set_count = MAX_SETTINGS;
+	sets = malloc(set_count * sizeof(*sets), M_TEMP, M_NOWAIT);
+	if (sets == NULL)
+		return (ENOMEM);
+	error = CPUFREQ_DRV_SETTINGS(dev, sets, &set_count);
+	if (error)
+		goto out;
+	if (set_count) {
+		for (i = 0; i < set_count; i++)
+			sbuf_printf(&sb, "%d/%d ", sets[i].freq, sets[i].power);
+	} else
+		sbuf_cpy(&sb, "0");
+	sbuf_trim(&sb);
+	sbuf_finish(&sb);
+	error = sysctl_handle_string(oidp, sbuf_data(&sb), sbuf_len(&sb), req);
+
+out:
+	free(sets, M_TEMP);
+	sbuf_delete(&sb);
+	return (error);
+}
+
 int
 cpufreq_register(device_t dev)
 {
 	struct cpufreq_softc *sc;
 	device_t cf_dev, cpu_dev;
 
+	/* Add a sysctl to get each driver's settings separately. */
+	SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
+	    SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
+	    OID_AUTO, "freq_settings", CTLTYPE_STRING | CTLFLAG_RD, dev, 0,
+	    cpufreq_settings_sysctl, "A", "CPU frequency driver settings");
+
 	/*
 	 * Add only one cpufreq device to each CPU.  Currently, all CPUs
 	 * must offer the same levels and be switched at the same time.

==== //depot/projects/drm-merge/sys/kern/kern_module.c#2 (text+ko) ====

@@ -27,7 +27,7 @@
 #include "opt_compat.h"
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_module.c,v 1.47 2005/01/19 17:53:06 ps Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_module.c,v 1.48 2005/02/18 22:14:40 ps Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -457,10 +457,10 @@
 	id = mod->id;
 	refs = mod->refs;
 	name = mod->name;
-	CP(data32, mod->data, intval);
-	CP(data32, mod->data, uintval);
-	CP(data32, mod->data, longval);
-	CP(data32, mod->data, ulongval);
+	CP(mod->data, data32, intval);
+	CP(mod->data, data32, uintval);
+	CP(mod->data, data32, longval);
+	CP(mod->data, data32, ulongval);
 	MOD_SUNLOCK;
 	stat32 = uap->stat;
 

==== //depot/projects/drm-merge/sys/kern/kern_sig.c#2 (text+ko) ====

@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_sig.c,v 1.300 2005/02/13 17:37:18 sobomax Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_sig.c,v 1.301 2005/02/19 06:05:49 davidxu Exp $");
 
 #include "opt_compat.h"
 #include "opt_ktrace.h"
@@ -846,10 +846,9 @@
 	struct sigacts *ps;
 	sigset_t savedmask, sigset;
 	struct proc *p;
-	int error;
-	int sig;
-	int hz;
-	int i;
+	int error, sig, hz, i, timevalid = 0;
+	struct timespec rts, ets, ts;
+	struct timeval tv;
 
 	p = td->td_proc;
 	error = 0;
@@ -859,6 +858,14 @@
 	PROC_LOCK(p);
 	ps = p->p_sigacts;
 	savedmask = td->td_sigmask;
+	if (timeout) {
+		if (timeout->tv_nsec >= 0 && timeout->tv_nsec < 1000000000) {
+			timevalid = 1;
+			getnanouptime(&rts);
+		 	ets = rts;
+			timespecadd(&ets, timeout);
+		}
+	}
 
 again:
 	for (i = 1; i <= _SIG_MAXSIG; ++i) {
@@ -909,17 +916,18 @@
 	 * signals.
 	 */
 	if (timeout) {
-		struct timeval tv;
-
-		if (timeout->tv_nsec < 0 || timeout->tv_nsec > 1000000000) {
+		if (!timevalid) {
 			error = EINVAL;
 			goto out;
 		}
-		if (timeout->tv_sec == 0 && timeout->tv_nsec == 0) {
+		getnanouptime(&rts);
+		if (timespeccmp(&rts, &ets, >=)) {
 			error = EAGAIN;
 			goto out;
 		}
-		TIMESPEC_TO_TIMEVAL(&tv, timeout);
+		ts = ets;
+		timespecsub(&ts, &rts);
+		TIMESPEC_TO_TIMEVAL(&tv, &ts);
 		hz = tvtohz(&tv);
 	} else
 		hz = 0;
@@ -927,8 +935,15 @@
 	td->td_waitset = &waitset;
 	error = msleep(&ps, &p->p_mtx, PPAUSE|PCATCH, "sigwait", hz);
 	td->td_waitset = NULL;
-	if (error == 0) /* surplus wakeup ? */
-		error = EINTR;
+	if (timeout) {
+		if (error == ERESTART) {
+			/* timeout can not be restarted. */
+			error = EINTR;
+		} else if (error == EAGAIN) {
+			/* will calculate timeout by ourself. */
+			error = 0;
+		}
+	}
 	goto again;
 
 out:
@@ -946,6 +961,7 @@
 		_STOPEVENT(p, S_SIG, sig);
 
 		SIGDELSET(td->td_siglist, sig);
+		bzero(info, sizeof(*info));
 		info->si_signo = sig;
 		info->si_code = 0;
 	}

==== //depot/projects/drm-merge/sys/kern/uipc_syscalls.c#2 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/uipc_syscalls.c,v 1.215 2005/02/18 19:37:36 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/uipc_syscalls.c,v 1.216 2005/02/18 21:39:55 rwatson Exp $");
 
 #include "opt_compat.h"
 #include "opt_ktrace.h"
@@ -501,7 +501,7 @@
 {
 	struct socket *so;
 	struct file *fp;
-	int error, s;
+	int error;
 	int interrupted = 0;
 
 	NET_LOCK_GIANT();

==== //depot/projects/drm-merge/sys/kern/vfs_subr.c#2 (text+ko) ====

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/vfs_subr.c,v 1.582 2005/02/18 11:13:56 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/vfs_subr.c,v 1.583 2005/02/19 11:44:56 phk Exp $");
 
 #include "opt_ddb.h"
 #include "opt_mac.h"
@@ -84,7 +84,7 @@
 static void	delmntque(struct vnode *vp);
 static void	insmntque(struct vnode *vp, struct mount *mp);
 static void	vlruvp(struct vnode *vp);
-static int	flushbuflist(struct bufv *bufv, int flags, struct vnode *vp,
+static int	flushbuflist(struct bufv *bufv, int flags, struct bufobj *bo,
 		    int slpflag, int slptimeo);
 static void	syncer_shutdown(void *arg, int howto);
 static int	vtryrecycle(struct vnode *vp);
@@ -927,22 +927,14 @@
 }
 
 /*
- * Flush out and invalidate all buffers associated with a vnode.
+ * Flush out and invalidate all buffers associated with a bufobj
  * Called with the underlying object locked.
  */
 int
-vinvalbuf(vp, flags, td, slpflag, slptimeo)
-	struct vnode *vp;
-	int flags;
-	struct thread *td;
-	int slpflag, slptimeo;
+bufobj_invalbuf(struct bufobj *bo, int flags, struct thread *td, int slpflag, int slptimeo)
 {
 	int error;
-	struct bufobj *bo;
 
-	ASSERT_VOP_LOCKED(vp, "vinvalbuf");
-
-	bo = &vp->v_bufobj;
 	BO_LOCK(bo);
 	if (flags & V_SAVE) {
 		error = bufobj_wwait(bo, slpflag, slptimeo);
@@ -970,10 +962,10 @@
 	 */
 	do {
 		error = flushbuflist(&bo->bo_clean,
-		    flags, vp, slpflag, slptimeo);
+		    flags, bo, slpflag, slptimeo);
 		if (error == 0)
 			error = flushbuflist(&bo->bo_dirty,
-			    flags, vp, slpflag, slptimeo);
+			    flags, bo, slpflag, slptimeo);
 		if (error != 0 && error != EAGAIN) {
 			BO_UNLOCK(bo);
 			return (error);
@@ -990,7 +982,7 @@
 		BO_UNLOCK(bo);
 		if (bo->bo_object != NULL) {
 			VM_OBJECT_LOCK(bo->bo_object);
-			vm_object_pip_wait(bo->bo_object, "vnvlbx");
+			vm_object_pip_wait(bo->bo_object, "bovlbx");
 			VM_OBJECT_UNLOCK(bo->bo_object);
 		}
 		BO_LOCK(bo);
@@ -1018,21 +1010,31 @@
 }
 
 /*
+ * Flush out and invalidate all buffers associated with a vnode.
+ * Called with the underlying object locked.
+ */
+int
+vinvalbuf(struct vnode *vp, int flags, struct thread *td, int slpflag, int slptimeo)
+{
+
+	ASSERT_VOP_LOCKED(vp, "vinvalbuf");
+	return (bufobj_invalbuf(&vp->v_bufobj, flags, td, slpflag, slptimeo));
+}
+
+/*
  * Flush out buffers on the specified list.
  *
  */
 static int
-flushbuflist(bufv, flags, vp, slpflag, slptimeo)
+flushbuflist(bufv, flags, bo, slpflag, slptimeo)
 	struct bufv *bufv;
 	int flags;
-	struct vnode *vp;
+	struct bufobj *bo;
 	int slpflag, slptimeo;
 {
 	struct buf *bp, *nbp;
 	int retval, error;
-	struct bufobj *bo;
 
-	bo = &vp->v_bufobj;
 	ASSERT_BO_LOCKED(bo);
 
 	retval = 0;
@@ -1049,31 +1051,23 @@
 			BO_LOCK(bo);
 			return (error != ENOLCK ? error : EAGAIN);
 		}
+		if (bp->b_bufobj != bo) {	/* XXX: necessary ? */
+			BO_LOCK(bo);
+			return (EAGAIN);
+		}
 		/*
 		 * XXX Since there are no node locks for NFS, I
 		 * believe there is a slight chance that a delayed
 		 * write will occur while sleeping just above, so
-		 * check for it.  Note that vfs_bio_awrite expects
-		 * buffers to reside on a queue, while bwrite and
-		 * brelse do not.
+		 * check for it.
 		 */
 		if (((bp->b_flags & (B_DELWRI | B_INVAL)) == B_DELWRI) &&
-			(flags & V_SAVE)) {
-
-			if (bp->b_vp == vp) {
-				if (bp->b_flags & B_CLUSTEROK) {
-					vfs_bio_awrite(bp);
-				} else {
-					bremfree(bp);
-					bp->b_flags |= B_ASYNC;
-					bwrite(bp);
-				}
-			} else {
-				bremfree(bp);
-				(void) bwrite(bp);
-			}
+		    (flags & V_SAVE)) {
+			bremfree(bp);
+			bp->b_flags |= B_ASYNC;
+			bwrite(bp);
 			BO_LOCK(bo);
-			return (EAGAIN);
+			return (EAGAIN);	/* XXX: why not loop ? */
 		}
 		bremfree(bp);
 		bp->b_flags |= (B_INVAL | B_NOCACHE | B_RELBUF);

==== //depot/projects/drm-merge/sys/net/if_ethersubr.c#2 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)if_ethersubr.c	8.1 (Berkeley) 6/10/93
- * $FreeBSD: src/sys/net/if_ethersubr.c,v 1.184 2005/02/14 11:58:54 glebius Exp $
+ * $FreeBSD: src/sys/net/if_ethersubr.c,v 1.185 2005/02/18 22:31:19 ru Exp $
  */
 
 #include "opt_atalk.h"
@@ -604,7 +604,8 @@
 #endif
 
 	if (!(BDG_ACTIVE(ifp)) &&
-	    !(ether_type == ETHERTYPE_VLAN && ifp->if_nvlans > 0)) {
+	    !((ether_type == ETHERTYPE_VLAN || m->m_flags & M_VLANTAG) &&
+	    ifp->if_nvlans > 0)) {
 		/*
 		 * Discard packet if upper layers shouldn't see it because it
 		 * was unicast to a different Ethernet address. If the driver
@@ -618,7 +619,7 @@
 		 * it's undesired.
 		 */
 		if ((ifp->if_flags & IFF_PROMISC) != 0
-		    && (eh->ether_dhost[0] & 1) == 0
+		    && !ETHER_IS_MULTICAST(eh->ether_dhost)
 		    && bcmp(eh->ether_dhost,
 		      IFP2AC(ifp)->ac_enaddr, ETHER_ADDR_LEN) != 0
 		    && (ifp->if_flags & IFF_PPROMISC) == 0) {
@@ -657,8 +658,7 @@
 	 * Check to see if the device performed the VLAN decapsulation and
 	 * provided us with the tag.
 	 */
-	if (m_tag_first(m) != NULL &&
-	    m_tag_locate(m, MTAG_VLAN, MTAG_VLAN_TAG, NULL) != NULL) {
+	if (m->m_flags & M_VLANTAG) {
 		/*
 		 * If no VLANs are configured, drop.
 		 */

==== //depot/projects/drm-merge/sys/net/if_vlan.c#2 (text+ko) ====

@@ -26,7 +26,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/net/if_vlan.c,v 1.76 2005/01/24 15:48:00 yar Exp $
+ * $FreeBSD: src/sys/net/if_vlan.c,v 1.77 2005/02/18 22:31:19 ru Exp $
  */
 
 /*
@@ -563,6 +563,7 @@
 		 */
 		tag = EVL_VLANOFTAG(VLAN_TAG_VALUE(mtag));
 		m_tag_delete(m, mtag);
+		m->m_flags &= ~M_VLANTAG;
 	} else {
 		switch (ifp->if_type) {
 		case IFT_ETHER:

==== //depot/projects/drm-merge/sys/net/if_vlan_var.h#2 (text+ko) ====

@@ -26,7 +26,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/net/if_vlan_var.h,v 1.20 2005/01/07 01:45:34 imp Exp $
+ * $FreeBSD: src/sys/net/if_vlan_var.h,v 1.21 2005/02/18 22:31:19 ru Exp $
  */
 
 #ifndef _NET_IF_VLAN_VAR_H_
@@ -80,8 +80,8 @@
  *
  * to mark the packet m with the specified VLAN tag.  The last
  * parameter provides code to execute in case of an error.  On
- * output the driver should check ifnet to see if any VLANs are
- * in use and only then check for a packet tag; this is done with:
+ * output the driver should check mbuf to see if a VLAN tag is
+ * present and only then check for a tag; this is done with:
  *
  *	struct m_tag *mtag;
  *	mtag = VLAN_OUTPUT_TAG(ifp, m);
@@ -107,10 +107,11 @@
 	}							\
 	*(u_int *)(mtag+1) = (_t);				\
 	m_tag_prepend((_m), mtag);				\
+	(_m)->m_flags |= M_VLANTAG;				\
 } while (0)
 
 #define	VLAN_OUTPUT_TAG(_ifp, _m)				\
-	((_ifp)->if_nvlans != 0 ?				\
+	((_m)->m_flags & M_VLANTAG ?				\
 		m_tag_locate((_m), MTAG_VLAN, MTAG_VLAN_TAG, NULL) : NULL)
 #define	VLAN_TAG_VALUE(_mt)	(*(u_int *)((_mt)+1))
 #endif /* _KERNEL */

==== //depot/projects/drm-merge/sys/netgraph/ng_ksocket.c#2 (text+ko) ====

@@ -37,7 +37,7 @@
  *
  * Author: Archie Cobbs <archie at freebsd.org>
  *
- * $FreeBSD: src/sys/netgraph/ng_ksocket.c,v 1.51 2005/02/16 16:00:35 glebius Exp $
+ * $FreeBSD: src/sys/netgraph/ng_ksocket.c,v 1.52 2005/02/19 14:41:49 glebius Exp $
  * $Whistle: ng_ksocket.c,v 1.1 1999/11/16 20:04:40 archie Exp $
  */
 
@@ -897,6 +897,12 @@
 	struct mbuf *m;
 	struct sa_tag *stag;
 
+	/* Avoid reentrantly sending on the socket */
+	if (SOCKBUF_OWNED(&so->so_snd)) {
+		NG_FREE_ITEM(item);
+		return (EDEADLK);
+	}
+
 	/* Extract data */
 	NGI_GET_M(item, m);
 	NG_FREE_ITEM(item);

==== //depot/projects/drm-merge/sys/nfsclient/nfs_socket.c#2 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_socket.c,v 1.119 2005/01/07 01:45:50 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_socket.c,v 1.120 2005/02/18 23:41:39 ps Exp $");
 
 /*
  * Socket operations for use by nfs
@@ -1027,10 +1027,12 @@
 			error = nfs_send(nmp->nm_so, nmp->nm_nam, m2, rep);
 			nfs_sndunlock(rep);
 		}
+		mtx_lock(&nfs_reqq_mtx);
 		if (!error && (rep->r_flags & R_MUSTRESEND) == 0) {
 			nmp->nm_sent += NFS_CWNDSCALE;
 			rep->r_flags |= R_SENT;
 		}
+		mtx_unlock(&nfs_reqq_mtx);
 	} else {
 		splx(s);
 		rep->r_rtt = -1;
@@ -1056,10 +1058,12 @@
 	/*
 	 * Decrement the outstanding request count.
 	 */
+	mtx_lock(&nfs_reqq_mtx);
 	if (rep->r_flags & R_SENT) {
 		rep->r_flags &= ~R_SENT;	/* paranoia */
 		nmp->nm_sent -= NFS_CWNDSCALE;
 	}
+	mtx_unlock(&nfs_reqq_mtx);
 
 	/*
 	 * If there was a successful reply and a tprintf msg.

==== //depot/projects/drm-merge/sys/nfsclient/nfs_vnops.c#2 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_vnops.c,v 1.250 2005/01/29 23:19:08 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_vnops.c,v 1.251 2005/02/19 11:44:56 phk Exp $");
 
 /*
  * vnode op calls for Sun NFS version 2 and 3
@@ -538,7 +538,9 @@
 		    error = nfs_flush(vp, MNT_WAIT, ap->a_td, cm);
 		    /* np->n_flag &= ~NMODIFIED; */
 		} else {
+		    VOP_LOCK(vp, LK_EXCLUSIVE, curthread);
 		    error = nfs_vinvalbuf(vp, V_SAVE, ap->a_td, 1);
+		    VOP_UNLOCK(vp, 0, curthread);
 		}
 	    }
  	    /* 

==== //depot/projects/drm-merge/sys/powerpc/include/exec.h#2 (text+ko) ====

@@ -26,12 +26,12 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/powerpc/include/exec.h,v 1.2 2005/01/07 02:29:19 imp Exp $
+ * $FreeBSD: src/sys/powerpc/include/exec.h,v 1.3 2005/02/19 21:16:48 ru Exp $
  */
 
-#ifndef _EXEC_H_
-#define	_EXEC_H_
+#ifndef	_MACHINE_EXEC_H_
+#define	_MACHINE_EXEC_H_
 
-#define __LDPGSZ	4096
+#define	__LDPGSZ	4096
 
-#endif /* !_EXEC_H_ */
+#endif /* !_MACHINE_EXEC_H_ */

==== //depot/projects/drm-merge/sys/sys/bufobj.h#2 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/sys/bufobj.h,v 1.12 2005/01/11 10:43:08 phk Exp $
+ * $FreeBSD: src/sys/sys/bufobj.h,v 1.13 2005/02/19 11:44:57 phk Exp $
  */
 
 /*
@@ -125,6 +125,7 @@
 
 void bufobj_wdrop(struct bufobj *bo);
 void bufobj_wref(struct bufobj *bo);
+int bufobj_invalbuf(struct bufobj *bo, int flags, struct thread *td, int slpflag, int slptimeo);
 int bufobj_wwait(struct bufobj *bo, int slpflag, int timeo);
 int bufsync(struct bufobj *bo, int waitfor, struct thread *td);
 

==== //depot/projects/drm-merge/sys/sys/cpu.h#2 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/sys/cpu.h,v 1.2 2005/02/13 05:37:19 njl Exp $
+ * $FreeBSD: src/sys/sys/cpu.h,v 1.3 2005/02/19 06:13:25 njl Exp $
  */
 
 #ifndef _SYS_CPU_H_
@@ -53,6 +53,7 @@
 	int	power;	/* Power consumed in mW. */
 	int	lat;	/* Transition latency in us. */
 	device_t dev;	/* Driver providing this setting. */
+	int	spec[4];/* Driver-specific storage for non-standard info. */
 };
 
 /* Maximum number of settings a given driver can have. */

==== //depot/projects/drm-merge/sys/sys/mbuf.h#2 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)mbuf.h	8.5 (Berkeley) 2/19/95
- * $FreeBSD: src/sys/sys/mbuf.h,v 1.165 2005/02/10 22:23:02 bmilekic Exp $
+ * $FreeBSD: src/sys/sys/mbuf.h,v 1.166 2005/02/18 22:31:18 ru Exp $
  */
 
 #ifndef _SYS_MBUF_H_
@@ -178,6 +178,7 @@
 #define	M_FRAG		0x0800	/* packet is a fragment of a larger packet */
 #define	M_FIRSTFRAG	0x1000	/* packet is first fragment */
 #define	M_LASTFRAG	0x2000	/* packet is last fragment */
+#define	M_VLANTAG	0x10000	/* packet has VLAN tag attached */
 
 /*
  * External buffer types: identify ext_buf type.
@@ -195,7 +196,8 @@
  */
 #define	M_COPYFLAGS	(M_PKTHDR|M_EOR|M_RDONLY|M_PROTO1|M_PROTO1|M_PROTO2|\
 			    M_PROTO3|M_PROTO4|M_PROTO5|M_SKIP_FIREWALL|\
-			    M_BCAST|M_MCAST|M_FRAG|M_FIRSTFRAG|M_LASTFRAG)
+			    M_BCAST|M_MCAST|M_FRAG|M_FIRSTFRAG|M_LASTFRAG|\
+			    M_VLANTAG)
 
 /*
  * Flags indicating hw checksum support and sw checksum requirements.

==== //depot/projects/drm-merge/sys/sys/param.h#2 (text+ko) ====

@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)param.h	8.3 (Berkeley) 4/4/95
- * $FreeBSD: src/sys/sys/param.h,v 1.224 2005/02/15 06:33:28 njl Exp $
+ * $FreeBSD: src/sys/sys/param.h,v 1.225 2005/02/19 13:48:53 marius Exp $
  */
 
 #ifndef _SYS_PARAM_H_
@@ -57,7 +57,7 @@
  *		is created, otherwise 1.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 600012	/* Master, propagated to newvers */
+#define __FreeBSD_version 600013	/* Master, propagated to newvers */
 
 #ifndef LOCORE
 #include <sys/types.h>

==== //depot/projects/drm-merge/sys/ufs/ffs/ffs_snapshot.c#2 (text+ko) ====

@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/ufs/ffs/ffs_snapshot.c,v 1.97 2005/02/08 17:40:01 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/ufs/ffs/ffs_snapshot.c,v 1.98 2005/02/19 07:31:33 delphij Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -474,7 +474,7 @@
 		loc = howmany(xp->i_size, fs->fs_bsize) - 1;
 		if (loc < NDADDR) {
 			len = fragroundup(fs, blkoff(fs, xp->i_size));
-			if (len < fs->fs_bsize) {
+			if (len != 0 && len < fs->fs_bsize) {
 				ffs_blkfree(ump, copy_fs, vp,
 				    DIP(xp, i_db[loc]), len, xp->i_number);
 				blkno = DIP(xp, i_db[loc]);

==== //depot/projects/drm-merge/sys/ufs/ffs/ffs_vfsops.c#2 (text+ko) ====

@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/ufs/ffs/ffs_vfsops.c,v 1.278 2005/02/10 12:20:08 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/ufs/ffs/ffs_vfsops.c,v 1.279 2005/02/19 11:44:57 phk Exp $");
 
 #include "opt_mac.h"
 #include "opt_quota.h"
@@ -794,7 +794,6 @@
 out:
 	if (bp)
 		brelse(bp);
-	vinvalbuf(devvp, V_SAVE, td, 0, 0);
 	if (cp != NULL) {
 		DROP_GIANT();
 		g_topology_lock();
@@ -956,7 +955,6 @@
 			return (error);
 		}
 	}
-	vinvalbuf(ump->um_devvp, V_SAVE, td, 0, 0);
 	DROP_GIANT();
 	g_topology_lock();
 	g_vfs_close(ump->um_cp, td);

==== //depot/projects/drm-merge/sys/ufs/ufs/ufs_inode.c#2 (text+ko) ====

@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/ufs/ufs/ufs_inode.c,v 1.57 2005/01/28 14:42:17 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/ufs/ufs/ufs_inode.c,v 1.58 2005/02/19 11:44:57 phk Exp $");
 
 #include "opt_quota.h"
 #include "opt_ufs.h"
@@ -173,12 +173,12 @@
 		}
 	}
 #endif
+	vnode_destroy_vobject(vp);
 #ifdef UFS_DIRHASH
 	if (ip->i_dirhash != NULL)
 		ufsdirhash_free(ip);
 #endif
 	UFS_IFREE(ump, ip);
 	vp->v_data = 0;
-	vnode_destroy_vobject(vp);
 	return (0);
 }

==== //depot/projects/drm-merge/sys/vm/vnode_pager.c#2 (text+ko) ====

@@ -51,7 +51,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/vm/vnode_pager.c,v 1.212 2005/01/28 08:56:47 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/vm/vnode_pager.c,v 1.213 2005/02/19 11:44:57 phk Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -158,6 +158,7 @@
 	obj = vp->v_object;
 	if (obj == NULL)
 		return;
+	VOP_LOCK(vp, LK_EXCLUSIVE, curthread);
 	vp->v_object = NULL;
 	VM_OBJECT_LOCK(obj);
 	if (obj->ref_count == 0) {
@@ -180,6 +181,7 @@
 		vm_pager_deallocate(obj);
 		VM_OBJECT_UNLOCK(obj);
 	}
+	VOP_UNLOCK(vp, 0, curthread);
 }
 

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


More information about the p4-projects mailing list