PERFORCE change 117902 for review

Robert Watson rwatson at FreeBSD.org
Wed Apr 11 15:02:49 UTC 2007


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

Change 117902 by rwatson at rwatson_zoo on 2007/04/11 15:02:38

	Integrate TrustedBSD priv branch.

Affected files ...

.. //depot/projects/trustedbsd/priv/sys/amd64/conf/GENERIC#7 integrate
.. //depot/projects/trustedbsd/priv/sys/boot/forth/loader.conf#5 integrate
.. //depot/projects/trustedbsd/priv/sys/cam/scsi/scsi_sg.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/cam/scsi/scsi_sg.h#2 integrate
.. //depot/projects/trustedbsd/priv/sys/compat/linux/linux_ioctl.h#3 integrate
.. //depot/projects/trustedbsd/priv/sys/compat/opensolaris/kern/opensolaris_kmem.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/compat/opensolaris/kern/opensolaris_kobj.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/compat/opensolaris/kern/opensolaris_misc.c#1 branch
.. //depot/projects/trustedbsd/priv/sys/compat/opensolaris/kern/opensolaris_string.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/compat/opensolaris/sys/kmem.h#2 integrate
.. //depot/projects/trustedbsd/priv/sys/compat/opensolaris/sys/kobj.h#2 integrate
.. //depot/projects/trustedbsd/priv/sys/compat/opensolaris/sys/lock.h#1 branch
.. //depot/projects/trustedbsd/priv/sys/compat/opensolaris/sys/misc.h#1 branch
.. //depot/projects/trustedbsd/priv/sys/compat/opensolaris/sys/mutex.h#2 integrate
.. //depot/projects/trustedbsd/priv/sys/compat/opensolaris/sys/rwlock.h#2 integrate
.. //depot/projects/trustedbsd/priv/sys/compat/opensolaris/sys/string.h#2 integrate
.. //depot/projects/trustedbsd/priv/sys/conf/NOTES#11 integrate
.. //depot/projects/trustedbsd/priv/sys/conf/files#13 integrate
.. //depot/projects/trustedbsd/priv/sys/conf/files.ia64#3 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/dev/acpica/utmisc.c#3 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/arc.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/spa.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/spa_config.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/zap.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_fm.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/sys/fs/zfs.h#2 integrate
.. //depot/projects/trustedbsd/priv/sys/dev/ata/ata-all.h#4 integrate
.. //depot/projects/trustedbsd/priv/sys/dev/ata/ata-chipset.c#9 integrate
.. //depot/projects/trustedbsd/priv/sys/dev/ata/ata-dma.c#4 integrate
.. //depot/projects/trustedbsd/priv/sys/dev/ath/ah_osdep.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/dev/cxgb/cxgb_adapter.h#2 integrate
.. //depot/projects/trustedbsd/priv/sys/dev/cxgb/cxgb_lro.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/dev/cxgb/cxgb_osdep.h#2 integrate
.. //depot/projects/trustedbsd/priv/sys/dev/cxgb/cxgb_sge.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/dev/cxgb/sys/mvec.h#1 branch
.. //depot/projects/trustedbsd/priv/sys/dev/cxgb/sys/uipc_mvec.c#1 branch
.. //depot/projects/trustedbsd/priv/sys/dev/mii/brgphy.c#7 integrate
.. //depot/projects/trustedbsd/priv/sys/dev/mii/miidevs#6 integrate
.. //depot/projects/trustedbsd/priv/sys/dev/msk/if_msk.c#5 integrate
.. //depot/projects/trustedbsd/priv/sys/geom/eli/g_eli.c#6 integrate
.. //depot/projects/trustedbsd/priv/sys/i386/conf/GENERIC#7 integrate
.. //depot/projects/trustedbsd/priv/sys/ia64/conf/GENERIC#5 integrate
.. //depot/projects/trustedbsd/priv/sys/kern/kern_jail.c#18 integrate
.. //depot/projects/trustedbsd/priv/sys/kern/kern_mib.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/kern/uipc_mqueue.c#9 integrate
.. //depot/projects/trustedbsd/priv/sys/kern/vfs_mount.c#11 integrate
.. //depot/projects/trustedbsd/priv/sys/kern/vfs_subr.c#10 integrate
.. //depot/projects/trustedbsd/priv/sys/libkern/index.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/libkern/rindex.c#2 integrate
.. //depot/projects/trustedbsd/priv/sys/modules/Makefile#9 integrate
.. //depot/projects/trustedbsd/priv/sys/modules/cxgb/Makefile#2 integrate
.. //depot/projects/trustedbsd/priv/sys/modules/dpt/Makefile#2 integrate
.. //depot/projects/trustedbsd/priv/sys/modules/if_trunk/Makefile#1 branch
.. //depot/projects/trustedbsd/priv/sys/modules/libalias/libalias/Makefile#2 integrate
.. //depot/projects/trustedbsd/priv/sys/modules/zfs/Makefile#2 integrate
.. //depot/projects/trustedbsd/priv/sys/net/ieee8023ad_lacp.c#1 branch
.. //depot/projects/trustedbsd/priv/sys/net/ieee8023ad_lacp.h#1 branch
.. //depot/projects/trustedbsd/priv/sys/net/if.c#8 integrate
.. //depot/projects/trustedbsd/priv/sys/net/if_ethersubr.c#5 integrate
.. //depot/projects/trustedbsd/priv/sys/net/if_trunk.c#1 branch
.. //depot/projects/trustedbsd/priv/sys/net/if_trunk.h#1 branch
.. //depot/projects/trustedbsd/priv/sys/net/if_var.h#4 integrate
.. //depot/projects/trustedbsd/priv/sys/netinet/in_pcb.c#8 integrate
.. //depot/projects/trustedbsd/priv/sys/netinet/tcp_input.c#9 integrate
.. //depot/projects/trustedbsd/priv/sys/netinet/tcp_output.c#8 integrate
.. //depot/projects/trustedbsd/priv/sys/netinet/tcp_sack.c#3 integrate
.. //depot/projects/trustedbsd/priv/sys/netinet/tcp_subr.c#10 integrate
.. //depot/projects/trustedbsd/priv/sys/netinet/tcp_syncache.c#7 integrate
.. //depot/projects/trustedbsd/priv/sys/netinet/tcp_timer.c#4 integrate
.. //depot/projects/trustedbsd/priv/sys/netinet/tcp_timer.h#5 integrate
.. //depot/projects/trustedbsd/priv/sys/netinet/tcp_usrreq.c#7 integrate
.. //depot/projects/trustedbsd/priv/sys/netinet/tcp_var.h#6 integrate
.. //depot/projects/trustedbsd/priv/sys/netipsec/ipsec_osdep.h#5 integrate
.. //depot/projects/trustedbsd/priv/sys/pc98/conf/GENERIC#6 integrate
.. //depot/projects/trustedbsd/priv/sys/powerpc/conf/GENERIC#7 integrate
.. //depot/projects/trustedbsd/priv/sys/rpc/types.h#1 branch
.. //depot/projects/trustedbsd/priv/sys/sparc64/conf/GENERIC#6 integrate
.. //depot/projects/trustedbsd/priv/sys/sparc64/include/nexusvar.h#2 delete
.. //depot/projects/trustedbsd/priv/sys/sun4v/conf/GENERIC#5 integrate
.. //depot/projects/trustedbsd/priv/sys/sys/hash.h#2 integrate
.. //depot/projects/trustedbsd/priv/sys/sys/kernel.h#4 integrate
.. //depot/projects/trustedbsd/priv/sys/sys/libkern.h#3 integrate
.. //depot/projects/trustedbsd/priv/sys/sys/mutex.h#4 integrate
.. //depot/projects/trustedbsd/priv/sys/sys/param.h#9 integrate
.. //depot/projects/trustedbsd/priv/sys/sys/priv.h#13 integrate
.. //depot/projects/trustedbsd/priv/sys/sys/sysctl.h#4 integrate
.. //depot/projects/trustedbsd/priv/sys/sys/systm.h#11 integrate
.. //depot/projects/trustedbsd/priv/sys/ufs/ffs/ffs_snapshot.c#5 integrate
.. //depot/projects/trustedbsd/priv/sys/ufs/ffs/ffs_softdep.c#6 integrate
.. //depot/projects/trustedbsd/priv/sys/vm/phys_pager.c#4 integrate

