PERFORCE change 118244 for review

Robert Watson rwatson at FreeBSD.org
Mon Apr 16 13:57:58 UTC 2007


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

Change 118244 by rwatson at rwatson_fledge on 2007/04/16 13:57:45

	Integrate zcopybpf branch from CVS HEAD.

Affected files ...

.. //depot/projects/zcopybpf/src/sys/Makefile#3 integrate
.. //depot/projects/zcopybpf/src/sys/amd64/amd64/pmap.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/amd64/conf/GENERIC#3 integrate
.. //depot/projects/zcopybpf/src/sys/boot/forth/loader.conf#3 integrate
.. //depot/projects/zcopybpf/src/sys/boot/pc98/boot0.5/Makefile#2 integrate
.. //depot/projects/zcopybpf/src/sys/boot/pc98/boot0.5/boot0.5.s#3 integrate
.. //depot/projects/zcopybpf/src/sys/boot/pc98/boot0.5/ldscript#1 branch
.. //depot/projects/zcopybpf/src/sys/boot/pc98/boot0.5/putssjis.s#1 branch
.. //depot/projects/zcopybpf/src/sys/boot/pc98/boot0.5/selector.s#2 integrate
.. //depot/projects/zcopybpf/src/sys/boot/pc98/boot0.5/start.s#2 integrate
.. //depot/projects/zcopybpf/src/sys/boot/pc98/boot2/boot.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/cam_ccb.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/cam_periph.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/cam_periph.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/cam_sim.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/cam_sim.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/cam_xpt.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/cam/cam_xpt.h#3 integrate
.. //depot/projects/zcopybpf/src/sys/cam/cam_xpt_periph.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/scsi/scsi_cd.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/scsi/scsi_ch.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/scsi/scsi_da.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/cam/scsi/scsi_low.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/scsi/scsi_pass.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/scsi/scsi_pt.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/scsi/scsi_sa.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/scsi/scsi_ses.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/scsi/scsi_sg.c#1 branch
.. //depot/projects/zcopybpf/src/sys/cam/scsi/scsi_sg.h#1 branch
.. //depot/projects/zcopybpf/src/sys/cam/scsi/scsi_targ_bh.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/cam/scsi/scsi_target.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/compat/linprocfs/linprocfs.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/compat/linux/linux_ioctl.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/compat/linux/linux_ioctl.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/compat/linux/linux_socket.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/compat/opensolaris/kern/opensolaris_kmem.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/compat/opensolaris/kern/opensolaris_kobj.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/compat/opensolaris/kern/opensolaris_misc.c#1 branch
.. //depot/projects/zcopybpf/src/sys/compat/opensolaris/kern/opensolaris_string.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/compat/opensolaris/sys/kmem.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/compat/opensolaris/sys/kobj.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/compat/opensolaris/sys/lock.h#1 branch
.. //depot/projects/zcopybpf/src/sys/compat/opensolaris/sys/misc.h#1 branch
.. //depot/projects/zcopybpf/src/sys/compat/opensolaris/sys/mutex.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/compat/opensolaris/sys/rwlock.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/compat/opensolaris/sys/string.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/conf/NOTES#5 integrate
.. //depot/projects/zcopybpf/src/sys/conf/files#6 integrate
.. //depot/projects/zcopybpf/src/sys/conf/files.ia64#2 integrate
.. //depot/projects/zcopybpf/src/sys/conf/options#5 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/dev/acpica/utmisc.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/common/atomic/amd64/atomic.S#1 branch
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/common/atomic/i386/atomic.S#1 branch
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/arch/amd64/atomic.S#2 delete
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/arch/i386/atomic.S#2 delete
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/dnlc.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/arc.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/dbuf.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/spa.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/spa_config.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/zap.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_fm.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/os/taskq.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/opensolaris/uts/common/sys/fs/zfs.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/contrib/pf/net/if_pfsync.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/aac/aac_cam.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/advansys/advansys.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/advansys/adwcam.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/aha/aha.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/ahb/ahb.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/dev/aic/aic.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/aic7xxx/aic79xx_osm.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/aic7xxx/aic7xxx_osm.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/amd/amd.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/amr/amr_cam.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/arcmsr/arcmsr.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/dev/asr/asr.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/ata/ata-all.h#4 integrate
.. //depot/projects/zcopybpf/src/sys/dev/ata/ata-chipset.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/dev/ata/ata-dma.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/ata/ata-lowlevel.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/ata/ata_if.m#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/ata/atapi-cam.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/dev/ath/ah_osdep.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/buslogic/bt.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/ciss/ciss.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/cxgb/cxgb_adapter.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/cxgb/cxgb_lro.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/cxgb/cxgb_main.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/cxgb/cxgb_osdep.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/cxgb/cxgb_sge.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/cxgb/sys/mvec.h#1 branch
.. //depot/projects/zcopybpf/src/sys/dev/cxgb/sys/uipc_mvec.c#1 branch
.. //depot/projects/zcopybpf/src/sys/dev/dpt/dpt_scsi.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/esp/ncr53c9x.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/ex/if_exvar.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/firewire/fwdma.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/firewire/sbp.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/dev/firewire/sbp_targ.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/hptmv/entry.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/iir/iir.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/isp/isp_freebsd.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/dev/mii/brgphy.c#5 integrate
.. //depot/projects/zcopybpf/src/sys/dev/mii/miidevs#4 integrate
.. //depot/projects/zcopybpf/src/sys/dev/mly/mly.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/mpt/mpt_cam.c#5 integrate
.. //depot/projects/zcopybpf/src/sys/dev/msk/if_msk.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/dev/ppbus/vpo.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/rr232x/osm_bsd.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/sound/pci/cmi.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/dev/sym/sym_hipd.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/dev/trm/trm.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/twa/tw_osl_cam.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/dev/usb/umass.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/dev/usb/usbdevs#5 integrate
.. //depot/projects/zcopybpf/src/sys/dev/wds/wd7000.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/fs/procfs/procfs_dbregs.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/fs/procfs/procfs_fpregs.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/fs/procfs/procfs_map.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/fs/procfs/procfs_regs.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/fs/pseudofs/pseudofs.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/fs/pseudofs/pseudofs.h#3 integrate
.. //depot/projects/zcopybpf/src/sys/fs/pseudofs/pseudofs_fileno.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/fs/pseudofs/pseudofs_internal.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/fs/pseudofs/pseudofs_vncache.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/fs/pseudofs/pseudofs_vnops.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/geom/eli/g_eli.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/geom/journal/g_journal.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/geom/uzip/g_uzip.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/geom/vinum/geom_vinum.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/geom/vinum/geom_vinum_rm.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/geom/vinum/geom_vinum_share.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/geom/vinum/geom_vinum_subr.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/i386/conf/GENERIC#3 integrate
.. //depot/projects/zcopybpf/src/sys/i386/i386/identcpu.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/i386/i386/initcpu.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/i386/i386/minidump_machdep.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/i386/i386/mp_machdep.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/i386/i386/pmap.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/i386/i386/trap.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/i386/include/pmap.h#3 integrate
.. //depot/projects/zcopybpf/src/sys/i386/include/specialreg.h#3 integrate
.. //depot/projects/zcopybpf/src/sys/i386/include/vmparam.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/ia64/conf/GENERIC#3 integrate
.. //depot/projects/zcopybpf/src/sys/kern/kern_jail.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/kern/kern_mib.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/kern/uipc_mbuf.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/kern/uipc_mqueue.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/kern/uipc_syscalls.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/kern/vfs_mount.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/kern/vfs_subr.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/libkern/index.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/libkern/rindex.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/modules/Makefile#4 integrate
.. //depot/projects/zcopybpf/src/sys/modules/cam/Makefile#2 integrate
.. //depot/projects/zcopybpf/src/sys/modules/cxgb/Makefile#2 integrate
.. //depot/projects/zcopybpf/src/sys/modules/dpt/Makefile#2 integrate
.. //depot/projects/zcopybpf/src/sys/modules/if_trunk/Makefile#1 branch
.. //depot/projects/zcopybpf/src/sys/modules/libalias/libalias/Makefile#2 integrate
.. //depot/projects/zcopybpf/src/sys/modules/zfs/Makefile#2 integrate
.. //depot/projects/zcopybpf/src/sys/net/ieee8023ad_lacp.c#1 branch
.. //depot/projects/zcopybpf/src/sys/net/ieee8023ad_lacp.h#1 branch
.. //depot/projects/zcopybpf/src/sys/net/if.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/net/if_ethersubr.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/net/if_trunk.c#1 branch
.. //depot/projects/zcopybpf/src/sys/net/if_trunk.h#1 branch
.. //depot/projects/zcopybpf/src/sys/net/if_var.h#3 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/in_pcb.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/libalias/alias_db.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/libalias/alias_skinny.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctp_constants.h#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctp_crc32.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctp_indata.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctp_input.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctp_output.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctp_pcb.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctp_peeloff.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctp_structs.h#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctp_timer.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctp_uio.h#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctp_usrreq.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctp_var.h#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctputil.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/sctputil.h#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/tcp_input.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/tcp_output.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/tcp_sack.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/tcp_subr.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/tcp_syncache.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/tcp_timer.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/tcp_timer.h#3 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/tcp_usrreq.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet/tcp_var.h#4 integrate
.. //depot/projects/zcopybpf/src/sys/netinet6/ipsec.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/netinet6/sctp6_usrreq.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/netipsec/ipsec_osdep.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/netnatm/natm.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/nfsserver/nfs_srvsock.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/pc98/conf/GENERIC#3 integrate
.. //depot/projects/zcopybpf/src/sys/pci/ncr.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/powerpc/conf/GENERIC#4 integrate
.. //depot/projects/zcopybpf/src/sys/rpc/types.h#1 branch
.. //depot/projects/zcopybpf/src/sys/security/audit/audit.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/security/audit/audit.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/security/audit/audit_arg.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/security/audit/audit_bsm.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/security/audit/audit_bsm_token.c#2 integrate
.. //depot/projects/zcopybpf/src/sys/security/audit/audit_private.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/security/audit/audit_syscalls.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/sparc64/conf/GENERIC#3 integrate
.. //depot/projects/zcopybpf/src/sys/sun4v/conf/GENERIC#3 integrate
.. //depot/projects/zcopybpf/src/sys/sys/eventhandler.h#3 integrate
.. //depot/projects/zcopybpf/src/sys/sys/hash.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/sys/kernel.h#3 integrate
.. //depot/projects/zcopybpf/src/sys/sys/libkern.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/sys/mbuf.h#5 integrate
.. //depot/projects/zcopybpf/src/sys/sys/mutex.h#4 integrate
.. //depot/projects/zcopybpf/src/sys/sys/param.h#5 integrate
.. //depot/projects/zcopybpf/src/sys/sys/priv.h#4 integrate
.. //depot/projects/zcopybpf/src/sys/sys/proc.h#3 integrate
.. //depot/projects/zcopybpf/src/sys/sys/sysctl.h#2 integrate
.. //depot/projects/zcopybpf/src/sys/sys/systm.h#4 integrate
.. //depot/projects/zcopybpf/src/sys/sys/unistd.h#3 integrate
.. //depot/projects/zcopybpf/src/sys/ufs/ffs/ffs_snapshot.c#3 integrate
.. //depot/projects/zcopybpf/src/sys/ufs/ffs/ffs_softdep.c#4 integrate
.. //depot/projects/zcopybpf/src/sys/vm/phys_pager.c#3 integrate
.. //depot/projects/zcopybpf/src/usr.sbin/netstat/mcast.c#3 integrate

