Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 2 Sep 2004 04:06:02 GMT
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 60846 for review
Message-ID:  <200409020406.i82462dU035514@repoman.freebsd.org>

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

Change 60846 by rwatson@rwatson_paprika on 2004/09/02 04:05:57

	Integrate netperf_socket from CVS HEAD:
	
	- Scheduler now given more information about run queue change
	  requests; cleanup, bug fixes, preemption likes 4bsd!  ipi wakeup
	  also in base tree for 4bsd.
	- mp_watchdog ported to amd64.
	- thread_user_enter() no longer takes p and td
	- loader now speaks some elf, getting amd64 modules to work
	- device numbers and counts removed from a few more devices
	- if_em fixes
	- powerpc pmap locking.
	- VM lock pushed down in several VM bits, etc. 
	
	Related to netperf:
	
	- Looped back NET_WITH_GIANT, NET_NEEDS_GIANT, boot time warnings and
	  adaptation, mpsafenet now the default in CVS!
	- ifi_epoch added (ABI oops, but good idea otherwise)
	- slstart added so if_sl has if_start defined.
	- Looped back ng_socket.c Giant around call into linker.
	- Looped back if_pcn, if_sf, if_ste, if_ti, if_tl, if_wb use of
	  IFF_NEEDSGIANT.

Affected files ...