Differences ...

==== //depot/projects/trustedbsd/priv/sys/amd64/conf/GENERIC#7 (text+ko) ====

@@ -16,7 +16,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check first
 # in NOTES.
 #
-# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.473 2007/02/09 19:03:17 brooks Exp $
+# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.475 2007/04/10 21:40:12 pjd Exp $
 
 cpu		HAMMER
 ident		GENERIC
@@ -34,6 +34,7 @@
 options 	SOFTUPDATES		# Enable FFS soft updates support
 options 	UFS_ACL			# Support for access control lists
 options 	UFS_DIRHASH		# Improve performance on big directories
+options 	UFS_GJOURNAL		# Enable gjournal-based UFS journaling
 options 	MD_ROOT			# MD is a potential root device
 options 	NFSCLIENT		# Network Filesystem Client
 options 	NFSSERVER		# Network Filesystem Server

==== //depot/projects/trustedbsd/priv/sys/boot/forth/loader.conf#5 (text+ko) ====

@@ -6,7 +6,7 @@
 #
 # All arguments must be in double quotes.
 #
-# $FreeBSD: src/sys/boot/forth/loader.conf,v 1.118 2007/02/04 06:35:10 imp Exp $
+# $FreeBSD: src/sys/boot/forth/loader.conf,v 1.120 2007/04/09 22:09:09 pjd Exp $
 
 ##############################################################
 ###  Basic configuration options  ############################
@@ -138,6 +138,7 @@
 #umapfs_load="NO"		# User-id map filesystem
 unionfs_load="NO"		# Union filesystem
 xfs_load="NO"   		# XFS
+zfs_load="NO"   		# ZFS
 
 # Related stuff
 
@@ -418,3 +419,10 @@
 #module_after="cmd"		# executes "cmd" after loading the module
 #module_error="cmd"		# executes "cmd" if load fails
 
+##############################################################
+###  Always try to load ZFS pool cache file  #################
+##############################################################
+
+zpool_cache_load="YES"
+zpool_cache_type="/boot/zfs/zpool.cache"
+zpool_cache_name="/boot/zfs/zpool.cache"

==== //depot/projects/trustedbsd/priv/sys/cam/scsi/scsi_sg.c#2 (text+ko) ====

@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_sg.c,v 1.1 2007/04/07 19:40:57 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_sg.c,v 1.4 2007/04/10 20:03:42 scottl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -71,8 +71,8 @@
 } sg_state;
 
 typedef enum {
+	SG_RDWR_FREE,
 	SG_RDWR_INPROG,
-	SG_RDWR_WAITING,
 	SG_RDWR_DONE
 } sg_rdwr_state;
 