Differences ...

==== //depot/projects/zcopybpf/src/sys/Makefile#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/Makefile,v 1.41 2007/03/24 22:21:01 maxim Exp $
+# $FreeBSD: src/sys/Makefile,v 1.42 2007/04/14 16:29:15 maxim Exp $
 
 .include <bsd.own.mk>
 
@@ -8,10 +8,10 @@
 .endif
 
 # Directories to include in cscope name file and TAGS.
-CSCOPEDIRS=	cam coda compat conf contrib crypto ddb dev fs geom gnu i4b \
-		isa kern libkern modules net net80211 netatalk netatm \
+CSCOPEDIRS=	bsm cam coda compat conf contrib crypto ddb dev fs geom gnu \
+		i4b isa kern libkern modules net net80211 netatalk netatm \
 		netgraph netinet netinet6 netipx netkey netnatm netncp \
-		netsmb nfs nfsclient nfs4client rpc pccard pci sys \
+		netsmb nfs nfsclient nfs4client rpc pccard pci security sys \
 		ufs vm ${ARCHDIR}
 
 ARCHDIR	?=	${MACHINE}

==== //depot/projects/zcopybpf/src/sys/amd64/amd64/pmap.c#4 (text+ko) ====

@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.581 2007/03/10 20:26:43 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.582 2007/04/13 16:07:29 alc Exp $");
 
 /*
  *	Manages physical address maps.
@@ -3261,7 +3261,7 @@
 	pd_entry_t *pde;
 	pt_entry_t *pte;
 
-	base = va & PG_FRAME;
+	base = trunc_page(va);
 	offset = va & PAGE_MASK;
 	size = roundup(offset + size, PAGE_SIZE);
 

==== //depot/projects/zcopybpf/src/sys/amd64/conf/GENERIC#3 (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
@@ -48,6 +48,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/zcopybpf/src/sys/boot/forth/loader.conf#3 (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/zcopybpf/src/sys/boot/pc98/boot0.5/Makefile#2 (text+ko) ====

@@ -1,10 +1,11 @@
-# $FreeBSD: src/sys/boot/pc98/boot0.5/Makefile,v 1.4 2004/12/21 08:47:16 ru Exp $
+# $FreeBSD: src/sys/boot/pc98/boot0.5/Makefile,v 1.6 2007/04/07 13:37:45 nyan Exp $
 
 PROG=	${BOOT}.out
 INTERNALPROG=
 FILES=	${BOOT}
 NO_MAN=
-SRCS=	start.s boot.s boot0.5.s disk.s selector.s support.s syscons.s
+SRCS=	start.s boot.s boot0.5.s disk.s selector.s support.s syscons.s \
+	putssjis.s
 CLEANFILES= ${BOOT} ${BOOT}.bin
 
 BOOT=	boot0.5
@@ -13,7 +14,7 @@
 # unless you are glutton for punishment.
 BOOT_BOOT0_ORG?=	0x0000
 
-LDFLAGS=-N -e start -Ttext ${BOOT_BOOT0_ORG}
+LDFLAGS=-N -e start -Ttext ${BOOT_BOOT0_ORG} -Wl,-T,${.CURDIR}/ldscript
 
 # The size of boot0.5 must be 7168 bytes
 ${BOOT}: ${BOOT}.bin

==== //depot/projects/zcopybpf/src/sys/boot/pc98/boot0.5/boot0.5.s#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# Copyright (c) KATO Takenori, 1999, 2000.
+# Copyright (c) KATO Takenori, 1999, 2000, 2007.
 #
 # All rights reserved.  Unpublished rights reserved under the copyright
 # laws of Japan.
@@ -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/boot/pc98/boot0.5/boot0.5.s,v 1.3 2007/03/17 05:30:03 kato Exp $
+# $FreeBSD: src/sys/boot/pc98/boot0.5/boot0.5.s,v 1.4 2007/04/07 08:37:04 kato Exp $
 #
 	.global	main
 	.code16
@@ -261,8 +261,8 @@
 	.global	ishireso
 ishireso:	.byte	0
 
-title:		.asciz	"PC98 Boot Selector Version 1.1"
-copyright:	.ascii	"(C)Copyright 1999, 2000 KATO Takenori. "
+title:		.asciz	"PC98 Boot Selector Version 1.2"
+copyright:	.ascii	"(C)Copyright 1999-2007 KATO Takenori. "
 		.asciz	"All rights reserved."
 msg_device:	.asciz	"Device"
 msg_sasi:	.asciz	"SASI/IDE unit "

==== //depot/projects/zcopybpf/src/sys/boot/pc98/boot0.5/selector.s#2 (text+ko) ====

@@ -1,4 +1,4 @@
-# Copyright (c) KATO Takenori, 1999, 2000.
+# Copyright (c) KATO Takenori, 1999, 2000, 2007.
 #
 # All rights reserved.  Unpublished rights reserved under the copyright
 # laws of Japan.
@@ -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/boot/pc98/boot0.5/selector.s,v 1.2 2000/08/06 14:35:37 kato Exp $
+# $FreeBSD: src/sys/boot/pc98/boot0.5/selector.s,v 1.3 2007/04/07 08:37:04 kato Exp $
 #
 
 	.code16
@@ -299,6 +299,11 @@
 	jne	dev_right
 	movw	$3, mode		# N88-BASIC
 	ret
+
+	# XXX
+	.space	5, 0x90
+	ret				# Dummy ret @0x9ab
+
 dev_up:
 	cmpw	$0, curdevice
 	je	devmode_loop

==== //depot/projects/zcopybpf/src/sys/boot/pc98/boot0.5/start.s#2 (text+ko) ====

@@ -1,4 +1,4 @@
-# Copyright (c) KATO Takenori, 1999, 2000.
+# Copyright (c) KATO Takenori, 1999, 2000, 2007.
 # 
 # All rights reserved.  Unpublished rights reserved under the copyright
 # laws of Japan.
@@ -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/boot/pc98/boot0.5/start.s,v 1.2 2003/05/02 09:33:12 kato Exp $
+# $FreeBSD: src/sys/boot/pc98/boot0.5/start.s,v 1.3 2007/04/07 08:37:04 kato Exp $
 #
 	.global	start
 	.code16
@@ -34,8 +34,19 @@
 start:
 	jmp	start1
 
+	# Magic
+	.org	0x053, 0x20
+	.byte	0x4e, 0x45, 0x43
+
+	.org	0x8f
+	.byte	0x32, 0x2e, 0x37, 0x30
+
 	.org	0x2d4
 start1:
+	# The instruction 'call 0x9ab' can be here.  See also selector.s.
+	nop
+	nop
+	nop
 	cli
 	movw	%cs, %ax
 	movw	%ax, %ds

==== //depot/projects/zcopybpf/src/sys/boot/pc98/boot2/boot.c#2 (text+ko) ====

@@ -49,7 +49,7 @@
 */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/pc98/boot2/boot.c,v 1.16 2006/11/02 17:28:38 ru Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/pc98/boot2/boot.c,v 1.17 2007/04/06 20:50:24 kan Exp $");
 
 #include "boot.h"
 #include <a.out.h>