.. //depot/projects/netperf_socket/sys/alpha/alpha/trap.c#3 integrate
.. //depot/projects/netperf_socket/sys/alpha/conf/GENERIC#9 integrate
.. //depot/projects/netperf_socket/sys/alpha/conf/NOTES#3 integrate
.. //depot/projects/netperf_socket/sys/alpha/linux/linux_machdep.c#3 integrate
.. //depot/projects/netperf_socket/sys/alpha/pci/pcibus.c#3 integrate
.. //depot/projects/netperf_socket/sys/amd64/amd64/mp_machdep.c#12 integrate
.. //depot/projects/netperf_socket/sys/amd64/amd64/mp_watchdog.c#1 branch
.. //depot/projects/netperf_socket/sys/amd64/amd64/pmap.c#27 integrate
.. //depot/projects/netperf_socket/sys/amd64/amd64/trap.c#10 integrate
.. //depot/projects/netperf_socket/sys/amd64/ia32/ia32_syscall.c#2 integrate
.. //depot/projects/netperf_socket/sys/amd64/include/mp_watchdog.h#1 branch
.. //depot/projects/netperf_socket/sys/amd64/linux32/linux32_machdep.c#3 integrate
.. //depot/projects/netperf_socket/sys/boot/common/Makefile.inc#3 integrate
.. //depot/projects/netperf_socket/sys/boot/common/bootstrap.h#2 integrate
.. //depot/projects/netperf_socket/sys/boot/common/load_elf.c#3 integrate
.. //depot/projects/netperf_socket/sys/boot/common/load_elf32_obj.c#1 branch
.. //depot/projects/netperf_socket/sys/boot/common/load_elf64_obj.c#1 branch
.. //depot/projects/netperf_socket/sys/boot/common/load_elf_obj.c#1 branch
.. //depot/projects/netperf_socket/sys/boot/common/misc.c#2 integrate
.. //depot/projects/netperf_socket/sys/boot/common/reloc_elf.c#1 branch
.. //depot/projects/netperf_socket/sys/boot/common/reloc_elf32.c#1 branch
.. //depot/projects/netperf_socket/sys/boot/common/reloc_elf64.c#1 branch
.. //depot/projects/netperf_socket/sys/boot/i386/libi386/elf32_freebsd.c#2 integrate
.. //depot/projects/netperf_socket/sys/boot/i386/libi386/elf64_freebsd.c#2 integrate
.. //depot/projects/netperf_socket/sys/boot/i386/loader/conf.c#2 integrate
.. //depot/projects/netperf_socket/sys/cam/cam_periph.c#2 integrate
.. //depot/projects/netperf_socket/sys/cam/scsi/scsi_da.c#8 integrate
.. //depot/projects/netperf_socket/sys/coda/cnode.h#3 integrate
.. //depot/projects/netperf_socket/sys/coda/coda_fbsd.c#6 integrate
.. //depot/projects/netperf_socket/sys/coda/coda_psdev.c#3 integrate
.. //depot/projects/netperf_socket/sys/coda/coda_vfsops.c#5 integrate
.. //depot/projects/netperf_socket/sys/conf/Makefile.alpha#4 integrate
.. //depot/projects/netperf_socket/sys/conf/Makefile.amd64#3 integrate
.. //depot/projects/netperf_socket/sys/conf/Makefile.arm#2 integrate
.. //depot/projects/netperf_socket/sys/conf/Makefile.i386#3 integrate
.. //depot/projects/netperf_socket/sys/conf/Makefile.ia64#3 integrate
.. //depot/projects/netperf_socket/sys/conf/Makefile.pc98#3 integrate
.. //depot/projects/netperf_socket/sys/conf/Makefile.powerpc#4 integrate
.. //depot/projects/netperf_socket/sys/conf/Makefile.sparc64#3 integrate
.. //depot/projects/netperf_socket/sys/conf/NOTES#40 integrate
.. //depot/projects/netperf_socket/sys/conf/files#51 integrate
.. //depot/projects/netperf_socket/sys/conf/files.amd64#16 integrate
.. //depot/projects/netperf_socket/sys/conf/files.pc98#16 integrate
.. //depot/projects/netperf_socket/sys/conf/kmod.mk#14 integrate
.. //depot/projects/netperf_socket/sys/conf/majors#6 integrate
.. //depot/projects/netperf_socket/sys/conf/options#29 integrate
.. //depot/projects/netperf_socket/sys/conf/options.amd64#7 integrate
.. //depot/projects/netperf_socket/sys/conf/options.pc98#8 integrate
.. //depot/projects/netperf_socket/sys/dev/acpica/acpi_pci_link.c#13 integrate
.. //depot/projects/netperf_socket/sys/dev/acpica/acpi_thermal.c#12 integrate
.. //depot/projects/netperf_socket/sys/dev/aic7xxx/ahc_isa.c#3 integrate
.. //depot/projects/netperf_socket/sys/dev/ata/ata-chipset.c#19 integrate
.. //depot/projects/netperf_socket/sys/dev/ata/ata-disk.c#9 integrate
.. //depot/projects/netperf_socket/sys/dev/bfe/if_bfe.c#9 integrate
.. //depot/projects/netperf_socket/sys/dev/bfe/if_bfereg.h#4 integrate
.. //depot/projects/netperf_socket/sys/dev/drm/radeon_drv.c#2 integrate
.. //depot/projects/netperf_socket/sys/dev/em/if_em.c#8 integrate
.. //depot/projects/netperf_socket/sys/dev/em/if_em.h#3 integrate
.. //depot/projects/netperf_socket/sys/dev/em/if_em_hw.c#3 integrate
.. //depot/projects/netperf_socket/sys/dev/em/if_em_hw.h#3 integrate
.. //depot/projects/netperf_socket/sys/dev/fdc/fdc_acpi.c#4 integrate
.. //depot/projects/netperf_socket/sys/dev/fdc/fdc_isa.c#6 integrate
.. //depot/projects/netperf_socket/sys/dev/firewire/fwcrom.c#4 integrate
.. //depot/projects/netperf_socket/sys/dev/md/md.c#19 integrate
.. //depot/projects/netperf_socket/sys/dev/tga/tga_pci.c#4 integrate
.. //depot/projects/netperf_socket/sys/dev/usb/usbdi.c#4 integrate
.. //depot/projects/netperf_socket/sys/fs/autofs/autofs.h#1 branch
.. //depot/projects/netperf_socket/sys/fs/autofs/autofs_util.c#1 branch
.. //depot/projects/netperf_socket/sys/fs/autofs/autofs_vfsops.c#1 branch
.. //depot/projects/netperf_socket/sys/fs/autofs/autofs_vnops.c#1 branch
.. //depot/projects/netperf_socket/sys/geom/concat/g_concat.c#14 integrate
.. //depot/projects/netperf_socket/sys/geom/geom_io.c#8 integrate
.. //depot/projects/netperf_socket/sys/geom/label/g_label.c#6 integrate
.. //depot/projects/netperf_socket/sys/geom/mirror/g_mirror.c#10 integrate
.. //depot/projects/netperf_socket/sys/geom/raid3/g_raid3.c#6 integrate
.. //depot/projects/netperf_socket/sys/geom/stripe/g_stripe.c#11 integrate
.. //depot/projects/netperf_socket/sys/i386/bios/mca_machdep.c#3 integrate
.. //depot/projects/netperf_socket/sys/i386/bios/vpd.c#4 integrate
.. //depot/projects/netperf_socket/sys/i386/conf/NOTES#28 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/mp_machdep.c#9 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/pmap.c#27 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/trap.c#7 integrate
.. //depot/projects/netperf_socket/sys/i386/include/param.h#5 integrate
.. //depot/projects/netperf_socket/sys/i386/linux/linux_machdep.c#4 integrate
.. //depot/projects/netperf_socket/sys/i4b/driver/i4b_ing.c#5 integrate
.. //depot/projects/netperf_socket/sys/i4b/driver/i4b_ipr.c#4 integrate
.. //depot/projects/netperf_socket/sys/i4b/driver/i4b_isppp.c#2 integrate
.. //depot/projects/netperf_socket/sys/i4b/driver/i4b_rbch.c#4 integrate
.. //depot/projects/netperf_socket/sys/i4b/driver/i4b_tel.c#4 integrate
.. //depot/projects/netperf_socket/sys/i4b/driver/i4b_trace.c#4 integrate
.. //depot/projects/netperf_socket/sys/i4b/layer4/i4b_i4bdrv.c#4 integrate
.. //depot/projects/netperf_socket/sys/i4b/layer4/i4b_l4.c#2 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/exception.S#2 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/locore.S#4 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/pmap.c#18 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/support.S#3 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/syscall.S#3 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/trap.c#8 integrate
.. //depot/projects/netperf_socket/sys/kern/init_main.c#8 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_conf.c#9 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_fork.c#17 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_idle.c#6 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_intr.c#10 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_kse.c#13 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_kthread.c#2 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_prot.c#10 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_shutdown.c#15 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_sig.c#20 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_switch.c#12 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_thr.c#11 integrate
.. //depot/projects/netperf_socket/sys/kern/kern_thread.c#25 integrate
.. //depot/projects/netperf_socket/sys/kern/link_elf_obj.c#7 integrate
.. //depot/projects/netperf_socket/sys/kern/sched_4bsd.c#14 integrate
.. //depot/projects/netperf_socket/sys/kern/sched_ule.c#20 integrate
.. //depot/projects/netperf_socket/sys/kern/subr_bus.c#14 integrate
.. //depot/projects/netperf_socket/sys/kern/subr_smp.c#11 integrate
.. //depot/projects/netperf_socket/sys/kern/subr_trap.c#9 integrate
.. //depot/projects/netperf_socket/sys/kern/subr_turnstile.c#7 integrate
.. //depot/projects/netperf_socket/sys/modules/Makefile#19 integrate
.. //depot/projects/netperf_socket/sys/modules/aac/Makefile#2 integrate
.. //depot/projects/netperf_socket/sys/modules/autofs/Makefile#1 branch
.. //depot/projects/netperf_socket/sys/modules/cam/Makefile#3 integrate
.. //depot/projects/netperf_socket/sys/modules/coda/Makefile#2 integrate
.. //depot/projects/netperf_socket/sys/modules/coda5/Makefile#2 integrate
.. //depot/projects/netperf_socket/sys/modules/cp/Makefile#2 integrate
.. //depot/projects/netperf_socket/sys/modules/ctau/Makefile#3 integrate
.. //depot/projects/netperf_socket/sys/modules/cx/Makefile#3 integrate
.. //depot/projects/netperf_socket/sys/modules/if_ppp/Makefile#2 integrate
.. //depot/projects/netperf_socket/sys/modules/if_tap/Makefile#2 integrate
.. //depot/projects/netperf_socket/sys/modules/pf/Makefile#5 integrate
.. //depot/projects/netperf_socket/sys/net/if.c#18 integrate
.. //depot/projects/netperf_socket/sys/net/if.h#7 integrate
.. //depot/projects/netperf_socket/sys/net/if_sl.c#13 integrate
.. //depot/projects/netperf_socket/sys/net/netisr.c#4 integrate
.. //depot/projects/netperf_socket/sys/netgraph/ng_socket.c#7 integrate
.. //depot/projects/netperf_socket/sys/netgraph/ng_tty.c#6 integrate
.. //depot/projects/netperf_socket/sys/netinet6/ipsec.c#4 integrate
.. //depot/projects/netperf_socket/sys/netipx/ipx.c#2 integrate
.. //depot/projects/netperf_socket/sys/pc98/conf/GENERIC#14 integrate
.. //depot/projects/netperf_socket/sys/pc98/pc98/atapi.c#2 integrate
.. //depot/projects/netperf_socket/sys/pc98/pc98/wd.c#4 integrate
.. //depot/projects/netperf_socket/sys/pci/if_pcn.c#8 integrate
.. //depot/projects/netperf_socket/sys/pci/if_sf.c#9 integrate
.. //depot/projects/netperf_socket/sys/pci/if_ste.c#17 integrate
.. //depot/projects/netperf_socket/sys/pci/if_ti.c#9 integrate
.. //depot/projects/netperf_socket/sys/pci/if_tl.c#6 integrate
.. //depot/projects/netperf_socket/sys/pci/if_wb.c#8 integrate
.. //depot/projects/netperf_socket/sys/powerpc/powerpc/pmap.c#17 integrate
.. //depot/projects/netperf_socket/sys/powerpc/powerpc/trap.c#6 integrate
.. //depot/projects/netperf_socket/sys/sparc64/sparc64/trap.c#3 integrate
.. //depot/projects/netperf_socket/sys/sys/bio.h#7 integrate
.. //depot/projects/netperf_socket/sys/sys/kernel.h#6 integrate
.. //depot/projects/netperf_socket/sys/sys/param.h#28 integrate
.. //depot/projects/netperf_socket/sys/sys/proc.h#25 integrate
.. //depot/projects/netperf_socket/sys/sys/sched.h#6 integrate
.. //depot/projects/netperf_socket/sys/sys/smp.h#5 integrate
.. //depot/projects/netperf_socket/sys/sys/systm.h#10 integrate
.. //depot/projects/netperf_socket/sys/sys/ucred.h#3 integrate
.. //depot/projects/netperf_socket/sys/vm/vm_fault.c#9 integrate
.. //depot/projects/netperf_socket/sys/vm/vm_mmap.c#12 integrate
.. //depot/projects/netperf_socket/sys/vm/vm_object.c#11 integrate
.. //depot/projects/netperf_socket/sys/vm/vm_zeroidle.c#5 integrate