@@ -100,11 +100,13 @@
 struct sg_softc {
 	sg_state		state;
 	sg_flags		flags;
-	uint8_t			pd_type;
 	struct devstat		*device_stats;
 	TAILQ_HEAD(, sg_rdwr)	rdwr_done;
 	struct cdev		*dev;
 	struct cdev		*devalias;
+	int			sg_timeout;
+	int			sg_user_timeout;
+	uint8_t			pd_type;
 	union ccb		saved_ccb;
 };
 
@@ -289,15 +291,16 @@
 		return (CAM_REQ_CMP_ERR);
 	}
 
-	softc = (struct sg_softc *)malloc(sizeof(*softc), M_DEVBUF, M_NOWAIT);
+	softc = malloc(sizeof(*softc), M_DEVBUF, M_ZERO | M_NOWAIT);
 	if (softc == NULL) {
 		printf("sgregister: Unable to allocate softc\n");
 		return (CAM_REQ_CMP_ERR);
 	}
 
-	bzero(softc, sizeof(*softc));
 	softc->state = SG_STATE_NORMAL;
 	softc->pd_type = SID_TYPE(&cgd->inq_data);
+	softc->sg_timeout = SG_DEFAULT_TIMEOUT / SG_DEFAULT_HZ * hz;
+	softc->sg_user_timeout = SG_DEFAULT_TIMEOUT;
 	TAILQ_INIT(&softc->rdwr_done);
 	periph->softc = softc;
 
@@ -388,8 +391,7 @@
 		rdwr = done_ccb->ccb_h.ccb_rdwr;
 		state = rdwr->state;
 		rdwr->state = SG_RDWR_DONE;
-		if (state == SG_RDWR_WAITING)
-			wakeup(rdwr);
+		wakeup(rdwr);
 		break;
 	}
 	default:
@@ -497,16 +499,22 @@
 		error = copyout(&sg_version, arg, sizeof(sg_version));
 		break;
 	case SG_SET_TIMEOUT:
-	case LINUX_SG_SET_TIMEOUT:
+	case LINUX_SG_SET_TIMEOUT: {
+		u_int user_timeout;
+
+		error = copyin(arg, &user_timeout, sizeof(u_int));
+		if (error == 0) {
+			softc->sg_user_timeout = user_timeout;
+			softc->sg_timeout = user_timeout / SG_DEFAULT_HZ * hz;
+		}
 		break;
+	}
 	case SG_GET_TIMEOUT:
 	case LINUX_SG_GET_TIMEOUT:
 		/*
-		 * XXX This ioctl is highly brain damaged because it requires
-		 *     that the value be returned in the syscall return value.
-		 *     The linuxolator seems to have a hard time with this,
-		 *     so just return 0 and hope that apps can cope.
+		 * The value is returned directly to the syscall.
 		 */
+		td->td_retval[0] = softc->sg_user_timeout;
 		error = 0;
 		break;
 	case SG_IO:
@@ -679,7 +687,7 @@
 
 	periph = dev->si_drv1;
 	sc = periph->softc;
-	rdwr = malloc(sizeof(*rdwr), M_DEVBUF, M_WAITOK);
+	rdwr = malloc(sizeof(*rdwr), M_DEVBUF, M_WAITOK | M_ZERO);
 	hdr = &rdwr->hdr.hdr;
 
 	/* Copy in the header block and sanity check it */
@@ -728,13 +736,13 @@
 	 */
 	buf_len = uio->uio_resid;
 	if (buf_len != 0) {
-		buf = malloc(buf_len, M_DEVBUF, M_WAITOK);
+		buf = malloc(buf_len, M_DEVBUF, M_WAITOK | M_ZERO);
 		error = uiomove(buf, buf_len, uio);
 		if (error)
 			goto out_buf;
 		dir = CAM_DIR_OUT;
 	} else if (hdr->reply_len != 0) {
-		buf = malloc(hdr->reply_len, M_DEVBUF, M_WAITOK);
+		buf = malloc(hdr->reply_len, M_DEVBUF, M_WAITOK | M_ZERO);
 		buf_len = hdr->reply_len;
 		dir = CAM_DIR_IN;
 	} else {
@@ -752,7 +760,7 @@
 		      buf_len,
 		      SG_MAX_SENSE,
 		      cdb_len,
-		      60*hz);
+		      sc->sg_timeout);
 
 	/*
 	 * Send off the command and hope that it works. This path does not
@@ -809,7 +817,6 @@
 			break;
 	}
 	if ((rdwr == NULL) || (rdwr->state != SG_RDWR_DONE)) {
-		rdwr->state = SG_RDWR_WAITING;
 		if (tsleep(rdwr, PCATCH, "sgread", 0) == ERESTART)
 			return (EAGAIN);
 		goto search;

==== //depot/projects/trustedbsd/priv/sys/cam/scsi/scsi_sg.h#2 (text+ko) ====

@@ -1,7 +1,7 @@
 /*
  * Structures and definitions for SCSI commands to the SG passthrough device.
  *
- * $FreeBSD: src/sys/cam/scsi/scsi_sg.h,v 1.1 2007/04/07 19:40:57 scottl Exp $
+ * $FreeBSD: src/sys/cam/scsi/scsi_sg.h,v 1.2 2007/04/10 20:03:42 scottl Exp $
  */
 
 #ifndef _SCSI_SG_H