@@ -70,7 +70,7 @@
 static char kernel_config_namebuf[NAMEBUF_LEN + sizeof "config"];
 static char linebuf[NAMEBUF_LEN];
 static char namebuf[NAMEBUF_LEN];
-static struct bootinfo bootinfo;
+struct bootinfo bootinfo;
 int loadflags;
 
 static void getbootdev(char *ptr, int *howto);

==== //depot/projects/zcopybpf/src/sys/cam/cam_ccb.h#2 (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_ccb.h,v 1.34 2006/12/03 07:19:28 mjacob Exp $
+ * $FreeBSD: src/sys/cam/cam_ccb.h,v 1.35 2007/04/15 08:49:09 scottl Exp $
  */
 
 #ifndef _CAM_CAM_CCB_H
@@ -242,8 +242,7 @@
 typedef union {
 	void		*ptr;
 	u_long		field;
-	u_int8_t	bytes[sizeof(void *) > sizeof(u_long)
-			      ? sizeof(void *) : sizeof(u_long)];
+	u_int8_t	bytes[sizeof(uintptr_t)];
 } ccb_priv_entry;
 
 typedef union {
@@ -274,8 +273,12 @@
 	ccb_ppriv_area	periph_priv;
 	ccb_spriv_area	sim_priv;
 	u_int32_t	timeout;	/* Timeout value */
+
+	/*
+	 * Deprecated, only for use by non-MPSAFE SIMs.  All others must
+	 * allocate and initialize their own callout storage.
+	 */
 	struct		callout_handle timeout_ch;
-					/* Callout handle used for timeouts */
 };
 
 /* Get Device Information CCB */