Differences ...

==== //depot/projects/netperf_socket/sys/alpha/alpha/trap.c#3 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/trap.c,v 1.118 2004/07/10 22:35:05 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/trap.c,v 1.120 2004/08/31 07:34:53 julian Exp $");
 
 /* #include "opt_fix_unaligned_vax_fp.h" */
 #include "opt_ddb.h"
@@ -591,9 +591,6 @@
 		framep->tf_regs[FRAME_SP] = alpha_pal_rdusp();
 		userret(td, framep, sticks);
 		mtx_assert(&Giant, MA_NOTOWNED);
-#ifdef DIAGNOSTIC
-		cred_free_thread(td);
-#endif
 	}
 	return;
 
@@ -665,7 +662,7 @@
 	if (td->td_ucred != p->p_ucred)
 		cred_update_thread(td);
 	if (p->p_flag & P_SA)
-		thread_user_enter(p, td);
+		thread_user_enter(td);
 #ifdef DIAGNOSTIC
 	alpha_fpstate_check(td);
 #endif
@@ -785,9 +782,6 @@
 
 	PTRACESTOP_SC(p, td, S_PT_SCX);
 
-#ifdef DIAGNOSTIC
-	cred_free_thread(td);
-#endif
 	WITNESS_WARN(WARN_PANIC, NULL, "System call %s returning",
 	    (code >= 0 && code < SYS_MAXSYSCALL) ? syscallnames[code] : "???");
 	mtx_assert(&sched_lock, MA_NOTOWNED);

==== //depot/projects/netperf_socket/sys/alpha/conf/GENERIC#9 (text+ko) ====

@@ -18,7 +18,7 @@
 #
 # For hardware specific information check HARDWARE.TXT
 #