@@ -136,4 +136,9 @@
 #define DRIVER_MASK	0x0f
 #define SUGGEST_MASK	0xf0
 
+/* Other definitions */
+/* HZ isn't always available, so simulate it */
+#define SG_DEFAULT_HZ		1000
+#define SG_DEFAULT_TIMEOUT	(60*SG_DEFAULT_HZ)
+
 #endif /* !_SCSI_SG_H */

==== //depot/projects/trustedbsd/priv/sys/compat/linux/linux_ioctl.h#3 (text+ko) ====

@@ -25,7 +25,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/compat/linux/linux_ioctl.h,v 1.25 2007/04/07 19:40:58 scottl Exp $
+ * $FreeBSD: src/sys/compat/linux/linux_ioctl.h,v 1.26 2007/04/10 21:37:37 scottl Exp $
  */
 
 #ifndef _LINUX_IOCTL_H_
@@ -134,34 +134,34 @@
 /*
  * SG
  */
-#define LINUX_SG_SET_TIMEOUT		0x2201
-#define LINUX_SG_GET_TIMEOUT		0x2202
-#define LINUX_SG_EMULATED_HOST		0x2203
-#define LINUX_SG_SET_TRANSFORM		0x2204
-#define LINUX_SG_GET_TRANSFORM		0x2205
-#define LINUX_SG_GET_COMMAND_Q		0x2270
-#define LINUX_SG_SET_COMMAND_Q		0x2271
-#define LINUX_SG_SET_RESERVED_SIZE	0x2275
-#define LINUX_SG_GET_RESERVED_SIZE	0x2272
-#define LINUX_SG_GET_SCSI_ID		0x2276
-#define LINUX_SG_SET_FORCE_LOW_DMA	0x2279
-#define LINUX_SG_GET_LOW_DMA		0x227a
-#define LINUX_SG_SET_FORCE_PACK_ID	0x227b
-#define LINUX_SG_GET_PACK_ID		0x227c
-#define LINUX_SG_GET_NUM_WAITING	0x227d
-#define LINUX_SG_SET_DEBUG		0x227e
-#define LINUX_SG_GET_SG_TABLESIZE	0x227f
-#define LINUX_SG_GET_VERSION_NUM	0x2282
-#define LINUX_SG_NEXT_CMD_LEN		0x2283
-#define LINUX_SG_SCSI_RESET		0x2284
-#define LINUX_SG_IO			0x2285
-#define LINUX_SG_GET_REQUEST_TABLE	0x2286
-#define LINUX_SG_SET_KEEP_ORPHAN	0x2287
-#define LINUX_SG_GET_KEEP_ORPHAN	0x2288
-#define LINUX_SG_GET_ACCESS_COUNT	0x2289
+#define	LINUX_SG_SET_TIMEOUT		0x2201
+#define	LINUX_SG_GET_TIMEOUT		0x2202
+#define	LINUX_SG_EMULATED_HOST		0x2203
+#define	LINUX_SG_SET_TRANSFORM		0x2204
+#define	LINUX_SG_GET_TRANSFORM		0x2205
+#define	LINUX_SG_GET_COMMAND_Q		0x2270
+#define	LINUX_SG_SET_COMMAND_Q		0x2271
+#define	LINUX_SG_SET_RESERVED_SIZE	0x2275
+#define	LINUX_SG_GET_RESERVED_SIZE	0x2272
+#define	LINUX_SG_GET_SCSI_ID		0x2276
+#define	LINUX_SG_SET_FORCE_LOW_DMA	0x2279
+#define	LINUX_SG_GET_LOW_DMA		0x227a
+#define	LINUX_SG_SET_FORCE_PACK_ID	0x227b
+#define	LINUX_SG_GET_PACK_ID		0x227c
+#define	LINUX_SG_GET_NUM_WAITING	0x227d
+#define	LINUX_SG_SET_DEBUG		0x227e
+#define	LINUX_SG_GET_SG_TABLESIZE	0x227f
+#define	LINUX_SG_GET_VERSION_NUM	0x2282
+#define	LINUX_SG_NEXT_CMD_LEN		0x2283
+#define	LINUX_SG_SCSI_RESET		0x2284
+#define	LINUX_SG_IO			0x2285
+#define	LINUX_SG_GET_REQUEST_TABLE	0x2286
+#define	LINUX_SG_SET_KEEP_ORPHAN	0x2287
+#define	LINUX_SG_GET_KEEP_ORPHAN	0x2288
+#define	LINUX_SG_GET_ACCESS_COUNT	0x2289
 
