PERFORCE change 117177 for review

John Baldwin jhb at FreeBSD.org
Mon Apr 2 12:32:23 UTC 2007


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

Change 117177 by jhb at jhb_mutex on 2007/04/02 12:31:20

	IFC @117176.

Affected files ...

.. //depot/projects/smpng/sys/amd64/amd64/support.S#19 integrate
.. //depot/projects/smpng/sys/conf/NOTES#140 integrate
.. //depot/projects/smpng/sys/conf/options#139 integrate
.. //depot/projects/smpng/sys/dev/acpica/acpi_ec.c#44 integrate
.. //depot/projects/smpng/sys/dev/ahb/ahb.c#18 integrate
.. //depot/projects/smpng/sys/dev/arcmsr/arcmsr.c#15 integrate
.. //depot/projects/smpng/sys/dev/ed/if_ed_pccard.c#39 integrate
.. //depot/projects/smpng/sys/dev/firewire/fwohci_pci.c#40 integrate
.. //depot/projects/smpng/sys/dev/ipmi/ipmi_pci.c#3 integrate
.. //depot/projects/smpng/sys/dev/isp/isp_freebsd.c#54 integrate
.. //depot/projects/smpng/sys/dev/isp/isp_freebsd.h#40 integrate
.. //depot/projects/smpng/sys/dev/isp/isp_library.c#11 integrate
.. //depot/projects/smpng/sys/dev/isp/isp_library.h#7 integrate
.. //depot/projects/smpng/sys/dev/isp/isp_pci.c#54 integrate
.. //depot/projects/smpng/sys/dev/isp/isp_sbus.c#25 integrate
.. //depot/projects/smpng/sys/dev/mxge/if_mxge.c#14 integrate
.. //depot/projects/smpng/sys/dev/pci/pci.c#89 integrate
.. //depot/projects/smpng/sys/dev/pci/pci_pci.c#33 integrate
.. //depot/projects/smpng/sys/dev/pci/pcireg.h#22 integrate
.. //depot/projects/smpng/sys/dev/sk/if_sk.c#12 integrate
.. //depot/projects/smpng/sys/dev/sk/if_skreg.h#7 integrate
.. //depot/projects/smpng/sys/dev/sound/midi/midi.c#15 integrate
.. //depot/projects/smpng/sys/dev/sound/pcm/channel.c#40 integrate
.. //depot/projects/smpng/sys/dev/sound/pcm/mixer.c#27 integrate
.. //depot/projects/smpng/sys/dev/sound/usb/uaudio.c#18 integrate
.. //depot/projects/smpng/sys/dev/usb/if_aue.c#49 integrate
.. //depot/projects/smpng/sys/dev/usb/if_axe.c#29 integrate
.. //depot/projects/smpng/sys/dev/usb/ubser.c#13 integrate
.. //depot/projects/smpng/sys/gnu/fs/xfs/FreeBSD/support/mrlock.c#2 integrate
.. //depot/projects/smpng/sys/gnu/fs/xfs/FreeBSD/support/mrlock.h#2 integrate
.. //depot/projects/smpng/sys/i386/acpica/acpi_machdep.c#26 integrate
.. //depot/projects/smpng/sys/i386/i386/support.s#24 integrate
.. //depot/projects/smpng/sys/i4b/layer1/ifpnp/i4b_ifpnp_avm.c#11 integrate
.. //depot/projects/smpng/sys/i4b/layer1/ihfc/i4b_ihfc_pnp.c#8 integrate
.. //depot/projects/smpng/sys/i4b/layer1/isic/i4b_avm_a1.c#7 integrate
.. //depot/projects/smpng/sys/i4b/layer1/isic/i4b_isic_pnp.c#10 integrate
.. //depot/projects/smpng/sys/i4b/layer1/isic/i4b_itk_ix1.c#8 integrate
.. //depot/projects/smpng/sys/i4b/layer1/isic/i4b_tel_s016.c#8 integrate
.. //depot/projects/smpng/sys/i4b/layer1/isic/i4b_tel_s0163.c#7 integrate
.. //depot/projects/smpng/sys/kern/kern_sx.c#45 integrate
.. //depot/projects/smpng/sys/kern/subr_witness.c#161 integrate
.. //depot/projects/smpng/sys/kern/vfs_lookup.c#42 integrate
.. //depot/projects/smpng/sys/kern/vfs_mount.c#71 integrate
.. //depot/projects/smpng/sys/kern/vfs_subr.c#139 integrate
.. //depot/projects/smpng/sys/modules/cryptodev/Makefile#2 integrate
.. //depot/projects/smpng/sys/netgraph/ng_base.c#49 integrate
.. //depot/projects/smpng/sys/netinet/sctp_auth.c#6 integrate
.. //depot/projects/smpng/sys/netinet/sctp_constants.h#7 integrate
.. //depot/projects/smpng/sys/netinet/sctp_indata.c#8 integrate
.. //depot/projects/smpng/sys/netinet/sctp_input.c#8 integrate
.. //depot/projects/smpng/sys/netinet/sctp_os_bsd.h#7 integrate
.. //depot/projects/smpng/sys/netinet/sctp_output.c#8 integrate
.. //depot/projects/smpng/sys/netinet/sctp_pcb.c#7 integrate
.. //depot/projects/smpng/sys/netinet/sctp_pcb.h#6 integrate
.. //depot/projects/smpng/sys/netinet/sctp_structs.h#7 integrate
.. //depot/projects/smpng/sys/netinet/sctp_sysctl.c#2 integrate
.. //depot/projects/smpng/sys/netinet/sctp_sysctl.h#2 integrate
.. //depot/projects/smpng/sys/netinet/sctp_uio.h#7 integrate
.. //depot/projects/smpng/sys/netinet/sctp_usrreq.c#8 integrate
.. //depot/projects/smpng/sys/netinet/sctputil.c#9 integrate
.. //depot/projects/smpng/sys/netinet6/in6_src.c#29 integrate
.. //depot/projects/smpng/sys/netinet6/sctp6_usrreq.c#7 integrate
.. //depot/projects/smpng/sys/powerpc/conf/GENERIC#42 integrate
.. //depot/projects/smpng/sys/powerpc/conf/NOTES#7 integrate
.. //depot/projects/smpng/sys/powerpc/powermac/uninorth.c#12 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/extintr.c#7 delete
.. //depot/projects/smpng/sys/sys/_sx.h#1 branch
.. //depot/projects/smpng/sys/sys/mount.h#59 integrate
.. //depot/projects/smpng/sys/sys/sleepqueue.h#12 integrate
.. //depot/projects/smpng/sys/sys/sx.h#25 integrate
.. //depot/projects/smpng/sys/sys/vnode.h#79 integrate