==== //depot/projects/zcopybpf/src/sys/cam/cam_periph.c#2 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.64 2006/12/05 07:45:27 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.65 2007/04/15 08:49:09 scottl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -51,6 +51,7 @@
 #include <cam/cam_xpt_periph.h>
 #include <cam/cam_periph.h>
 #include <cam/cam_debug.h>
+#include <cam/cam_sim.h>
 
 #include <cam/scsi/scsi_all.h>
 #include <cam/scsi/scsi_message.h>
@@ -122,6 +123,7 @@
 		 ac_callback_t *ac_callback, ac_code code, void *arg)
 {
 	struct		periph_driver **p_drv;
+	struct		cam_sim *sim;
 	struct		cam_periph *periph;
 	struct		cam_periph *cur_periph;
 	path_id_t	path_id;
@@ -163,11 +165,14 @@
 	
 	init_level++;
 
+	xpt_lock_buses();
 	for (p_drv = periph_drivers; *p_drv != NULL; p_drv++) {
 		if (strcmp((*p_drv)->driver_name, name) == 0)
 			break;
 	}
-	
+	xpt_unlock_buses();
+
+	sim = xpt_path_sim(path);
 	path_id = xpt_path_path_id(path);
 	target_id = xpt_path_target_id(path);
 	lun_id = xpt_path_lun_id(path);
@@ -181,6 +186,7 @@
 	periph->unit_number = camperiphunit(*p_drv, path_id, target_id, lun_id);
 	periph->immediate_priority = CAM_PRIORITY_NONE;
 	periph->refcount = 0;
+	periph->sim = sim;
 	SLIST_INIT(&periph->ccb_list);
 	status = xpt_create_path(&path, periph, path_id, target_id, lun_id);
 	if (status != CAM_REQ_CMP)
@@ -276,14 +282,13 @@
 cam_status
 cam_periph_acquire(struct cam_periph *periph)
 {
-	int s;
 
 	if (periph == NULL)
 		return(CAM_REQ_CMP_ERR);
 
-	s = splsoftcam();
+	xpt_lock_buses();
 	periph->refcount++;
-	splx(s);
+	xpt_unlock_buses();
 
 	return(CAM_REQ_CMP);
 }
@@ -291,18 +296,66 @@
 void
 cam_periph_release(struct cam_periph *periph)
 {
-	int s;
 
 	if (periph == NULL)
 		return;
 
-	s = splsoftcam();
+	xpt_lock_buses();
 	if ((--periph->refcount == 0)
 	 && (periph->flags & CAM_PERIPH_INVALID)) {
 		camperiphfree(periph);
 	}
-	splx(s);
+	xpt_unlock_buses();
+
+}
+
+int
+cam_periph_hold(struct cam_periph *periph, int priority)
+{
+	struct mtx *mtx;
+	int error;
+
+	mtx_assert(periph->sim->mtx, MA_OWNED);
+
+	/*
+	 * Increment the reference count on the peripheral
+	 * while we wait for our lock attempt to succeed
+	 * to ensure the peripheral doesn't disappear out
+	 * from user us while we sleep.
+	 */
+
+	if (cam_periph_acquire(periph) != CAM_REQ_CMP)
+		return (ENXIO);
+
+	mtx = periph->sim->mtx;
+	if (mtx == &Giant)
+		mtx = NULL;
+
+	while ((periph->flags & CAM_PERIPH_LOCKED) != 0) {
+		periph->flags |= CAM_PERIPH_LOCK_WANTED;
+		if ((error = msleep(periph, mtx, priority, "caplck", 0)) != 0) {
+			cam_periph_release(periph);
+			return (error);
+		}
+	}
+
+	periph->flags |= CAM_PERIPH_LOCKED;
+	return (0);
+}
+
+void
+cam_periph_unhold(struct cam_periph *periph)
+{
+
+	mtx_assert(periph->sim->mtx, MA_OWNED);
+
+	periph->flags &= ~CAM_PERIPH_LOCKED;
+	if ((periph->flags & CAM_PERIPH_LOCK_WANTED) != 0) {
+		periph->flags &= ~CAM_PERIPH_LOCK_WANTED;
+		wakeup(periph);
+	}
 
+	cam_periph_release(periph);
 }
 
 /*
@@ -424,9 +477,7 @@
 void
 cam_periph_invalidate(struct cam_periph *periph)
 {
-	int s;
 
-	s = splsoftcam();
 	/*
 	 * We only call this routine the first time a peripheral is
 	 * invalidated.  The oninvalidate() routine is always called at
@@ -439,11 +490,12 @@
 	periph->flags |= CAM_PERIPH_INVALID;
 	periph->flags &= ~CAM_PERIPH_NEW_DEV_FOUND;
 
+	xpt_lock_buses();
 	if (periph->refcount == 0)
 		camperiphfree(periph);
 	else if (periph->refcount < 0)
 		printf("cam_invalidate_periph: refcount < 0!!\n");
-	splx(s);
+	xpt_unlock_buses();
 }
 
 static void
@@ -502,30 +554,11 @@
 /*
  * Wait interruptibly for an exclusive lock.
  */
-int
-cam_periph_lock(struct cam_periph *periph, int priority)
+void
+cam_periph_lock(struct cam_periph *periph)
 {
-	int error;
 
-	/*
-	 * Increment the reference count on the peripheral
-	 * while we wait for our lock attempt to succeed
-	 * to ensure the peripheral doesn't disappear out
-	 * from under us while we sleep.
-	 */
-	if (cam_periph_acquire(periph) != CAM_REQ_CMP)
-		return(ENXIO);
-
-	while ((periph->flags & CAM_PERIPH_LOCKED) != 0) {
-		periph->flags |= CAM_PERIPH_LOCK_WANTED;
-		if ((error = tsleep(periph, priority, "caplck", 0)) != 0) {
-			cam_periph_release(periph);
-			return error;
-		}
-	}
-
-	periph->flags |= CAM_PERIPH_LOCKED;
-	return 0;
+	mtx_lock(periph->sim->mtx);
 }
 
 /*
@@ -534,13 +567,8 @@
 void
 cam_periph_unlock(struct cam_periph *periph)
 {
-	periph->flags &= ~CAM_PERIPH_LOCKED;
-	if ((periph->flags & CAM_PERIPH_LOCK_WANTED) != 0) {
-		periph->flags &= ~CAM_PERIPH_LOCK_WANTED;
-		wakeup(periph);
-	}
 
-	cam_periph_release(periph);
+	mtx_unlock(periph->sim->mtx);
 }
 
 /*
@@ -752,12 +780,11 @@
 cam_periph_getccb(struct cam_periph *periph, u_int32_t priority)
 {
 	struct ccb_hdr *ccb_h;
-	int s;
+	struct mtx *mtx;
 
+	mtx_assert(periph->sim->mtx, MA_OWNED);
 	CAM_DEBUG(periph->path, CAM_DEBUG_TRACE, ("entering cdgetccb\n"));
 
-	s = splsoftcam();
-	
 	while (SLIST_FIRST(&periph->ccb_list) == NULL) {
 		if (periph->immediate_priority > priority)
 			periph->immediate_priority = priority;
@@ -765,24 +792,35 @@
 		if ((SLIST_FIRST(&periph->ccb_list) != NULL)
 		 && (SLIST_FIRST(&periph->ccb_list)->pinfo.priority == priority))
 			break;
-		tsleep(&periph->ccb_list, PRIBIO, "cgticb", 0);
+		mtx_assert(periph->sim->mtx, MA_OWNED);
+		if (periph->sim->mtx == &Giant)
+			mtx = NULL;
+		else
+			mtx = periph->sim->mtx;
+		msleep(&periph->ccb_list, mtx, PRIBIO, "cgticb", 0);
 	}
 
 	ccb_h = SLIST_FIRST(&periph->ccb_list);
 	SLIST_REMOVE_HEAD(&periph->ccb_list, periph_links.sle);
-	splx(s);
 	return ((union ccb *)ccb_h);
 }
 
 void
 cam_periph_ccbwait(union ccb *ccb)
 {
+	struct mtx *mtx;
+	struct cam_sim *sim;
 	int s;
 
 	s = splsoftcam();
+	sim = xpt_path_sim(ccb->ccb_h.path);
+	if (sim->mtx == &Giant)
+		mtx = NULL;
+	else
+		mtx = sim->mtx;
 	if ((ccb->ccb_h.pinfo.index != CAM_UNQUEUED_INDEX)
 	 || ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG))
-		tsleep(&ccb->ccb_h.cbfcnp, PRIBIO, "cbwait", 0);
+		msleep(&ccb->ccb_h.cbfcnp, mtx, PRIBIO, "cbwait", 0);
 
 	splx(s);
 }
@@ -857,10 +895,13 @@
 		  cam_flags camflags, u_int32_t sense_flags,
 		  struct devstat *ds)
 {
+	struct cam_sim *sim;
 	int error;
  
 	error = 0;
-        
+	sim = xpt_path_sim(ccb->ccb_h.path);
+	mtx_assert(sim->mtx, MA_OWNED);
+
 	/*
 	 * If the user has supplied a stats structure, and if we understand
 	 * this particular type of ccb, record the transaction start.

==== //depot/projects/zcopybpf/src/sys/cam/cam_periph.h#2 (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.16 2005/01/05 22:34:34 imp Exp $
+ * $FreeBSD: src/sys/cam/cam_periph.h,v 1.17 2007/04/15 08:49:09 scottl Exp $
  */
 
 #ifndef _CAM_CAM_PERIPH_H
@@ -104,6 +104,7 @@
 	char			*periph_name;
 	struct cam_path		*path;	/* Compiled path to device */
 	void			*softc;
+	struct cam_sim		*sim;
 	u_int32_t		 unit_number;
 	cam_periph_type		 type;
 	u_int32_t		 flags;
@@ -113,6 +114,7 @@
 #define CAM_PERIPH_INVALID		0x08
 #define CAM_PERIPH_NEW_DEV_FOUND	0x10
 #define CAM_PERIPH_RECOVERY_INPROG	0x20
+#define CAM_PERIPH_POLLED		0x40
 	u_int32_t		 immediate_priority;
 	u_int32_t		 refcount;
 	SLIST_HEAD(, ccb_hdr)	 ccb_list;	/* For "immediate" requests */
@@ -136,10 +138,12 @@
 			    char *name, cam_periph_type type, struct cam_path *,
 			    ac_callback_t *, ac_code, void *arg);
 struct cam_periph *cam_periph_find(struct cam_path *path, char *name);