-#define LINUX_IOCTL_SG_MIN	0x2200
-#define LINUX_IOCTL_SG_MAX	0x22ff
+#define	LINUX_IOCTL_SG_MIN	0x2200
+#define	LINUX_IOCTL_SG_MAX	0x22ff
 
 /*
  * VFAT

==== //depot/projects/trustedbsd/priv/sys/compat/opensolaris/kern/opensolaris_kmem.c#2 (text+ko) ====

@@ -25,18 +25,25 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/opensolaris/kern/opensolaris_kmem.c,v 1.1 2007/04/06 01:09:06 pjd Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/opensolaris/kern/opensolaris_kmem.c,v 1.2 2007/04/10 02:35:56 pjd Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
 #include <sys/systm.h>
 #include <sys/malloc.h>
-#include <vm/uma.h>
 #include <sys/kmem.h>
 #include <sys/debug.h>
 #include <sys/mutex.h>
+
+#include <vm/vm_page.h>
+#include <vm/vm_object.h>
+#include <vm/vm_kern.h>
+#include <vm/vm_map.h>
+
+#ifdef KMEM_DEBUG
 #include <sys/queue.h>
 #include <sys/stack.h>
+#endif
 
 #ifdef _KERNEL
 static MALLOC_DEFINE(M_SOLARIS, "solaris", "Solaris");
@@ -82,12 +89,6 @@
 	return (p);
 }
 
-void *
-kmem_zalloc(size_t size, int kmflags)
-{
-	return (kmem_alloc(size, kmflags | M_ZERO));
-}
-
 void
 zfs_kmem_free(void *buf, size_t size __unused)
 {
@@ -107,6 +108,20 @@
 	free(buf, M_SOLARIS);
 }
 
+u_long
+kmem_size(void)
+{
+
+	return ((u_long)vm_kmem_size);
+}
+
+u_long
+kmem_used(void)
+{
+
+	return ((u_long)kmem_map->size);
+}
+
 static int
 kmem_std_constructor(void *mem, int size __unused, void *private, int flags)
 {

==== //depot/projects/trustedbsd/priv/sys/compat/opensolaris/kern/opensolaris_kobj.c#2 (text+ko) ====

@@ -25,17 +25,18 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/opensolaris/kern/opensolaris_kobj.c,v 1.1 2007/04/06 01:09:06 pjd Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/opensolaris/kern/opensolaris_kobj.c,v 1.2 2007/04/08 23:57:08 pjd Exp $");
 
 #include <sys/types.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
+#include <sys/systm.h>
 #include <sys/kthread.h>
 #include <sys/namei.h>
 #include <sys/proc.h>
 #include <sys/filedesc.h>
-#include <sys/vnode.h>
 #include <sys/fcntl.h>
+#include <sys/linker.h>
 #include <sys/kobj.h>
 
 void
@@ -62,8 +63,8 @@
 	return (p);
 }
 
-struct _buf *
-kobj_open_file(const char *file)
+static void *
+kobj_open_file_vnode(const char *file)
 {
 	struct thread *td = curthread;
 	struct nameidata nd;
@@ -79,16 +80,45 @@
 	error = vn_open_cred(&nd, &flags, 0, td->td_ucred, -1);
 	NDFREE(&nd, NDF_ONLY_PNBUF);
 	if (error != 0)
-		return ((struct _buf *)-1);
+		return (NULL);
 	/* We just unlock so we hold a reference. */
 	VOP_UNLOCK(nd.ni_vp, 0, td);
-	return ((struct _buf *)nd.ni_vp);
+	return (nd.ni_vp);
+}
+
+static void *
+kobj_open_file_loader(const char *file)
+{
+
+	return (preload_search_by_name(file));
+}
+
+struct _buf *
+kobj_open_file(const char *file)
+{
+	struct _buf *out;
+
+	out = kmem_alloc(sizeof(*out), KM_SLEEP);
+	out->mounted = root_mounted();
+	/*
+	 * If root is already mounted we read file using file system,
+	 * if not, we use loader.
+	 */
+	if (out->mounted)
+		out->ptr = kobj_open_file_vnode(file);
+	else
+		out->ptr = kobj_open_file_loader(file);
+	if (out->ptr == NULL) {
+		kmem_free(out, sizeof(*out));
+		return ((struct _buf *)-1);
+	}
+	return (out);
 }
 
-int
-kobj_get_filesize(struct _buf *file, uint64_t *size)
+static int
+kobj_get_filesize_vnode(struct _buf *file, uint64_t *size)
 {
-	struct vnode *vp = (struct vnode *)file;
+	struct vnode *vp = file->ptr;
 	struct thread *td = curthread;
 	struct vattr va;
 	int error;
@@ -101,10 +131,32 @@
 	return (error);
 }
 
+static int
+kobj_get_filesize_loader(struct _buf *file, uint64_t *size)
+{
+	void *ptr;
+
+	ptr = preload_search_info(file->ptr, MODINFO_SIZE);
+	if (ptr == NULL)
+		return (ENOENT);
+	*size = (uint64_t)*(size_t *)ptr;
+	return (0);
+}
+
+int
+kobj_get_filesize(struct _buf *file, uint64_t *size)
+{
+
+	if (file->mounted)
+		return (kobj_get_filesize_vnode(file, size));
+	else
+		return (kobj_get_filesize_loader(file, size));
+}
+
 int
-kobj_read_file(struct _buf *file, char *buf, unsigned size, unsigned off)
+kobj_read_file_vnode(struct _buf *file, char *buf, unsigned size, unsigned off)
 {
-	struct vnode *vp = (struct vnode *)file;
+	struct vnode *vp = file->ptr;
 	struct thread *td = curthread;
 	struct uio auio;
 	struct iovec aiov;
@@ -130,13 +182,39 @@
 	return (error != 0 ? -1 : size - auio.uio_resid);
 }
 