Differences ...

==== //depot/projects/smpng/sys/amd64/amd64/support.S#19 (text+ko) ====

@@ -27,7 +27,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/amd64/support.S,v 1.124 2007/03/30 19:33:52 jkim Exp $
+ * $FreeBSD: src/sys/amd64/amd64/support.S,v 1.126 2007/03/31 01:47:37 jkim Exp $
  */
 
 #include "opt_ddb.h"
@@ -671,37 +671,18 @@
 	incl	%eax
 	ret
 
-/*
- * Support for BB-profiling (gcc -a).  The kernbb program will extract
- * the data from the kernel.
- */
-
-	.data
-	ALIGN_DATA
-	.globl bbhead
-bbhead:
-	.quad 0
+/*****************************************************************************/
+/* linux_futex support                                                       */
+/*****************************************************************************/
 
-	.text
-NON_GPROF_ENTRY(__bb_init_func)
-	movq	$1,(%rdi)
-	movq	bbhead,%rax
-	movq	%rax,32(%rdi)
-	movq	%rdi,bbhead
-	NON_GPROF_RET
-
-	.text
-
 futex_fault:
-	movq	PCPU(CURPCB),%rdx
-	movq	$0,PCB_ONFAULT(%rdx)
+	movq	$0,PCB_ONFAULT(%rcx)
 	movq	$-EFAULT,%rax
 	ret
 
-/* int futex_xchgl(int oparg, caddr_t uaddr, int *oldval); */
 ENTRY(futex_xchgl)
-	movq	PCPU(CURPCB),%r11
-	movq	$futex_fault,PCB_ONFAULT(%r11)
+	movq	PCPU(CURPCB),%rcx
+	movq	$futex_fault,PCB_ONFAULT(%rcx)
 
 	movq	$VM_MAXUSER_ADDRESS-4,%rax
 	cmpq	%rax,%rsi
@@ -713,13 +694,12 @@
 	xchgl	%edi,(%rsi)
 	movl	%edi,(%rdx)
 	xorl	%eax,%eax
-	movq	%rax,PCB_ONFAULT(%r11)
+	movq	%rax,PCB_ONFAULT(%rcx)
 	ret
 
-/* int futex_addl(int oparg, caddr_t uaddr, int *oldval); */
 ENTRY(futex_addl)
-	movq	PCPU(CURPCB),%r11
-	movq	$futex_fault,PCB_ONFAULT(%r11)
+	movq	PCPU(CURPCB),%rcx
+	movq	$futex_fault,PCB_ONFAULT(%rcx)
 
 	movq	$VM_MAXUSER_ADDRESS-4,%rax
 	cmpq	%rax,%rsi
@@ -731,5 +711,24 @@
 	xaddl	%edi,(%rsi)
 	movl	%edi,(%rdx)
 	xorl	%eax,%eax
-	movq	%rax,PCB_ONFAULT(%r11)
+	movq	%rax,PCB_ONFAULT(%rcx)
 	ret
+
+/*
+ * Support for BB-profiling (gcc -a).  The kernbb program will extract
+ * the data from the kernel.
+ */
+
+	.data
+	ALIGN_DATA
+	.globl bbhead
+bbhead:
+	.quad 0
+
+	.text
+NON_GPROF_ENTRY(__bb_init_func)
+	movq	$1,(%rdi)
+	movq	bbhead,%rax
+	movq	%rax,32(%rdi)
+	movq	%rdi,bbhead
+	NON_GPROF_RET

==== //depot/projects/smpng/sys/conf/NOTES#140 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/NOTES,v 1.1416 2007/03/26 09:10:28 yar Exp $
+# $FreeBSD: src/sys/conf/NOTES,v 1.1418 2007/04/02 01:04:20 mjacob Exp $
 #
 # NOTES -- Lines that can be cut/pasted into kernel and hints configs.
 #
@@ -214,6 +214,12 @@
 # to sleep rather than spinning.
 options 	ADAPTIVE_GIANT
 
+# ADAPTIVE_SX changes the behavior of sx locks to spin if the thread
+# that currently owns the lock is executing on another CPU.  Note that
+# in addition to enabling this option, individual sx locks must be
+# initialized with the SX_ADAPTIVESPIN flag.
+options 	ADAPTIVE_SX
+
 # MUTEX_NOINLINE forces mutex operations to call functions to perform each
 # operation rather than inlining the simple cases.  This can be used to
 # shrink the size of the kernel text segment.  Note that this behavior is
@@ -233,6 +239,13 @@
 # and WITNESS options.
 options 	RWLOCK_NOINLINE
 
+# SX_NOINLINE forces sx lock operations to call functions to perform each
+# operation rather than inlining the simple cases.  This can be used to
+# shrink the size of the kernel text segment.  Note that this behavior is
+# already implied by the INVARIANT_SUPPORT, INVARIANTS, KTR, LOCK_PROFILING,
+# and WITNESS options.
+options 	SX_NOINLINE
+
 # SMP Debugging Options:
 #
 # PREEMPTION allows the threads that are in the kernel to be preempted