-# $FreeBSD: src/sys/alpha/conf/GENERIC,v 1.175 2004/08/27 15:16:21 andre Exp $
+# $FreeBSD: src/sys/alpha/conf/GENERIC,v 1.177 2004/08/30 18:40:00 wilko Exp $
 
 machine		alpha
 cpu		EV4
@@ -41,7 +41,8 @@
 options 	DEC_ST550		# Personal Workstation 433, 500, 600
 options 	DEC_ST6600		# XP1000, DP264, DS20, DS10, family
 options 	DEC_1000A		# AlphaServer 1000, 1000A, 800
-options 	DEC_KN8AE		# AlphaServer 8200/8400 (Turbolaser)
+# TurboLaser support is broken
+# options 	DEC_KN8AE		# AlphaServer 8200/8400 (Turbolaser)
 options 	DEC_KN300		# AlphaServer 4100 (Rawhide),
 					# AlphaServer 1200 (Tincup)
 
@@ -152,6 +153,7 @@
 
 # PCI Ethernet NICs.
 device		de		# DEC/Intel DC21x4x (``Tulip'')
+device		em		# Intel PRO/1000 adapter Gigabit Ethernet Card
 device		txp		# 3Com 3cR990 (``Typhoon'')
 device		vx		# 3Com 3c590, 3c595 (``Vortex'')
 

==== //depot/projects/netperf_socket/sys/alpha/conf/NOTES#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/alpha/conf/NOTES,v 1.154 2004/07/10 22:29:40 marcel Exp $
+# $FreeBSD: src/sys/alpha/conf/NOTES,v 1.155 2004/08/28 21:47:24 wilko Exp $
 #
 # This file contains machine dependent kernel configuration notes.  For
 # machine independent notes, look in /sys/conf/NOTES.
@@ -36,7 +36,8 @@
 options 	DEC_ST550		# Personal Workstation 433, 500, 600
 options 	DEC_ST6600		# XP1000, DP264, DS20, DS10, family
 options 	DEC_1000A		# AlphaServer 1000, 1000A, 800
-options 	DEC_KN8AE		# AlphaServer 8200/8400 (Turbolaser)
+# TurboLaser support is broken
+# options 	DEC_KN8AE		# AlphaServer 8200/8400 (Turbolaser)
 options 	DEC_KN300		# AlphaServer 4100 (Rawhide),
 					# AlphaServer 1200 (Tincup)
 

==== //depot/projects/netperf_socket/sys/alpha/linux/linux_machdep.c#3 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/linux/linux_machdep.c,v 1.33 2004/02/04 21:52:52 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/linux/linux_machdep.c,v 1.34 2004/09/01 02:11:27 julian Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -180,7 +180,7 @@
 	 */
 	mtx_lock_spin(&sched_lock);
 	TD_SET_CAN_RUN(td2);
-	setrunqueue(td2);
+	setrunqueue(td2, SRQ_BORING);
 	mtx_unlock_spin(&sched_lock);
 
 	td->td_retval[0] = p2->p_pid;

==== //depot/projects/netperf_socket/sys/alpha/pci/pcibus.c#3 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/pci/pcibus.c,v 1.34 2004/07/01 15:07:27 gallatin Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/pci/pcibus.c,v 1.35 2004/08/29 19:07:14 marcel Exp $");
 
 #include "opt_isa.h"
 
@@ -262,7 +262,7 @@
 		else if (flags & PCI_RF_BWX)
 			va = ALPHAPCI_CVT_BWX(bus, rv->r_start);
 		else
-			va = (void *) rv->r_start; /* maybe NULL? */
+			va = (void *)ALPHA_PHYS_TO_K0SEG(rv->r_start);
 		rman_set_virtual(rv, va);
 
 		break;

==== //depot/projects/netperf_socket/sys/amd64/amd64/mp_machdep.c#12 (text+ko) ====

@@ -25,10 +25,11 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.244 2004/08/28 00:49:54 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.246 2004/09/01 06:42:01 julian Exp $");
 
 #include "opt_cpu.h"
 #include "opt_kstack_pages.h"
+#include "opt_mp_watchdog.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -56,6 +57,7 @@
 #include <machine/apicreg.h>
 #include <machine/clock.h>
 #include <machine/md_var.h>
+#include <machine/mp_watchdog.h>
 #include <machine/pcb.h>
 #include <machine/psl.h>
 #include <machine/smp.h>
@@ -111,7 +113,6 @@
  */
 
 static u_int logical_cpus;
-static u_int logical_cpus_mask;
 
 /* used to hold the AP's until we are ready to release them */
 static struct mtx ap_boot_mtx;
@@ -136,7 +137,6 @@
 static int	start_ap(int apic_id);
 static void	release_aps(void *dummy);
 
-static int	hlt_cpus_mask;
 static int	hlt_logical_cpus;
 static struct	sysctl_ctx_list logical_cpu_clist;
 static u_int	bootMP_size;