-int		cam_periph_lock(struct cam_periph *periph, int priority);
+void		cam_periph_lock(struct cam_periph *periph);
 void		cam_periph_unlock(struct cam_periph *periph);
 cam_status	cam_periph_acquire(struct cam_periph *periph);
 void		cam_periph_release(struct cam_periph *periph);
+int		cam_periph_hold(struct cam_periph *periph, int priority);
+void		cam_periph_unhold(struct cam_periph *periph);
 void		cam_periph_invalidate(struct cam_periph *periph);
 int		cam_periph_mapmem(union ccb *ccb,
 				  struct cam_periph_map_info *mapinfo);

==== //depot/projects/zcopybpf/src/sys/cam/cam_sim.c#2 (text+ko) ====

@@ -27,12 +27,14 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/cam_sim.c,v 1.9 2005/07/01 15:21:29 avatar Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/cam_sim.c,v 1.10 2007/04/15 08:49:09 scottl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/malloc.h>
 #include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
 
 #include <cam/cam.h>
 #include <cam/cam_ccb.h>
@@ -58,39 +60,42 @@
 struct cam_sim *
 cam_sim_alloc(sim_action_func sim_action, sim_poll_func sim_poll,
 	      const char *sim_name, void *softc, u_int32_t unit,
-	      int max_dev_transactions,
+	      struct mtx *mtx, int max_dev_transactions,
 	      int max_tagged_dev_transactions, struct cam_devq *queue)
 {
 	struct cam_sim *sim;
 
-	/*
-	 * If this is the xpt layer creating a sim, then it's OK
-	 * to wait for an allocation.
-	 *
-	 * XXX Should we pass in a flag to indicate that wait is OK?
-	 */
-	if (strcmp(sim_name, "xpt") == 0)
-		sim = (struct cam_sim *)malloc(sizeof(struct cam_sim),
-					       M_CAMSIM, M_WAITOK);
-	else
-		sim = (struct cam_sim *)malloc(sizeof(struct cam_sim),
-					       M_CAMSIM, M_NOWAIT);
+	if (mtx == NULL)
+		return (NULL);
+
+	sim = (struct cam_sim *)malloc(sizeof(struct cam_sim),
+	    M_CAMSIM, M_NOWAIT);
+
+	if (sim == NULL)
+		return (NULL);
 
-	if (sim != NULL) {
-		sim->sim_action = sim_action;
-		sim->sim_poll = sim_poll;
-		sim->sim_name = sim_name;
-		sim->softc = softc;
-		sim->path_id = CAM_PATH_ANY;
-		sim->unit_number = unit;
-		sim->bus_id = 0;	/* set in xpt_bus_register */
-		sim->max_tagged_dev_openings = max_tagged_dev_transactions;
-		sim->max_dev_openings = max_dev_transactions;
-		sim->flags = 0;
-		callout_handle_init(&sim->c_handle);
-		sim->devq = queue;
+	sim->sim_action = sim_action;
+	sim->sim_poll = sim_poll;
+	sim->sim_name = sim_name;
+	sim->softc = softc;
+	sim->path_id = CAM_PATH_ANY;
+	sim->unit_number = unit;
+	sim->bus_id = 0;	/* set in xpt_bus_register */
+	sim->max_tagged_dev_openings = max_tagged_dev_transactions;
+	sim->max_dev_openings = max_dev_transactions;
+	sim->flags = 0;
+	sim->devq = queue;
+	sim->mtx = mtx;
+	if (mtx == &Giant) {
+		sim->flags |= 0;
+		callout_init(&sim->callout, 0);
+	} else {
+		sim->flags |= CAM_SIM_MPSAFE;
+		callout_init(&sim->callout, 1);
 	}
 
+	SLIST_INIT(&sim->ccb_freeq);
+
 	return (sim);
 }
 

==== //depot/projects/zcopybpf/src/sys/cam/cam_sim.h#2 (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_sim.h,v 1.6 2005/01/05 22:34:34 imp Exp $
+ * $FreeBSD: src/sys/cam/cam_sim.h,v 1.7 2007/04/15 08:49:09 scottl Exp $
  */
 
 #ifndef _CAM_CAM_SIM_H
@@ -56,6 +56,7 @@
 				const char *sim_name,
 				void *softc,
 				u_int32_t unit,
+				struct mtx *mtx,
 				int max_dev_transactions,
 				int max_tagged_dev_transactions,
 				struct cam_devq *queue);