@@ -1521,9 +1534,13 @@
 #
 options 	ISP_TARGET_MODE=1
 #
-#	ISP_DEFAULT_ROLES	-	default role (none, target, init, both)
+#	ISP_DEFAULT_ROLES	-	default role
+#		none=0
+#		target=1
+#		initiator=2
+#		both=3			(not supported currently)
 #
-options 	ISP_DEFAULT_ROLES=3
+options 	ISP_DEFAULT_ROLES=2
 
 # Options used in dev/sym/ (Symbios SCSI driver).
 #options 	SYM_SETUP_LP_PROBE_MAP	#-Low Priority Probe Map (bits)

==== //depot/projects/smpng/sys/conf/options#139 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/options,v 1.583 2007/03/27 19:32:40 jhb Exp $
+# $FreeBSD: src/sys/conf/options,v 1.584 2007/03/31 23:23:41 jhb Exp $
 #
 #        On the handling of kernel options
 #
@@ -59,6 +59,7 @@
 
 # Miscellaneous options.
 ADAPTIVE_GIANT	opt_adaptive_mutexes.h
+ADAPTIVE_SX
 ALQ
 AUDIT		opt_global.h
 CODA_COMPAT_5	opt_coda.h
@@ -555,6 +556,7 @@
 REGRESSION		opt_global.h
 RESTARTABLE_PANICS	opt_global.h
 RWLOCK_NOINLINE		opt_global.h
+SX_NOINLINE		opt_global.h
 VFS_BIO_DEBUG		opt_global.h
 
 # These are VM related options

==== //depot/projects/smpng/sys/dev/acpica/acpi_ec.c#44 (text+ko) ====

@@ -136,12 +136,13 @@
  *****************************************************************************/
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_ec.c,v 1.72 2007/03/22 18:16:40 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_ec.c,v 1.73 2007/03/31 23:23:41 jhb Exp $");
 
 #include "opt_acpi.h"
 #include <sys/param.h>
 #include <sys/kernel.h>
 #include <sys/bus.h>
+#include <sys/lock.h>
 #include <sys/malloc.h>
 #include <sys/module.h>
 #include <sys/sx.h>

==== //depot/projects/smpng/sys/dev/ahb/ahb.c#18 (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/dev/ahb/ahb.c,v 1.39 2007/02/23 12:18:30 piso Exp $
+ * $FreeBSD: src/sys/dev/ahb/ahb.c,v 1.40 2007/04/01 16:55:31 netchild Exp $
  */
 
 #include <sys/param.h>
@@ -378,8 +378,10 @@
 		goto error_exit;
 
 	/* Enable our interrupt */
-	bus_setup_intr(dev, irq, INTR_TYPE_CAM|INTR_ENTROPY, NULL, ahbintr, 
-	    ahb, &ih);
+	if (bus_setup_intr(dev, irq, INTR_TYPE_CAM|INTR_ENTROPY, NULL, ahbintr, 
+	    ahb, &ih) != 0)
+		goto error_exit;
+
 	return (0);
 
 error_exit:

==== //depot/projects/smpng/sys/dev/arcmsr/arcmsr.c#15 (text+ko) ====

@@ -56,7 +56,7 @@
 **                                                       and cause g_vfs_done() read write error
 
 ******************************************************************************************
-* $FreeBSD: src/sys/dev/arcmsr/arcmsr.c,v 1.20 2007/03/12 05:10:29 mjacob Exp $
+* $FreeBSD: src/sys/dev/arcmsr/arcmsr.c,v 1.21 2007/04/02 03:31:37 scottl Exp $
 */
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1270,8 +1270,7 @@
 				, acb->pci_unit, error);
 		}
 		if((pccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG) {
-			xpt_freeze_devq(pccb->ccb_h.path, /*count*/1);
-			pccb->ccb_h.status |= (CAM_REQ_TOO_BIG|CAM_DEV_QFRZN);
+			pccb->ccb_h.status |= CAM_REQ_TOO_BIG;
 		}
 		arcmsr_srb_complete(srb, 0);
 		return;
@@ -1307,14 +1306,14 @@
 		arcmsr_srb_complete(srb, 0);
 		return;
 	}
-	pccb->ccb_h.status |= CAM_SIM_QUEUED;
 	if(acb->srboutstandingcount >= ARCMSR_MAX_OUTSTANDING_CMD) {
-		pccb->ccb_h.status &= ~CAM_STATUS_MASK;
-		pccb->ccb_h.status |= (CAM_REQUEUE_REQ|CAM_DEV_QFRZN);
+		xpt_freeze_simq(acb->psim, 1);
+		pccb->ccb_h.status = CAM_REQUEUE_REQ;
 		acb->acb_flags |= ACB_F_CAM_DEV_QFRZN;
 		arcmsr_srb_complete(srb, 0);
 		return;
 	}
+	pccb->ccb_h.status |= CAM_SIM_QUEUED;
 	arcmsr_build_srb(srb, dm_segs, nseg);
 	arcmsr_post_srb(acb, srb);
 	return;

==== //depot/projects/smpng/sys/dev/ed/if_ed_pccard.c#39 (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/dev/ed/if_ed_pccard.c,v 1.111 2007/02/23 12:18:38 piso Exp $
+ * $FreeBSD: src/sys/dev/ed/if_ed_pccard.c,v 1.112 2007/04/01 14:15:26 netchild Exp $
  */
 
 /*
@@ -541,7 +541,7 @@
 	    sc->chip_type == ED_CHIP_TYPE_DL10022) {
 		/* Probe for an MII bus, but ignore errors. */
 		ed_pccard_dl100xx_mii_reset(sc);