@@ -1067,8 +1067,15 @@
 mp_grab_cpu_hlt(void)
 {
 	u_int mask = PCPU_GET(cpumask);
+#ifdef MP_WATCHDOG
+	u_int cpuid = PCPU_GET(cpuid);
+#endif
 	int retval;
 
+#ifdef MP_WATCHDOG
+	ap_watchdog(cpuid);
+#endif
+
 	retval = mask & hlt_cpus_mask;
 	while (mask & hlt_cpus_mask)
 		__asm __volatile("sti; hlt" : : : "memory");

==== //depot/projects/netperf_socket/sys/amd64/amd64/pmap.c#27 (text+ko) ====

@@ -75,7 +75,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.495 2004/08/28 00:49:54 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.496 2004/08/30 03:52:04 alc Exp $");
 
 /*
  *	Manages physical address maps.
@@ -2451,7 +2451,7 @@
 	pv_entry_t pv, npv;
 
 #ifdef PMAP_REMOVE_PAGES_CURPROC_ONLY
-	if (!curthread || (pmap != vmspace_pmap(curthread->td_proc->p_vmspace))) {
+	if (pmap != vmspace_pmap(curthread->td_proc->p_vmspace)) {
 		printf("warning: pmap_remove_pages called with non-current pmap\n");
 		return;
 	}

==== //depot/projects/netperf_socket/sys/amd64/amd64/trap.c#10 (text+ko) ====

@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/trap.c,v 1.279 2004/08/16 22:56:20 peter Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/trap.c,v 1.281 2004/08/31 07:34:53 julian Exp $");
 
 /*
  * AMD64 Trap and System call handling
@@ -259,7 +259,7 @@
 
 		case T_PAGEFLT:		/* page fault */
 			if (td->td_pflags & TDP_SA)
-				thread_user_enter(p, td);
+				thread_user_enter(td);
 			i = trap_pfault(&frame, TRUE);
 			if (i == -1)
 				goto userout;
@@ -471,9 +471,6 @@
 	userret(td, &frame, sticks);
 	mtx_assert(&Giant, MA_NOTOWNED);
 userout:
-#ifdef DIAGNOSTIC
-	cred_free_thread(td);
-#endif
 out:
 	return;
 }
@@ -698,7 +695,7 @@
 	if (td->td_ucred != p->p_ucred) 
 		cred_update_thread(td);
 	if (p->p_flag & P_SA)
-		thread_user_enter(p, td);
+		thread_user_enter(td);
 	params = (caddr_t)frame.tf_rsp + sizeof(register_t);
 	code = frame.tf_rax;
 	orig_tf_rflags = frame.tf_rflags;
@@ -830,9 +827,6 @@
 
 	PTRACESTOP_SC(p, td, S_PT_SCX);
 
-#ifdef DIAGNOSTIC
-	cred_free_thread(td);
-#endif
 	WITNESS_WARN(WARN_PANIC, NULL, "System call %s returning",
 	    (code >= 0 && code < SYS_MAXSYSCALL) ? syscallnames[code] : "???");
 	mtx_assert(&sched_lock, MA_NOTOWNED);

==== //depot/projects/netperf_socket/sys/amd64/ia32/ia32_syscall.c#2 (text+ko) ====

@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/ia32/ia32_syscall.c,v 1.6 2003/11/17 08:58:14 peter Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/ia32/ia32_syscall.c,v 1.7 2004/08/31 06:12:12 julian Exp $");
 
 /*
  * 386 Trap and System call handling
@@ -247,9 +247,6 @@
 	 */
 	STOPEVENT(p, S_SCX, code);
 
-#ifdef DIAGNOSTIC
-	cred_free_thread(td);
-#endif
 	WITNESS_WARN(WARN_PANIC, NULL, "System call %s returning",
 	    (code >= 0 && code < SYS_MAXSYSCALL) ? freebsd32_syscallnames[code] : "???");
 	mtx_assert(&sched_lock, MA_NOTOWNED);

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

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_machdep.c,v 1.3 2004/08/24 20:52:52 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_machdep.c,v 1.4 2004/09/01 02:11:27 julian Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -503,7 +503,7 @@
 	 */
 	mtx_lock_spin(&sched_lock);
 	TD_SET_CAN_RUN(td2);
-	setrunqueue(td2);
+	setrunqueue(td2, SRQ_BORING);
 	mtx_unlock_spin(&sched_lock);
 
 	td->td_retval[0] = p2->p_pid;

==== //depot/projects/netperf_socket/sys/boot/common/Makefile.inc#3 (text+ko) ====

@@ -1,17 +1,18 @@
-# $FreeBSD: src/sys/boot/common/Makefile.inc,v 1.17 2004/02/07 11:05:10 ru Exp $
+# $FreeBSD: src/sys/boot/common/Makefile.inc,v 1.19 2004/08/29 00:48:41 iedowse Exp $
 
 SRCS+=	bcache.c boot.c commands.c console.c devopen.c interp.c 
 SRCS+=	interp_backslash.c interp_parse.c ls.c misc.c 
 SRCS+=	module.c panic.c
 
 .if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64"
-SRCS+=	load_elf32.c load_elf64.c
+SRCS+=	load_elf32.c load_elf32_obj.c load_elf64.c load_elf64_obj.c
+SRCS+=	reloc_elf32.c reloc_elf64.c
 .endif
 .if ${MACHINE_ARCH} == "powerpc"
-SRCS+=	load_elf32.c
+SRCS+=	load_elf32.c reloc_elf32.c
 .endif
 .if ${MACHINE_ARCH} == "sparc64" || ${MACHINE_ARCH} == "ia64" || ${MACHINE_ARCH} == "alpha"
-SRCS+=	load_elf64.c
+SRCS+=	load_elf64.c reloc_elf64.c
 .endif
 
 .if defined(LOADER_NET_SUPPORT)

==== //depot/projects/netperf_socket/sys/boot/common/bootstrap.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/boot/common/bootstrap.h,v 1.38 2003/05/01 03:56:29 peter Exp $
+ * $FreeBSD: src/sys/boot/common/bootstrap.h,v 1.41 2004/08/29 00:48:41 iedowse Exp $
  */
 
 #include <sys/types.h>
@@ -76,6 +76,9 @@
 void	hexdump(caddr_t region, size_t len);
 size_t	strlenout(vm_offset_t str);
 char	*strdupout(vm_offset_t str);