@@ -90,17 +91,33 @@
 	sim_poll_func		sim_poll;
 	const char		*sim_name;
 	void			*softc;
+	struct mtx		*mtx;
 	u_int32_t		path_id;/* The Boot device may set this to 0? */
 	u_int32_t		unit_number;
 	u_int32_t		bus_id;
 	int			max_tagged_dev_openings;
 	int			max_dev_openings;
 	u_int32_t		flags;
-#define		CAM_SIM_REL_TIMEOUT_PENDING	0x01
-	struct callout_handle	c_handle;
+#define	CAM_SIM_REL_TIMEOUT_PENDING	0x01
+#define	CAM_SIM_MPSAFE			0x02
+	struct callout		callout;
 	struct cam_devq 	*devq;	/* Device Queue to use for this SIM */
+
+	/* "Pool" of inactive ccbs managed by xpt_alloc_ccb and xpt_free_ccb */
+	SLIST_HEAD(,ccb_hdr)	ccb_freeq;
+	/*
+	 * Maximum size of ccb pool.  Modified as devices are added/removed
+	 * or have their * opening counts changed.
+	 */
+	u_int			max_ccbs;
+	/* Current count of allocated ccbs */
+	u_int			ccb_count;
+
 };
 
+#define CAM_SIM_LOCK(sim)	mtx_lock((sim)->mtx);
+#define CAM_SIM_UNLOCK(sim)	mtx_unlock((sim)->mtx);
+
 static __inline u_int32_t
 cam_sim_path(struct cam_sim *sim)
 {

==== //depot/projects/zcopybpf/src/sys/cam/cam_xpt.c#4 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.175 2007/03/15 06:42:54 mjacob Exp $");

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


More information about the p4-projects mailing list