-		mii_phy_probe(dev, &sc->miibus, ed_ifmedia_upd,
+		(void)mii_phy_probe(dev, &sc->miibus, ed_ifmedia_upd,
 		    ed_ifmedia_sts);
 	} else if (sc->chip_type == ED_CHIP_TYPE_AX88190) {
 		ed_pccard_ax88x90_mii_reset(sc);

==== //depot/projects/smpng/sys/dev/firewire/fwohci_pci.c#40 (text+ko) ====

@@ -31,7 +31,7 @@
  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  * 
- * $FreeBSD: src/sys/dev/firewire/fwohci_pci.c,v 1.58 2007/03/19 03:41:27 simokawa Exp $
+ * $FreeBSD: src/sys/dev/firewire/fwohci_pci.c,v 1.59 2007/03/30 22:25:26 simokawa Exp $
  */
 
 #define BOUNCE_BUFFER_TEST	0
@@ -424,19 +424,18 @@
 				  FWOHCI_INTMASKCLR, OHCI_INT_EN);
 
 	if (sc->irq_res) {
-		int err = bus_teardown_intr(self, sc->irq_res, sc->ih);
-		if (err)
-			/* XXX or should we panic? */
-			device_printf(self, "Could not tear down irq, %d\n",
-				      err);
+		int err;
+		if (sc->ih) {
+			err = bus_teardown_intr(self, sc->irq_res, sc->ih);
+			if (err)
+				device_printf(self,
+					 "Could not tear down irq, %d\n", err);
 #if defined(__DragonFly__) || __FreeBSD_version < 500000
-		bus_teardown_intr(self, sc->irq_res, sc->ih_cam);
-		bus_teardown_intr(self, sc->irq_res, sc->ih_bio);
+			bus_teardown_intr(self, sc->irq_res, sc->ih_cam);
+			bus_teardown_intr(self, sc->irq_res, sc->ih_bio);
 #endif
-		sc->ih = NULL;
-	}
-
-	if (sc->irq_res) {
+			sc->ih = NULL;
+		}
 		bus_release_resource(self, SYS_RES_IRQ, 0, sc->irq_res);
 		sc->irq_res = NULL;
 	}

==== //depot/projects/smpng/sys/dev/ipmi/ipmi_pci.c#3 (text) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ipmi/ipmi_pci.c,v 1.2 2006/09/22 22:11:29 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ipmi/ipmi_pci.c,v 1.4 2007/03/31 21:39:02 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -185,7 +185,7 @@
 {
 
 	if (pci_get_class(dev) == PCIC_SERIALBUS &&
-	    pci_get_subclass(dev) == 0x07) {
+	    pci_get_subclass(dev) == PCIS_SERIALBUS_IPMI) {
 		device_set_desc(dev, "IPMI System Interface");
 		return (BUS_PROBE_GENERIC);
 	}
@@ -204,13 +204,13 @@
 
 	/* Interface is determined by progif. */
 	switch (pci_get_progif(dev)) {
-	case 0:
+	case PCIP_SERIALBUS_IPMI_SMIC:
 		iface = SMIC_MODE;
 		break;
-	case 1:
+	case PCIP_SERIALBUS_IPMI_KCS:
 		iface = KCS_MODE;
 		break;
-	case 2:
+	case PCIP_SERIALBUS_IPMI_BT:
 		iface = BT_MODE;
 		device_printf(dev, "BT interface unsupported\n");
 		return (ENXIO);
@@ -220,12 +220,9 @@
 		return (ENXIO);
 	}
 
-	/*
-	 * Bottom bit of bar indicates resouce type.  There should be
-	 * constants in pcireg.h for fields in a BAR.
-	 */
+	/* Check the BAR to determine our resource type. */
 	sc->ipmi_io_rid = PCIR_BAR(0);
-	if (pci_read_config(dev, PCIR_BAR(0), 4) & 0x1)
+	if (PCI_BAR_IO(pci_read_config(dev, PCIR_BAR(0), 4)))
 		type = SYS_RES_IOPORT;
 	else
 		type = SYS_RES_MEMORY;

==== //depot/projects/smpng/sys/dev/isp/isp_freebsd.c#54 (text+ko) ====

@@ -28,7 +28,7 @@
  * Platform (FreeBSD) dependent common attachment code for Qlogic adapters.
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/isp/isp_freebsd.c,v 1.136 2007/03/12 04:54:30 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp_freebsd.c,v 1.137 2007/04/02 01:04:20 mjacob Exp $");
 #include <dev/isp/isp_freebsd.h>
 #include <sys/unistd.h>
 #include <sys/kthread.h>
@@ -382,6 +382,14 @@
 			retval = EINVAL;
 			break;
 		}
+		/*
+		 * XXX: Current
+		 */
+		if (nr == ISP_ROLE_BOTH) {
+			isp_prt(isp, ISP_LOGERR, "dual roles not supported");
+			retval = EINVAL;
+			break;
+		}
 		*(int *)addr = isp->isp_role;
 		isp->isp_role = nr;
 		/* FALLTHROUGH */