+void	kern_bzero(vm_offset_t dest, size_t len);
+int	kern_pread(int fd, vm_offset_t dest, size_t len, off_t off);
+void	*alloc_pread(int fd, off_t off, size_t len);
 
 /* bcache.c */
 int	bcache_init(u_int nblks, size_t bsize);
@@ -232,7 +235,19 @@
 
 /* MI module loaders */
 #ifdef __elfN
+/* Relocation types. */
+#define ELF_RELOC_REL	1
+#define ELF_RELOC_RELA	2
+
+struct elf_file;
+typedef Elf_Addr (symaddr_fn)(struct elf_file *ef, Elf_Word symidx);
+
 int	__elfN(loadfile)(char *filename, u_int64_t dest, struct preloaded_file **result);
+int	__elfN(obj_loadfile)(char *filename, u_int64_t dest,
+	    struct preloaded_file **result);
+int	__elfN(reloc)(struct elf_file *ef, symaddr_fn *symaddr,
+	    const void *reldata, int reltype, Elf_Addr relbase,
+	    Elf_Addr dataaddr, void *data, size_t len);
 #endif
 
 /*

==== //depot/projects/netperf_socket/sys/boot/common/load_elf.c#3 (text+ko) ====

@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/common/load_elf.c,v 1.30 2004/03/11 10:07:24 bde Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/common/load_elf.c,v 1.32 2004/08/28 23:03:05 iedowse Exp $");
 
 #include <sys/param.h>
 #include <sys/exec.h>
@@ -58,6 +58,8 @@
     Elf_Hashelt	nchains;
     Elf_Hashelt	*buckets;
     Elf_Hashelt	*chains;
+    Elf_Rel	*rel;
+    size_t	relsz;
     Elf_Rela	*rela;
     size_t	relasz;
     char	*strtab;
@@ -71,11 +73,10 @@
 
 static int __elfN(loadimage)(struct preloaded_file *mp, elf_file_t ef, u_int64_t loadaddr);
 static int __elfN(lookup_symbol)(struct preloaded_file *mp, elf_file_t ef, const char* name, Elf_Sym* sym);
-#ifdef __sparc__
-static void __elfN(reloc_ptr)(struct preloaded_file *mp, elf_file_t ef,
-    void *p, void *val, size_t len);
-#endif
+static int __elfN(reloc_ptr)(struct preloaded_file *mp, elf_file_t ef,
+    Elf_Addr p, void *val, size_t len);
 static int __elfN(parse_modmetadata)(struct preloaded_file *mp, elf_file_t ef);
+static symaddr_fn __elfN(symaddr);
 static char	*fake_modname(const char *name);
 
 const char	*__elfN(kerneltype) = "elf kernel";
@@ -241,10 +242,8 @@
     int		ret;
     vm_offset_t firstaddr;
     vm_offset_t lastaddr;
-    void	*buf;
-    size_t	resid, chunk;
+    size_t	chunk;
     ssize_t	result;
-    vm_offset_t	dest;
     Elf_Addr	ssym, esym;
     Elf_Dyn	*dp;
     Elf_Addr	adp;
@@ -305,14 +304,10 @@
 			       phdr[i].p_vaddr + off, fpcopy);
 	}
 	if (phdr[i].p_filesz > fpcopy) {
-	    if (lseek(ef->fd, (off_t)(phdr[i].p_offset + fpcopy),
-		      SEEK_SET) == -1) {
-		printf("\nelf" __XSTRING(__ELF_WORD_SIZE) "_loadexec: cannot seek\n");
-		goto out;
-	    }
-	    if (archsw.arch_readin(ef->fd, phdr[i].p_vaddr + off + fpcopy,
-		phdr[i].p_filesz - fpcopy) != (ssize_t)(phdr[i].p_filesz - fpcopy)) {
-		printf("\nelf" __XSTRING(__ELF_WORD_SIZE) "_loadexec: archsw.readin failed\n");
+	    if (kern_pread(ef->fd, phdr[i].p_vaddr + off + fpcopy,
+		phdr[i].p_filesz - fpcopy, phdr[i].p_offset + fpcopy) != 0) {
+		printf("\nelf" __XSTRING(__ELF_WORD_SIZE)
+		    "_loadimage: read failed\n");
 		goto out;
 	    }
 	}
@@ -324,22 +319,8 @@
 		(long)(phdr[i].p_vaddr + off + phdr[i].p_memsz - 1));
 #endif
 
-	    /* no archsw.arch_bzero */
-	    buf = malloc(PAGE_SIZE);
-	    if (buf == NULL) {
-		printf("\nelf" __XSTRING(__ELF_WORD_SIZE) "_loadimage: malloc() failed\n");
-		goto out;
-	    }
-	    bzero(buf, PAGE_SIZE);
-	    resid = phdr[i].p_memsz - phdr[i].p_filesz;
-	    dest = phdr[i].p_vaddr + off + phdr[i].p_filesz;
-	    while (resid > 0) {
-		chunk = min(PAGE_SIZE, resid);
-		archsw.arch_copyin(buf, dest, chunk);
-		resid -= chunk;
-		dest += chunk;
-	    }
-	    free(buf);
+	    kern_bzero(phdr[i].p_vaddr + off + phdr[i].p_filesz,
+		phdr[i].p_memsz - phdr[i].p_filesz);
 	}
 #ifdef ELF_VERBOSE
 	printf("\n");
@@ -361,16 +342,10 @@
     chunk = ehdr->e_shnum * ehdr->e_shentsize;
     if (chunk == 0 || ehdr->e_shoff == 0)
 	goto nosyms;