+int
+kobj_read_file_loader(struct _buf *file, char *buf, unsigned size, unsigned off)
+{
+	char *ptr;
+
+	ptr = preload_search_info(file->ptr, MODINFO_ADDR);
+	if (ptr == NULL)
+		return (ENOENT);
+	ptr = *(void **)ptr;
+	bcopy(ptr + off, buf, size);
+	return (0);
+}
+
+int
+kobj_read_file(struct _buf *file, char *buf, unsigned size, unsigned off)
+{
+
+	if (file->mounted)
+		return (kobj_read_file_vnode(file, buf, size, off));
+	else
+		return (kobj_read_file_loader(file, buf, size, off));
+}
+
 void
 kobj_close_file(struct _buf *file)
 {
-	struct vnode *vp = (struct vnode *)file;
-	struct thread *td = curthread;
-	int flags;
+
+	if (file->mounted) {
+		struct vnode *vp = file->ptr;
+		struct thread *td = curthread;
+		int flags = FREAD;
 
-	flags = FREAD;
-	vn_close(vp, flags, td->td_ucred, td);
+		vn_close(vp, flags, td->td_ucred, td);
+	}
+	kmem_free(file, sizeof(*file));
 }

==== //depot/projects/trustedbsd/priv/sys/compat/opensolaris/kern/opensolaris_string.c#2 (text+ko) ====