@@ -1133,7 +1141,7 @@
 static void
 isp_ledone(ispsoftc_t *isp, lun_entry_t *lep)
 {
-	const char lfmt[] = "now %sabled for target mode";
+	const char lfmt[] = "now %sabled for target mode\n";
 	union ccb *ccb;
 	uint32_t seq;
 	tstate_t *tptr;

==== //depot/projects/smpng/sys/dev/isp/isp_freebsd.h#40 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/isp_freebsd.h,v 1.102 2007/03/13 06:46:08 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/isp/isp_freebsd.h,v 1.104 2007/04/02 01:04:20 mjacob Exp $ */
 /*-
  * Qlogic ISP SCSI Host Adapter FreeBSD Wrapper Definitions
  *
@@ -532,4 +532,10 @@
 
 #include <dev/isp/isp_library.h>
 
+/*
+ * XXX: Temp
+ */
+#if	ISP_DEFAULT_ROLES == ISP_ROLE_BOTH
+#error	"Dual Role Temporarily Unsupported"
+#endif
 #endif	/* _ISP_FREEBSD_H */

==== //depot/projects/smpng/sys/dev/isp/isp_library.c#11 (text) ====

@@ -34,7 +34,7 @@
 #endif
 #ifdef	__FreeBSD__
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/isp/isp_library.c,v 1.12 2007/03/22 23:38:31 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp_library.c,v 1.13 2007/04/02 01:04:20 mjacob Exp $");
 #include <dev/isp/isp_freebsd.h>
 #endif
 #ifdef	__OpenBSD__
@@ -1499,12 +1499,12 @@
 void *
 isp_find_xs_tgt(ispsoftc_t *isp, uint32_t handle)
 {
-	if (handle == 0 || (handle & 0x8000) == 0 ||
-	    (handle & 0x7fff) > isp->isp_maxcmds) {
+	if (handle == 0 || IS_TARGET_HANDLE(handle) == 0 ||
+	    (handle & ISP_HANDLE_MASK) > isp->isp_maxcmds) {
 		isp_prt(isp, ISP_LOGERR, "bad handle in isp_find_xs_tgt");
 		return (NULL);
 	} else {
-		return (isp->isp_tgtlist[(handle & 0x7fff) - 1]);
+		return (isp->isp_tgtlist[(handle & ISP_HANDLE_MASK) - 1]);
 	}
 }
 
@@ -1515,7 +1515,7 @@
 	if (xs != NULL) {
 		for (i = 0; i < isp->isp_maxcmds; i++) {
 			if (isp->isp_tgtlist[i] == xs) {
-				return ((i+1) & 0x7fff);
+				return ((i+1) & ISP_HANDLE_MASK);
 			}
 		}
 	}
@@ -1525,12 +1525,12 @@
 void
 isp_destroy_tgt_handle(ispsoftc_t *isp, uint32_t handle)
 {
-	if (handle == 0 || (handle & 0x8000) == 0 ||
-	    (handle & 0x7fff) > isp->isp_maxcmds) {
+	if (handle == 0 || IS_TARGET_HANDLE(handle) == 0 ||
+	    (handle & ISP_HANDLE_MASK) > isp->isp_maxcmds) {
 		isp_prt(isp, ISP_LOGERR,
 		    "bad handle in isp_destroy_tgt_handle");
 	} else {
-		isp->isp_tgtlist[(handle & 0x7fff) - 1] = NULL;
+		isp->isp_tgtlist[(handle & ISP_HANDLE_MASK) - 1] = NULL;
 	}
 }
 

==== //depot/projects/smpng/sys/dev/isp/isp_library.h#7 (text) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/isp_library.h,v 1.7 2007/03/22 23:38:31 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/isp/isp_library.h,v 1.8 2007/04/02 01:04:20 mjacob Exp $ */
 /*-
  *  Copyright (c) 1997-2007 by Matthew Jacob
  *  All rights reserved.
@@ -128,6 +128,8 @@
 extern void isp_get_ct_hdr(ispsoftc_t *isp, ct_hdr_t *, ct_hdr_t *);
 extern void isp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *, ct_hdr_t *);
 
+#define	ISP_HANDLE_MASK		0x7fff
+
 #ifdef	ISP_TARGET_MODE
 #if	defined(__NetBSD__) || defined(__OpenBSD__)
 #include <dev/ic/isp_target.h>

==== //depot/projects/smpng/sys/dev/isp/isp_pci.c#54 (text+ko) ====

@@ -28,7 +28,7 @@
  * FreeBSD Version.
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/isp/isp_pci.c,v 1.141 2007/03/22 23:38:32 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp_pci.c,v 1.142 2007/04/02 01:04:20 mjacob Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1994,7 +1994,7 @@
 	cto->ct_scsi_status = 0;
 
 	pcs = (struct isp_pcisoftc *)isp;
-	dp = &pcs->dmaps[isp_handle_index(handle)];
+	dp = &pcs->dmaps[isp_handle_index(handle & ISP_HANDLE_MASK)];
 	if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) {
 		bus_dmamap_sync(pcs->dmat, *dp, BUS_DMASYNC_PREREAD);
 	} else {
@@ -2388,7 +2388,7 @@
 	isp = mp->isp;
 	rq = mp->rq;
 	pcs = (struct isp_pcisoftc *)mp->isp;
-	dp = &pcs->dmaps[isp_handle_index(rq->req_handle)];
+	dp = &pcs->dmaps[isp_handle_index(rq->req_handle & ISP_HANDLE_MASK)];
 	nxti = *mp->nxtip;
 
 	if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) {
@@ -2494,7 +2494,7 @@
 	isp = mp->isp;
 	rq = mp->rq;
 	pcs = (struct isp_pcisoftc *)mp->isp;
-	dp = &pcs->dmaps[isp_handle_index(rq->req_handle)];
+	dp = &pcs->dmaps[isp_handle_index(rq->req_handle & ISP_HANDLE_MASK)];
 	nxti = *mp->nxtip;
 
 	if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) {
@@ -2628,7 +2628,7 @@
 	isp = mp->isp;
 	rq = mp->rq;
 	pcs = (struct isp_pcisoftc *)mp->isp;
-	dp = &pcs->dmaps[isp_handle_index(rq->req_handle)];
+	dp = &pcs->dmaps[isp_handle_index(rq->req_handle & ISP_HANDLE_MASK)];
 	nxti = *mp->nxtip;
 
 	if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) {
@@ -2795,7 +2795,8 @@
 	if ((csio->ccb_h.flags & CAM_SCATTER_VALID) == 0) {
 		if ((csio->ccb_h.flags & CAM_DATA_PHYS) == 0) {
 			int error, s;
-			dp = &pcs->dmaps[isp_handle_index(rq->req_handle)];
+			dp = &pcs->dmaps[isp_handle_index(
+			    rq->req_handle & ISP_HANDLE_MASK)];
 			s = splsoftvm();
 			error = bus_dmamap_load(pcs->dmat, *dp,
 			    csio->data_ptr, csio->dxfer_len, eptr, mp, 0);
@@ -2880,7 +2881,8 @@
 isp_pci_dmateardown(ispsoftc_t *isp, XS_T *xs, uint32_t handle)
 {
 	struct isp_pcisoftc *pcs = (struct isp_pcisoftc *)isp;
-	bus_dmamap_t *dp = &pcs->dmaps[isp_handle_index(handle)];
+	bus_dmamap_t *dp;
+	dp = &pcs->dmaps[isp_handle_index(handle & ISP_HANDLE_MASK)];
 	if ((xs->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) {
 		bus_dmamap_sync(pcs->dmat, *dp, BUS_DMASYNC_POSTREAD);
 	} else {

==== //depot/projects/smpng/sys/dev/isp/isp_sbus.c#25 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/isp/isp_sbus.c,v 1.31 2007/03/28 16:34:11 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp_sbus.c,v 1.32 2007/04/02 01:04:20 mjacob Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -624,7 +624,7 @@
 	isp = mp->isp;
 	rq = mp->rq;
 	sbs = (struct isp_sbussoftc *)mp->isp;
-	dp = &sbs->dmaps[isp_handle_index(rq->req_handle)];
+	dp = &sbs->dmaps[isp_handle_index(rq->req_handle & ISP_HANDLE_MASK)];
 	nxti = *mp->nxtip;
 
 	if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) {
@@ -735,7 +735,8 @@
 	if ((csio->ccb_h.flags & CAM_SCATTER_VALID) == 0) {
 		if ((csio->ccb_h.flags & CAM_DATA_PHYS) == 0) {
 			int error, s;
-			dp = &sbs->dmaps[isp_handle_index(rq->req_handle)];
+			dp = &sbs->dmaps[isp_handle_index(
+			    rq->req_handle & ISP_HANDLE_MASK)];
 			s = splsoftvm();
 			error = bus_dmamap_load(sbs->dmat, *dp,
 			    csio->data_ptr, csio->dxfer_len, eptr, mp, 0);
@@ -809,7 +810,8 @@
 isp_sbus_dmateardown(ispsoftc_t *isp, XS_T *xs, uint32_t handle)
 {
 	struct isp_sbussoftc *sbs = (struct isp_sbussoftc *)isp;
-	bus_dmamap_t *dp = &sbs->dmaps[isp_handle_index(handle)];
+	bus_dmamap_t *dp;
+	dp = &sbs->dmaps[isp_handle_index(handle & ISP_HANDLE_MASK)];
 	if ((xs->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) {
 		bus_dmamap_sync(sbs->dmat, *dp, BUS_DMASYNC_POSTREAD);
 	} else {

==== //depot/projects/smpng/sys/dev/mxge/if_mxge.c#14 (text+ko) ====

@@ -32,7 +32,7 @@
 ***************************************************************************/
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/mxge/if_mxge.c,v 1.24 2007/03/27 15:55:32 gallatin Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mxge/if_mxge.c,v 1.25 2007/03/31 23:23:41 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -44,6 +44,7 @@
 #include <sys/malloc.h>
 #include <sys/kdb.h>
 #include <sys/kernel.h>
+#include <sys/lock.h>
 #include <sys/module.h>
 #include <sys/memrange.h>
 #include <sys/socket.h>

==== //depot/projects/smpng/sys/dev/pci/pci.c#89 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/pci/pci.c,v 1.345 2007/03/26 20:18:52 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/pci/pci.c,v 1.348 2007/03/31 21:39:02 jhb Exp $");
 
 #include "opt_bus.h"
 
@@ -72,7 +72,7 @@
 #endif
 
 static uint32_t		pci_mapbase(unsigned mapreg);
-static int		pci_maptype(unsigned mapreg);
+static const char	*pci_maptype(unsigned mapreg);
 static int		pci_mapsize(unsigned testval);
 static int		pci_maprange(unsigned mapreg);
 static void		pci_fixancient(pcicfgregs *cfg);
@@ -305,29 +305,24 @@
 static uint32_t
 pci_mapbase(uint32_t mapreg)
 {
-	int mask = 0x03;
-	if ((mapreg & 0x01) == 0)
-		mask = 0x0f;
-	return (mapreg & ~mask);
+
+	if (PCI_BAR_MEM(mapreg))
+		return (mapreg & PCIM_BAR_MEM_BASE);
+	else
+		return (mapreg & PCIM_BAR_IO_BASE);
 }
 
 /* return map type of memory or port map */
 
-static int
+static const char *
 pci_maptype(unsigned mapreg)
 {
-	static uint8_t maptype[0x10] = {
-		PCI_MAPMEM,		PCI_MAPPORT,
-		PCI_MAPMEM,		0,
-		PCI_MAPMEM,		PCI_MAPPORT,
-		0,			0,
-		PCI_MAPMEM|PCI_MAPMEMP,	PCI_MAPPORT,
-		PCI_MAPMEM|PCI_MAPMEMP, 0,
-		PCI_MAPMEM|PCI_MAPMEMP,	PCI_MAPPORT,
-		0,			0,
-	};
 
-	return (maptype[mapreg & 0x0f]);
+	if (PCI_BAR_IO(mapreg))
+		return ("I/O Port");
+	if (mapreg & PCIM_BAR_MEM_PREFETCH)
+		return ("Prefetchable Memory");
+	return ("Memory");
 }
 
 /* return log2 of map size decoded for memory or port map */
@@ -355,19 +350,21 @@
 pci_maprange(unsigned mapreg)
 {
 	int ln2range = 0;
-	switch (mapreg & 0x07) {
-	case 0x00:
-	case 0x01:
-	case 0x05:
+
+	if (PCI_BAR_IO(mapreg))
 		ln2range = 32;
-		break;
-	case 0x02:
-		ln2range = 20;
-		break;
-	case 0x04:
-		ln2range = 64;
-		break;
-	}
+	else
+		switch (mapreg & PCIM_BAR_MEM_TYPE) {
+		case PCIM_BAR_MEM_32:
+			ln2range = 32;
+			break;
+		case PCIM_BAR_MEM_1MB:
+			ln2range = 20;
+			break;
+		case PCIM_BAR_MEM_64:
+			ln2range = 64;
+			break;
+		}
 	return (ln2range);
 }
 
@@ -1062,7 +1059,7 @@
 	uint32_t offset, bit;
 
 	KASSERT(cfg->msix.msix_alloc > index, ("bogus index"));
-	offset = cfg->msix.msix_pba_offset + (index / 4) * 4;
+	offset = cfg->msix.msix_pba_offset + (index / 32) * 4;
 	bit = 1 << index % 32;
 	return (bus_read_4(cfg->msix.msix_pba_res, offset) & bit);
 }
@@ -1972,7 +1969,7 @@
 	testval = PCIB_READ_CONFIG(pcib, b, s, f, reg, 4);
 	PCIB_WRITE_CONFIG(pcib, b, s, f, reg, map, 4);
 
-	if (pci_maptype(map) & PCI_MAPMEM)
+	if (PCI_BAR_MEM(map))
 		type = SYS_RES_MEMORY;
 	else
 		type = SYS_RES_IOPORT;
@@ -1988,8 +1985,7 @@
 	 * areas to the type of memory involved.  Memory must be at least
 	 * 16 bytes in size, while I/O ranges must be at least 4.
 	 */
-	if ((testval & 0x1) == 0x1 &&
-	    (testval & 0x2) != 0)
+	if (PCI_BAR_IO(testval) && (testval & PCIM_BAR_IO_RESERVED) != 0)
 		return (barlen);
 	if ((type == SYS_RES_MEMORY && ln2size < 4) ||
 	    (type == SYS_RES_IOPORT && ln2size < 2))
@@ -1999,7 +1995,7 @@
 		/* Read the other half of a 64bit map register */
 		base |= (uint64_t) PCIB_READ_CONFIG(pcib, b, s, f, reg + 4, 4) << 32;
 	if (bootverbose) {
-		printf("\tmap[%02x]: type %x, range %2d, base %#jx, size %2d",
+		printf("\tmap[%02x]: type %s, range %2d, base %#jx, size %2d",
 		    reg, pci_maptype(map), ln2range, (uintmax_t)base, ln2size);
 		if (type == SYS_RES_IOPORT && !pci_porten(pcib, b, s, f))
 			printf(", port disabled\n");
@@ -2920,7 +2916,7 @@
 		map |= (pci_addr_t)pci_read_config(child, *rid + 4, 4) << 32;
 	if (pci_mapbase(testval) == 0)
 		goto out;
-	if (pci_maptype(testval) & PCI_MAPMEM) {
+	if (PCI_BAR_MEM(testval)) {
 		if (type != SYS_RES_MEMORY) {
 			if (bootverbose)
 				device_printf(dev,

==== //depot/projects/smpng/sys/dev/pci/pci_pci.c#33 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/pci/pci_pci.c,v 1.46 2007/01/22 21:48:43 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/pci/pci_pci.c,v 1.47 2007/03/31 20:41:00 jhb Exp $");
 
 /*
  * PCI:PCI bridge support.
@@ -253,7 +253,7 @@
      * parts as subtractive.
      */
     if ((pci_get_devid(dev) & 0xff00ffff) == 0x24008086 ||
-      pci_read_config(dev, PCIR_PROGIF, 1) == 1)
+      pci_read_config(dev, PCIR_PROGIF, 1) == PCIP_BRIDGE_PCI_SUBTRACTIVE)
 	sc->flags |= PCIB_SUBTRACTIVE;
 	
     if (bootverbose) {

==== //depot/projects/smpng/sys/dev/pci/pcireg.h#22 (text+ko) ====

@@ -23,7 +23,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/dev/pci/pcireg.h,v 1.59 2007/03/05 16:18:31 jhb Exp $
+ * $FreeBSD: src/sys/dev/pci/pcireg.h,v 1.61 2007/03/31 21:39:02 jhb Exp $
  *
  */
 
@@ -118,6 +118,19 @@
 #define	PCIR_BARS	0x10
 #define	PCIR_BAR(x)	(PCIR_BARS + (x) * 4)
 #define	PCI_RID2BAR(rid) (((rid)-PCIR_BARS)/4)
+#define	PCI_BAR_IO(x)		(((x) & PCIM_BAR_SPACE) == PCIM_BAR_IO_SPACE)
+#define	PCI_BAR_MEM(x)		(((x) & PCIM_BAR_SPACE) == PCIM_BAR_MEM_SPACE)
+#define	PCIM_BAR_SPACE		0x00000001
+#define	PCIM_BAR_MEM_SPACE	0
+#define	PCIM_BAR_IO_SPACE	1
+#define	PCIM_BAR_MEM_TYPE	0x00000006
+#define	PCIM_BAR_MEM_32		0
+#define	PCIM_BAR_MEM_1MB	2	/* Locate below 1MB in PCI <= 2.1 */
+#define	PCIM_BAR_MEM_64		4
+#define	PCIM_BAR_MEM_PREFETCH	0x00000008
+#define	PCIM_BAR_MEM_BASE	0xfffffff0
+#define	PCIM_BAR_IO_RESERVED	0x00000002
+#define	PCIM_BAR_IO_BASE	0xfffffffc
 #define	PCIR_CIS	0x28
 #define	PCIM_CIS_ASI_MASK	0x7
 #define	PCIM_CIS_ASI_TUPLE	0
@@ -211,6 +224,10 @@
 #define	PCIS_STORAGE_FLOPPY	0x02
 #define	PCIS_STORAGE_IPI	0x03
 #define	PCIS_STORAGE_RAID	0x04
+#define	PCIS_STORAGE_ATA_ADMA	0x05
+#define	PCIS_STORAGE_SATA	0x06
+#define	PCIP_STORAGE_SATA_AHCI_1_0	0x01
+#define	PCIS_STORAGE_SAS	0x07
 #define	PCIS_STORAGE_OTHER	0x80
 
 #define	PCIC_NETWORK	0x02
@@ -219,6 +236,8 @@
 #define	PCIS_NETWORK_FDDI	0x02
 #define	PCIS_NETWORK_ATM	0x03
 #define	PCIS_NETWORK_ISDN	0x04
+#define	PCIS_NETWORK_WORLDFIP	0x05
+#define	PCIS_NETWORK_PICMG	0x06
 #define	PCIS_NETWORK_OTHER	0x80
 
 #define	PCIC_DISPLAY	0x03
@@ -244,10 +263,13 @@
 #define	PCIS_BRIDGE_EISA	0x02
 #define	PCIS_BRIDGE_MCA		0x03
 #define	PCIS_BRIDGE_PCI		0x04
+#define	PCIP_BRIDGE_PCI_SUBTRACTIVE	0x01
 #define	PCIS_BRIDGE_PCMCIA	0x05
 #define	PCIS_BRIDGE_NUBUS	0x06
 #define	PCIS_BRIDGE_CARDBUS	0x07
 #define	PCIS_BRIDGE_RACEWAY	0x08
+#define	PCIS_BRIDGE_PCI_TRANSPARENT 0x09
+#define	PCIS_BRIDGE_INFINIBAND	0x0a
 #define	PCIS_BRIDGE_OTHER	0x80
 
 #define	PCIC_SIMPLECOMM	0x07
@@ -262,6 +284,8 @@
 #define	PCIS_SIMPLECOMM_PAR	0x01
 #define	PCIS_SIMPLECOMM_MULSER	0x02
 #define	PCIS_SIMPLECOMM_MODEM	0x03
+#define	PCIS_SIMPLECOMM_GPIB	0x04
+#define	PCIS_SIMPLECOMM_SMART_CARD 0x05
 #define	PCIS_SIMPLECOMM_OTHER	0x80
 
 #define	PCIC_BASEPERIPH	0x08
@@ -304,16 +328,28 @@
 #define	PCIS_SERIALBUS_ACCESS	0x01
 #define	PCIS_SERIALBUS_SSA	0x02
 #define	PCIS_SERIALBUS_USB	0x03
-#define	PCIP_SERIALBUS_USB_UHCI	0x00
-#define	PCIP_SERIALBUS_USB_OHCI	0x10
-#define	PCIP_SERIALBUS_USB_EHCI	0x20
+#define	PCIP_SERIALBUS_USB_UHCI		0x00
+#define	PCIP_SERIALBUS_USB_OHCI		0x10
+#define	PCIP_SERIALBUS_USB_EHCI		0x20
+#define	PCIP_SERIALBUS_USB_DEVICE	0xfe
 #define	PCIS_SERIALBUS_FC	0x04
 #define	PCIS_SERIALBUS_SMBUS	0x05
+#define	PCIS_SERIALBUS_INFINIBAND 0x06
+#define	PCIS_SERIALBUS_IPMI	0x07
+#define	PCIP_SERIALBUS_IPMI_SMIC	0x00
+#define	PCIP_SERIALBUS_IPMI_KCS		0x01
+#define	PCIP_SERIALBUS_IPMI_BT		0x02
+#define	PCIS_SERIALBUS_SERCOS	0x08
+#define	PCIS_SERIALBUS_CANBUS	0x09
 
 #define	PCIC_WIRELESS	0x0d
 #define	PCIS_WIRELESS_IRDA	0x00
 #define	PCIS_WIRELESS_IR	0x01
 #define	PCIS_WIRELESS_RF	0x10
+#define	PCIS_WIRELESS_BLUETOOTH	0x11
+#define	PCIS_WIRELESS_BROADBAND	0x12
+#define	PCIS_WIRELESS_80211A	0x20
+#define	PCIS_WIRELESS_80211B	0x21
 #define	PCIS_WIRELESS_OTHER	0x80
 
 #define	PCIC_INTELLIIO	0x0e
@@ -331,8 +367,11 @@
 #define	PCIS_CRYPTO_OTHER	0x80
 
 #define	PCIC_DASP	0x11
-#define	PCIS_DASP_DPIO	0x00
-#define	PCIS_DASP_OTHER	0x80
+#define	PCIS_DASP_DPIO		0x00
+#define	PCIS_DASP_PERFCNTRS	0x01
+#define	PCIS_DASP_COMM_SYNC	0x10
+#define	PCIS_DASP_MGMT_CARD	0x20
+#define	PCIS_DASP_OTHER		0x80
 
 #define	PCIC_OTHER	0xff
 

==== //depot/projects/smpng/sys/dev/sk/if_sk.c#12 (text) ====

@@ -48,7 +48,7 @@
  */
 

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


More information about the p4-projects mailing list