-    shdr = malloc(chunk);
-    if (shdr == NULL)
-	goto nosyms;
-    if (lseek(ef->fd, (off_t)ehdr->e_shoff, SEEK_SET) == -1) {
-	printf("\nelf" __XSTRING(__ELF_WORD_SIZE) "_loadimage: cannot lseek() to section headers");
-	goto nosyms;
-    }
-    result = read(ef->fd, shdr, chunk);
-    if (result < 0 || (size_t)result != chunk) {
-	printf("\nelf" __XSTRING(__ELF_WORD_SIZE) "_loadimage: read section headers failed");
+    shdr = alloc_pread(ef->fd, ehdr->e_shoff, chunk);
+    if (shdr == NULL) {
+	printf("\nelf" __XSTRING(__ELF_WORD_SIZE)
+	    "_loadimage: failed to read section headers");
 	goto nosyms;
     }
     symtabindex = -1;
@@ -507,6 +482,12 @@
 	case DT_SYMTAB:
 	    ef->symtab = (Elf_Sym*)(uintptr_t)(dp[i].d_un.d_ptr + off);
 	    break;
+	case DT_REL:
+	    ef->rel = (Elf_Rel *)(uintptr_t)(dp[i].d_un.d_ptr + off);
+	    break;
+	case DT_RELSZ:
+	    ef->relsz = dp[i].d_un.d_val;
+	    break;
 	case DT_RELA:
 	    ef->rela = (Elf_Rela *)(uintptr_t)(dp[i].d_un.d_ptr + off);
 	    break;
@@ -589,7 +570,7 @@
     struct mod_version mver;
     Elf_Sym sym;
     char *s;
-    int modcnt, minfolen;
+    int error, modcnt, minfolen;
     Elf_Addr v, p, p_stop;
 
     if (__elfN(lookup_symbol)(fp, ef, "__start_set_modmetadata_set", &sym) != 0)
@@ -602,25 +583,31 @@
     modcnt = 0;
     while (p < p_stop) {
 	COPYOUT(p, &v, sizeof(v));
-#ifdef __sparc64__
-	__elfN(reloc_ptr)(fp, ef, p, &v, sizeof(v));
-#else
-	v += ef->off;
-#endif
+	error = __elfN(reloc_ptr)(fp, ef, p, &v, sizeof(v));
+	if (error == EOPNOTSUPP)
+	    v += ef->off;
+	else if (error != 0)
+	    return (error);
 #if defined(__i386__) && __ELF_WORD_SIZE == 64
 	COPYOUT(v, &md64, sizeof(md64));
+	error = __elfN(reloc_ptr)(fp, ef, v, &md64, sizeof(md64));
+	if (error == EOPNOTSUPP) {
+	    md64.md_cval += ef->off;
+	    md64.md_data += ef->off;
+	} else if (error != 0)
+	    return (error);
 	md.md_version = md64.md_version;
 	md.md_type = md64.md_type;
-	md.md_cval = (const char *)(uintptr_t)(md64.md_cval + ef->off);
-	md.md_data = (void *)(uintptr_t)(md64.md_data + ef->off);
+	md.md_cval = (const char *)(uintptr_t)md64.md_cval;
+	md.md_data = (void *)(uintptr_t)md64.md_data;
 #else
 	COPYOUT(v, &md, sizeof(md));
-#ifdef __sparc64__
-	__elfN(reloc_ptr)(fp, ef, v, &md, sizeof(md));
-#else
-	md.md_cval += ef->off;
-	md.md_data += ef->off;
-#endif
+	error = __elfN(reloc_ptr)(fp, ef, v, &md, sizeof(md));
+	if (error == EOPNOTSUPP) {
+	    md.md_cval += ef->off;
+	    md.md_data += ef->off;
+	} else if (error != 0)
+	    return (error);
 #endif
 	p += sizeof(Elf_Addr);
 	switch(md.md_type) {
@@ -713,29 +700,53 @@
     return ENOENT;
 }
 
-#ifdef __sparc__
 /*
- * Apply any intra-module relocations to the value. *p is the load address
+ * Apply any intra-module relocations to the value. p is the load address
  * of the value and val/len is the value to be modified. This does NOT modify
  * the image in-place, because this is done by kern_linker later on.
+ *
+ * Returns EOPNOTSUPP if no relocation method is supplied.
  */
-static void
+static int
 __elfN(reloc_ptr)(struct preloaded_file *mp, elf_file_t ef,
-    void *p, void *val, size_t len)
+    Elf_Addr p, void *val, size_t len)
 {
-	Elf_Addr off = (Elf_Addr)p - ef->off, word;
 	size_t n;
-	Elf_Rela r;
+	Elf_Rela a;
+	Elf_Rel r;
+	int error;
+
+	/*
+	 * The kernel is already relocated, but we still want to apply
+	 * offset adjustments.
+	 */
+	if (ef->kernel)
+		return (EOPNOTSUPP);
+
+	for (n = 0; n < ef->relsz / sizeof(r); n++) {
+		COPYOUT(ef->rel + n, &r, sizeof(r));
 
-	for (n = 0; n < ef->relasz / sizeof(r); n++) {
-		COPYOUT(ef->rela + n, &r, sizeof(r));
+		error = __elfN(reloc)(ef, __elfN(symaddr), &r, ELF_RELOC_REL,
+		    ef->off, p, val, len);
+		if (error != 0)
+			return (error);
+	}
+	for (n = 0; n < ef->relasz / sizeof(a); n++) {
+		COPYOUT(ef->rela + n, &a, sizeof(a));
 
-		if (r.r_offset >= off && r.r_offset < off + len &&
-		    ELF_R_TYPE(r.r_info) == R_SPARC_RELATIVE) {
-			word = ef->off + r.r_addend;
-			bcopy(&word, (char *)val + (r.r_offset - off),
-			    sizeof(word));
-		}
+		error = __elfN(reloc)(ef, __elfN(symaddr), &a, ELF_RELOC_RELA,
+		    ef->off, p, val, len);
+		if (error != 0)
+			return (error);
 	}
+
+	return (0);
 }
-#endif
+
+static Elf_Addr
+__elfN(symaddr)(struct elf_file *ef, Elf_Word symidx)
+{
+
+	/* Symbol lookup by index not required here. */
+	return (0);
+}

==== //depot/projects/netperf_socket/sys/boot/common/misc.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/common/misc.c,v 1.8 2003/08/25 23:30:41 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/common/misc.c,v 1.9 2004/08/28 14:57:34 iedowse Exp $");
 
 #include <string.h>
 #include <stand.h>
@@ -93,6 +93,74 @@
     return(result);
 }
 
+/* Zero a region in kernel space. */
+void
+kern_bzero(vm_offset_t dest, size_t len)
+{
+	char buf[256];
+	size_t chunk, resid;
+
+	bzero(buf, sizeof(buf));
+	resid = len;
+	while (resid > 0) {
+		chunk = min(sizeof(buf), resid);
+		archsw.arch_copyin(buf, dest, chunk);
+		resid -= chunk;
+		dest += chunk;
+	}
+}
+
+/*
+ * Read the specified part of a file to kernel space.  Unlike regular
+ * pread, the file pointer is advanced to the end of the read data,
+ * and it just returns 0 if successful.
+ */
+int
+kern_pread(int fd, vm_offset_t dest, size_t len, off_t off)
+{
+	ssize_t nread;
+
+	if (lseek(fd, off, SEEK_SET) == -1) {
+		printf("\nlseek failed\n");
+		return (-1);
+	}
+	nread = archsw.arch_readin(fd, dest, len);
+	if (nread != len) {
+		printf("\nreadin failed\n");
+		return (-1);
+	}
+	return (0);
+}
+
+/*
+ * Read the specified part of a file to a malloced buffer.  The file
+ * pointer is advanced to the end of the read data.
+ */
+void *
+alloc_pread(int fd, off_t off, size_t len)
+{
+	void *buf;
+	ssize_t nread;
+
+	buf = malloc(len);
+	if (buf == NULL) {
+		printf("\nmalloc(%d) failed\n", (int)len);
+		return (NULL);
+	}
+	if (lseek(fd, off, SEEK_SET) == -1) {
+		printf("\nlseek failed\n");
+		free(buf);
+		return (NULL);
+	}
+	nread = read(fd, buf, len);
+	if (nread != len) {
+		printf("\nread failed\n");
+		free(buf);
+		return (NULL);
+	}
+	return (buf);
+}
+
 /*
  * Display a region in traditional hexdump format.
  */

==== //depot/projects/netperf_socket/sys/boot/i386/libi386/elf32_freebsd.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/elf32_freebsd.c,v 1.13 2003/08/25 23:28:31 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/elf32_freebsd.c,v 1.14 2004/08/29 00:48:41 iedowse Exp $");
 
 #include <sys/param.h>
 #include <sys/exec.h>
@@ -40,8 +40,10 @@
 #include "btxv86.h"
 
 static int	elf32_exec(struct preloaded_file *amp);
+static int	elf32_obj_exec(struct preloaded_file *amp);
 
 struct file_format i386_elf = { elf32_loadfile, elf32_exec };
+struct file_format i386_elf_obj = { elf32_obj_loadfile, elf32_obj_exec };
 
 /*
  * There is an a.out kernel and one or more a.out modules loaded.  
@@ -74,3 +76,9 @@
 
     panic("exec returned");
 }
+
+static int
+elf32_obj_exec(struct preloaded_file *fp)
+{
+	return (EFTYPE);
+}

==== //depot/projects/netperf_socket/sys/boot/i386/libi386/elf64_freebsd.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/elf64_freebsd.c,v 1.14 2003/08/25 23:28:31 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/elf64_freebsd.c,v 1.15 2004/08/29 00:48:41 iedowse Exp $");
 
 #define __ELF_WORD_SIZE 64
 #include <sys/param.h>
@@ -41,8 +41,10 @@
 #include "btxv86.h"
 
 static int	elf64_exec(struct preloaded_file *amp);
+static int	elf64_obj_exec(struct preloaded_file *amp);
 
 struct file_format amd64_elf = { elf64_loadfile, elf64_exec };
+struct file_format amd64_elf_obj = { elf64_obj_loadfile, elf64_obj_exec };
 
 #define PG_V	0x001
 #define PG_RW	0x002
@@ -116,3 +118,9 @@
 
     panic("exec returned");
 }
+
+static int
+elf64_obj_exec(struct preloaded_file *fp)
+{
+	return (EFTYPE);
+}

==== //depot/projects/netperf_socket/sys/boot/i386/loader/conf.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/loader/conf.c,v 1.24 2003/08/25 23:28:32 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/loader/conf.c,v 1.25 2004/08/29 00:48:42 iedowse Exp $");
 
 #include <stand.h>
 #include <bootstrap.h>
@@ -83,11 +83,15 @@
  * rather than reading the file go first.
  */
 extern struct file_format	i386_elf;
+extern struct file_format	i386_elf_obj;
 extern struct file_format	amd64_elf;
+extern struct file_format	amd64_elf_obj;
 
 struct file_format *file_formats[] = {
     &i386_elf,
+    &i386_elf_obj,
     &amd64_elf,
+    &amd64_elf_obj,
     NULL
 };
 

==== //depot/projects/netperf_socket/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.56 2003/11/08 10:56:57 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.57 2004/08/30 20:14:21 gibbs Exp $");

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



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