@@ -32,37 +32,6 @@
 	(((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z'))
 
 char *
-strchr(const char *s, int c)
-{
-	char ch;
-
-	ch = c;
-	for (;; ++s) {
-		if (*s == ch)
-			return ((char *)s);
-		if (*s == '\0')
-			return (NULL);
-	}
-	/* NOTREACHED */
-}
-
-char *
-strrchr(const char *s, int c)
-{
-	char *save;
-	char ch;
-
-	ch = c;
-	for (save = NULL;; ++s) {
-		if (*s == ch)
-			save = (char *)s;
-		if (*s == '\0')
-			return (save);
-	}
-	/* NOTREACHED */
-}
-
-char *
 strpbrk(const char *s, const char *b)
 {
 	const char *p;

==== //depot/projects/trustedbsd/priv/sys/compat/opensolaris/sys/kmem.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/compat/opensolaris/sys/kmem.h,v 1.1 2007/04/06 01:09:06 pjd Exp $
+ * $FreeBSD: src/sys/compat/opensolaris/sys/kmem.h,v 1.2 2007/04/10 02:35:56 pjd Exp $
  */
 
 #ifndef _OPENSOLARIS_SYS_KMEM_H_
@@ -32,6 +32,7 @@
 #include <sys/param.h>
 #include <sys/proc.h>
 #include <sys/malloc.h>
+
 #include <vm/uma.h>
 #include <vm/vm.h>
 #include <vm/vm_extern.h>
@@ -55,8 +56,9 @@
 } kmem_cache_t;
 
 void *zfs_kmem_alloc(size_t size, int kmflags);
-void *kmem_zalloc(size_t size, int kmflags);
 void zfs_kmem_free(void *buf, size_t size);
+u_long kmem_size(void);
+u_long kmem_used(void);
 kmem_cache_t *kmem_cache_create(char *name, size_t bufsize, size_t align,
     int (*constructor)(void *, void *, int), void (*destructor)(void *, void *),
     void (*reclaim)(void *) __unused, void *private, vmem_t *vmp, int cflags);
@@ -69,6 +71,7 @@
 void *calloc(size_t n, size_t s);
 
 #define	kmem_alloc(size, kmflags)	zfs_kmem_alloc((size), (kmflags))
+#define	kmem_zalloc(size, kmflags)	zfs_kmem_alloc((size), (kmflags) | M_ZERO)
 #define	kmem_free(buf, size)		zfs_kmem_free((buf), (size))
 
 #endif	/* _OPENSOLARIS_SYS_KMEM_H_ */

==== //depot/projects/trustedbsd/priv/sys/compat/opensolaris/sys/kobj.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/compat/opensolaris/sys/kobj.h,v 1.1 2007/04/06 01:09:06 pjd Exp $
+ * $FreeBSD: src/sys/compat/opensolaris/sys/kobj.h,v 1.2 2007/04/08 23:57:08 pjd Exp $
  */
 
 #ifndef _OPENSOLARIS_SYS_KOBJ_H_
@@ -31,6 +31,13 @@
 
 #include <sys/types.h>
 #include <sys/kmem.h>
+#include_next <sys/kobj.h>
+#ifdef AT_UID
+#undef AT_UID
+#endif
+#ifdef AT_GID
+#undef AT_GID
+#endif
 #include <sys/vnode.h>
 
 #define	KM_NOWAIT	0x01
@@ -41,7 +48,8 @@
 void *kobj_zalloc(size_t size, int flag);
 
 struct _buf {
-	void	*dummy;
+	void *ptr;
+	int mounted;
 };
 
 struct _buf *kobj_open_file(const char *path);

==== //depot/projects/trustedbsd/priv/sys/compat/opensolaris/sys/mutex.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/compat/opensolaris/sys/mutex.h,v 1.1 2007/04/06 01:09:06 pjd Exp $
+ * $FreeBSD: src/sys/compat/opensolaris/sys/mutex.h,v 1.2 2007/04/09 01:05:31 pjd Exp $
  */
 
 #ifndef _OPENSOLARIS_SYS_MUTEX_H_
@@ -48,6 +48,9 @@
 
 #define	mutex_init(lock, desc, type, arg)	do {			\
 	ASSERT((type) == MUTEX_DEFAULT);				\
+	KASSERT(((lock)->lock_object.lo_flags & LO_ALLMASK) !=		\
+	    LO_EXPECTED, ("lock %s already initialized", #lock));	\
+	bzero((lock), sizeof(struct sx));				\
 	sx_init_flags((lock), "zfs:" #lock, SX_DUPOK);			\
 } while (0)
 #define	mutex_destroy(lock)	sx_destroy(lock)

==== //depot/projects/trustedbsd/priv/sys/compat/opensolaris/sys/rwlock.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/compat/opensolaris/sys/rwlock.h,v 1.1 2007/04/06 01:09:06 pjd Exp $
+ * $FreeBSD: src/sys/compat/opensolaris/sys/rwlock.h,v 1.2 2007/04/09 01:05:31 pjd Exp $
  */
 
 #ifndef _OPENSOLARIS_SYS_RWLOCK_H_
@@ -53,8 +53,12 @@
 #define	RW_LOCK_HELD(x)		(rw_lock_held((x)))
 #define	RW_ISWRITER(x)		(rw_iswriter(x))
 
-#define	rw_init(lock, desc, type, arg)					\
-	sx_init_flags((lock), "zfs:" #lock, SX_DUPOK)
+#define	rw_init(lock, desc, type, arg)	do {				\
+	KASSERT(((lock)->lock_object.lo_flags & LO_ALLMASK) !=		\
+	    LO_EXPECTED, ("lock %s already initialized", #lock));	\
+	bzero((lock), sizeof(struct sx));				\
+	sx_init_flags((lock), "zfs:" #lock, SX_DUPOK);			\
+} while (0)
 #define	rw_destroy(lock)	sx_destroy(lock)
 #define	rw_enter(lock, how)	do {					\
 	if ((how) == RW_READER)						\

==== //depot/projects/trustedbsd/priv/sys/compat/opensolaris/sys/string.h#2 (text+ko) ====

@@ -23,14 +23,14 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/compat/opensolaris/sys/string.h,v 1.1 2007/04/06 01:09:06 pjd Exp $
+ * $FreeBSD: src/sys/compat/opensolaris/sys/string.h,v 1.2 2007/04/10 21:42:12 wkoszek Exp $
  */
 
 #ifndef _OPENSOLARIS_SYS_STRING_H_
 #define	_OPENSOLARIS_SYS_STRING_H_
 
-char	*strchr(const char *, int);
-char	*strrchr(const char *p, int c);
+#include <sys/libkern.h>
+
 char	*strpbrk(const char *, const char *);
 void	 strident_canon(char *s, size_t n);
 

==== //depot/projects/trustedbsd/priv/sys/conf/NOTES#11 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/NOTES,v 1.1419 2007/04/07 19:40:57 scottl Exp $
+# $FreeBSD: src/sys/conf/NOTES,v 1.1421 2007/04/10 03:09:38 thompsa Exp $
 #
 # NOTES -- Lines that can be cut/pasted into kernel and hints configs.
 #
@@ -813,6 +813,7 @@
 options 	PPP_BSDCOMP		#PPP BSD-compress support
 options 	PPP_DEFLATE		#PPP zlib/deflate/gzip support
 options 	PPP_FILTER		#enable bpf filtering (needs bpf)
+device		trunk			#Trunk aggregation interface
 
 device		ef			# Multiple ethernet frames support
 options 	ETHER_II		# enable Ethernet_II frame

==== //depot/projects/trustedbsd/priv/sys/conf/files#13 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.1191 2007/04/07 19:40:57 scottl Exp $
+# $FreeBSD: src/sys/conf/files,v 1.1195 2007/04/10 00:35:31 thompsa Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -520,6 +520,7 @@
 dev/cxgb/common/cxgb_mv88e1xxx.c	optional cxgb pci
 dev/cxgb/common/cxgb_xgmac.c	optional cxgb pci
 dev/cxgb/common/cxgb_t3_hw.c	optional cxgb pci
+dev/cxgb/sys/uipc_mvec.c	optional cxgb pci
 dev/cy/cy.c			optional cy
 dev/cy/cy_isa.c			optional cy isa
 dev/cy/cy_pci.c			optional cy pci
@@ -1526,6 +1527,7 @@
 net/bpf_filter.c		optional bpf | netgraph_bpf
 net/bridgestp.c			optional if_bridge
 net/bsd_comp.c			optional ppp_bsdcomp
+net/ieee8023ad_lacp.c		optional trunk
 net/if.c			standard
 net/if_arcsubr.c		optional arcnet
 net/if_atmsubr.c		optional atm
@@ -1552,6 +1554,7 @@
 net/if_stf.c			optional stf
 net/if_tun.c			optional tun
 net/if_tap.c			optional tap
+net/if_trunk.c			optional trunk
 net/if_vlan.c			optional vlan
 net/netisr.c			standard
 net/ppp_deflate.c		optional ppp_deflate
@@ -1774,19 +1777,19 @@
 netinet/ip_options.c		optional inet
 netinet/ip_output.c		optional inet
 netinet/raw_ip.c		optional inet
-netinet/sctp_usrreq.c		optional inet inet6 sctp
-netinet/sctp_pcb.c		optional inet inet6 sctp
-netinet/sctputil.c		optional inet inet6 sctp
+netinet/sctp_asconf.c		optional inet inet6 sctp
+netinet/sctp_auth.c		optional inet inet6 sctp
 netinet/sctp_bsd_addr.c		optional inet inet6 sctp
-netinet/sctp_timer.c		optional inet inet6 sctp
+netinet/sctp_crc32.c		optional inet inet6 sctp
+netinet/sctp_indata.c		optional inet inet6 sctp
 netinet/sctp_input.c		optional inet inet6 sctp
 netinet/sctp_output.c		optional inet inet6 sctp
-netinet/sctp_indata.c		optional inet inet6 sctp
-netinet/sctp_asconf.c		optional inet inet6 sctp
+netinet/sctp_pcb.c		optional inet inet6 sctp
 netinet/sctp_peeloff.c		optional inet inet6 sctp
-netinet/sctp_crc32.c		optional inet inet6 sctp
-netinet/sctp_auth.c		optional inet inet6 sctp
 netinet/sctp_sysctl.c		optional inet inet6 sctp
+netinet/sctp_timer.c		optional inet inet6 sctp
+netinet/sctp_usrreq.c		optional inet inet6 sctp
+netinet/sctputil.c		optional inet inet6 sctp
 netinet/tcp_debug.c		optional tcpdebug
 netinet/tcp_hostcache.c		optional inet
 netinet/tcp_input.c		optional inet
@@ -1800,7 +1803,6 @@
 netinet/libalias/alias.c	optional libalias
 netinet/libalias/alias_db.c	optional libalias
 netinet/libalias/alias_mod.c	optional libalias
-netinet/libalias/alias_old.c	optional libalias
 netinet/libalias/alias_proxy.c	optional libalias
 netinet/libalias/alias_util.c	optional libalias
 netinet6/ah_aesxcbcmac.c	optional ipsec

==== //depot/projects/trustedbsd/priv/sys/conf/files.ia64#3 (text+ko) ====

@@ -1,7 +1,7 @@
 # This file tells config what files go into building a kernel,
 # files marked standard are always included.
 #
-# $FreeBSD: src/sys/conf/files.ia64,v 1.90 2006/10/23 13:23:12 ru Exp $
+# $FreeBSD: src/sys/conf/files.ia64,v 1.91 2007/04/09 14:02:18 kan Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -128,3 +128,4 @@
 libkern/ia64/__umodsi3.S	standard
 libkern/ia64/bswap16.S		standard
 libkern/ia64/bswap32.S		standard
+libkern/memset.c		standard

==== //depot/projects/trustedbsd/priv/sys/contrib/dev/acpica/utmisc.c#3 (text+ko) ====

@@ -1295,6 +1295,11 @@
 {
     va_list                 args;
 
+#ifdef _KERNEL
+    /* Temporarily hide too verbose printfs. */
+    if (!bootverbose)
+        return;
+#endif
 
     /*
      * Removed ModuleName, LineNumber, and acpica version, not needed

==== //depot/projects/trustedbsd/priv/sys/contrib/opensolaris/uts/common/fs/zfs/arc.c#2 (text+ko) ====

@@ -124,8 +124,6 @@
 #include <sys/kstat.h>
 #include <sys/sdt.h>
 
-#define	ARC_FREE_AT_ONCE	4194304
-
 static kmutex_t		arc_reclaim_thr_lock;
 static kcondvar_t	arc_reclaim_thr_cv;	/* used to signal reclaim thr */
 static uint8_t		arc_thread_exit;
@@ -154,7 +152,6 @@
  */
 u_long zfs_arc_max;
 u_long zfs_arc_min;
-#ifdef _KERNEL
 TUNABLE_ULONG("vfs.zfs.arc_max", &zfs_arc_max);
 TUNABLE_ULONG("vfs.zfs.arc_min", &zfs_arc_min);
 SYSCTL_DECL(_vfs_zfs);
@@ -162,7 +159,6 @@
     "Maximum ARC size");
 SYSCTL_ULONG(_vfs_zfs, OID_AUTO, arc_min, CTLFLAG_RD, &zfs_arc_min, 0,
     "Minimum ARC size");
-#endif
 
 /*
  * Note that buffers can be on one of 5 states:
@@ -1443,7 +1439,7 @@
 		return (1);
 #endif
 #else
-	if (kmem_map->size > (vm_kmem_size * 3) / 4)
+	if (kmem_used() > kmem_size() / 2)
 		return (1);
 #endif
 
@@ -2686,17 +2682,21 @@
 	return (0);
 }
 
+static kmutex_t arc_lowmem_lock;
 #ifdef _KERNEL
-static eventhandler_tag zfs_event_lowmem = NULL;
+static eventhandler_tag arc_event_lowmem = NULL;
 
 static void
-zfs_lowmem(void *arg __unused, int howto __unused)
+arc_lowmem(void *arg __unused, int howto __unused)
 {
 
+	/* Serialize access via arc_lowmem_lock. */
+	mutex_enter(&arc_lowmem_lock);
 	zfs_needfree = 1;
 	cv_signal(&arc_reclaim_thr_cv);
 	while (zfs_needfree)
 		tsleep(&zfs_needfree, 0, "zfs:lowmem", hz / 5);
+	mutex_exit(&arc_lowmem_lock);
 }
 #endif
 
@@ -2705,12 +2705,13 @@
 {
 	mutex_init(&arc_reclaim_thr_lock, NULL, MUTEX_DEFAULT, NULL);
 	cv_init(&arc_reclaim_thr_cv, NULL, CV_DEFAULT, NULL);
+	mutex_init(&arc_lowmem_lock, NULL, MUTEX_DEFAULT, NULL);
 
 	/* Convert seconds to clock ticks */
 	arc_min_prefetch_lifespan = 1 * hz;
 
 	/* Start out with 1/8 of all memory */
-	arc_c = physmem * PAGESIZE / 8;
+	arc_c = kmem_size() / 8;
 #if 0
 #ifdef _KERNEL
 	/*

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


More information about the p4-projects mailing list