PERFORCE change 85698 for review

Bjoern A. Zeeb bz at FreeBSD.org
Sat Oct 22 06:13:32 PDT 2005


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

Change 85698 by bz at bz_y2k_i386 on 2005/10/22 13:13:00

	IFC
	synch with KAME done by suz (netinet6/nd)

Affected files ...

.. //depot/projects/fast_ipsec/src/sys/alpha/alpha/pmap.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/alpha/alpha/promcons.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/alpha/tlsb/zs_tlsb.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/amd64/amd64/cpu_switch.S#3 integrate
.. //depot/projects/fast_ipsec/src/sys/amd64/amd64/identcpu.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/amd64/amd64/machdep.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/amd64/amd64/pmap.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/amd64/conf/NOTES#4 integrate
.. //depot/projects/fast_ipsec/src/sys/arm/xscale/i80321/i80321_space.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/arm/xscale/i80321/i80321_timer.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/boot/i386/boot2/boot2.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/boot/i386/libi386/smbios.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/boot/ofw/libofw/elf_freebsd.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/boot/ofw/libofw/libofw.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/boot/ofw/libofw/ofw_console.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/boot/ofw/libofw/ofw_memory.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/boot/ofw/libofw/openfirm.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/ndis/kern_ndis.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/ndis/ndis_var.h#3 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/ndis/ntoskrnl_var.h#3 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/ndis/subr_hal.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/ndis/subr_ndis.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/ndis/subr_ntoskrnl.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/svr4/svr4_misc.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/svr4/svr4_siginfo.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/conf/Makefile.arm#3 integrate
.. //depot/projects/fast_ipsec/src/sys/conf/files#4 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/bfe/if_bfe.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/bge/if_bge.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/cx/if_cx.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/cy/cy.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/dc/dcphy.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/dc/if_dc.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/dc/pnphy.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/dcons/dcons_os.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/digi/digi.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/ed/if_ed_isa.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/ed/if_ed_rtl80x9.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/em/if_em.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/em/if_em.h#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/em/if_em_hw.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/exca/exca.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/if_ndis/if_ndis.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/if_ndis/if_ndisvar.h#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/kbdmux/kbdmux.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/lge/if_lge.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/mii/brgphy.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/mii/dcphy.c#3 delete
.. //depot/projects/fast_ipsec/src/sys/dev/mii/pnphy.c#3 delete
.. //depot/projects/fast_ipsec/src/sys/dev/nge/if_nge.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/ofw/ofw_console.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/pccbb/pccbb_isa.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/rc/rc.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/re/if_re.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/rp/rp.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sab/sab.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/si/si.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sio/sio.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pcm/feeder_rate.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pcm/vchan.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/uart/uart_tty.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/usb/if_aue.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/usb/if_axe.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/usb/if_rue.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/usb/if_udav.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/usb/ubser.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/usb/ucom.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/usb/ucycom.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/vge/if_vge.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/zs/zs.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/fs/devfs/devfs_vnops.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/fs/nullfs/null_vfsops.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/fs/nwfs/nwfs_vnops.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/fs/udf/udf_vfsops.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/fs/unionfs/union_vnops.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/gnu/fs/ext2fs/ext2_lookup.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/gnu/fs/reiserfs/reiserfs_namei.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/i386/i386/identcpu.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/i386/i386/pmap.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/i386/svr4/svr4_machdep.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/ia64/ia64/pmap.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/ia64/ia64/ssc.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/isofs/cd9660/cd9660_lookup.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/isofs/cd9660/cd9660_vfsops.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/isofs/cd9660/iso.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/kern_conf.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/kern_linker.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/kern_malloc.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/kern_mutex.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/link_elf.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/subr_witness.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/syscalls.master#4 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/tty.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/tty_compat.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/uipc_cow.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/uipc_sem.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/modules/dc/Makefile#3 integrate
.. //depot/projects/fast_ipsec/src/sys/modules/if_gif/Makefile#3 integrate
.. //depot/projects/fast_ipsec/src/sys/modules/mii/Makefile#3 integrate
.. //depot/projects/fast_ipsec/src/sys/net/if_sl.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/net/ppp_tty.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netgraph/bluetooth/drivers/h4/ng_h4.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netgraph/ng_tty.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet/icmp6.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet/tcp_input.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/README#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/icmp6.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/in6.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/in6.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/in6_ifattach.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/in6_ifattach.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/in6_src.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/in6_var.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/ip6_input.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/ip6_mroute.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/ip6_output.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/ip6_var.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/mld6.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/mld6_var.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/nd6.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/nd6.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/nd6_nbr.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/nd6_rtr.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/raw_ip6.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/pc98/cbus/sio.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/pc98/pc98/machdep.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/pci/if_dc.c#3 delete
.. //depot/projects/fast_ipsec/src/sys/pci/if_dcreg.h#2 delete
.. //depot/projects/fast_ipsec/src/sys/pci/if_rl.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/pci/if_sf.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/pci/if_sis.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/pci/if_sk.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/pci/if_ste.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/pci/if_tl.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/pci/if_vr.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/pci/if_wb.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/posix4/_semaphore.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/sys/sysproto.h#4 integrate
.. //depot/projects/fast_ipsec/src/sys/sys/tty.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/ufs/ffs/ffs_vfsops.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/ufs/ufs/ufs_lookup.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/vm/uma_core.c#3 integrate

Differences ...

==== //depot/projects/fast_ipsec/src/sys/alpha/alpha/pmap.c#2 (text+ko) ====

@@ -148,7 +148,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.179 2005/09/03 18:20:18 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.180 2005/10/21 19:42:42 ade Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1367,6 +1367,8 @@
 	pv_entry_t pv;
 
 	pv = get_pv_entry();
+	if (pv == NULL)
+		panic("no pv entries: increase vm.pmap.shpgperproc");
 	pv->pv_va = va;
 	pv->pv_pmap = pmap;
 	pv->pv_ptem = mpte;

==== //depot/projects/fast_ipsec/src/sys/alpha/alpha/promcons.c#2 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/promcons.c,v 1.44 2005/01/05 20:05:49 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/promcons.c,v 1.45 2005/10/16 20:58:21 phk Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -108,7 +108,6 @@
 	if ((tp->t_state & TS_ISOPEN) == 0) {
 		tp->t_state |= TS_CARR_ON;
 		ttyconsolemode(tp, 0);
-		ttsetwater(tp);
 
 		setuptimeout = 1;
 	} else if ((tp->t_state & TS_XCLUDE) && suser(td)) {

==== //depot/projects/fast_ipsec/src/sys/alpha/tlsb/zs_tlsb.c#2 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/tlsb/zs_tlsb.c,v 1.49 2004/10/18 21:51:24 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/tlsb/zs_tlsb.c,v 1.50 2005/10/16 20:58:21 phk Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -284,7 +284,6 @@
 	if ((tp->t_state & TS_ISOPEN) == 0) {
 		tp->t_state |= TS_CARR_ON;
 		ttyconsolemode(tp, 0);
-		ttsetwater(tp);
 		setuptimeout = 1;
 	} else if ((tp->t_state & TS_XCLUDE) && suser(td)) {
 		splx(s);

==== //depot/projects/fast_ipsec/src/sys/amd64/amd64/cpu_switch.S#3 (text+ko) ====

@@ -30,7 +30,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/amd64/cpu_switch.S,v 1.153 2005/09/27 21:10:10 peter Exp $
+ * $FreeBSD: src/sys/amd64/amd64/cpu_switch.S,v 1.154 2005/10/17 23:10:31 davidxu Exp $
  */
 
 #include <machine/asmacros.h>
@@ -109,22 +109,7 @@
 	movl	%es,PCB_ES(%r8)
 	movl	%fs,PCB_FS(%r8)
 	movl	%gs,PCB_GS(%r8)
-	jmp	2f
 1:
-
-	/* Save userland %fs */
-	movl	$MSR_FSBASE,%ecx
-	rdmsr
-	movl	%eax,PCB_FSBASE(%r8)
-	movl	%edx,PCB_FSBASE+4(%r8)
-
-	/* Save userland %gs */
-	movl	$MSR_KGSBASE,%ecx
-	rdmsr
-	movl	%eax,PCB_GSBASE(%r8)
-	movl	%edx,PCB_GSBASE+4(%r8)
-2:
-
 	/* Test if debug registers should be saved. */
 	testl	$PCB_DBREGS,PCB_FLAGS(%r8)
 	jz	1f				/* no, skip over */

==== //depot/projects/fast_ipsec/src/sys/amd64/amd64/identcpu.c#3 (text+ko) ====

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.137 2005/10/14 22:52:00 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.140 2005/10/17 23:23:20 jkim Exp $");
 
 #include "opt_cpu.h"
 
@@ -334,6 +334,15 @@
 				);
 			}
 
+			if (cpu_feature & CPUID_HTT && strcmp(cpu_vendor,
+			    "AuthenticAMD") == 0) {
+				cpu_feature &= ~CPUID_HTT;
+				if (bootverbose)
+	    				printf("\nHTT bit cleared - FreeBSD"
+					    " does not have licenseing issues"
+					    " requiring it.\n");
+			}
+
 			/*
 			 * If this CPU supports HTT or CMP then mention the
 			 * number of physical/logical cores it contains.
@@ -348,9 +357,11 @@
 				cpuid_count(4, 0, regs);
 				cmp = ((regs[0] & 0xfc000000) >> 26) + 1;
 			}
-			if (htt > 1)
-				printf("\n  Physical/Logical cores: %d/%d",
-				    cmp, htt);
+			if (cmp > 1)
+				printf("\n  Cores per package: %d", cmp);
+			if ((htt / cmp) > 1)
+				printf("\n  Logical CPUs per core: %d",
+				    htt / cmp);
 		}
 	}
 	/* Avoid ugly blank lines: only print newline when we have to. */

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

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.641 2005/10/14 12:43:43 davidxu Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.642 2005/10/17 23:10:31 davidxu Exp $");
 
 #include "opt_atalk.h"
 #include "opt_atpic.h"
@@ -560,10 +560,12 @@
 	struct trapframe *regs = td->td_frame;
 	struct pcb *pcb = td->td_pcb;
 	
+	critical_enter();
 	wrmsr(MSR_FSBASE, 0);
 	wrmsr(MSR_KGSBASE, 0);	/* User value while we're in the kernel */
 	pcb->pcb_fsbase = 0;
 	pcb->pcb_gsbase = 0;
+	critical_exit();
 	load_ds(_udatasel);
 	load_es(_udatasel);
 	load_fs(_udatasel);

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

@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.528 2005/09/04 19:06:26 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.529 2005/10/21 19:42:42 ade Exp $");
 
 /*
  *	Manages physical address maps.
@@ -1508,6 +1508,8 @@
 	pv_entry_t pv;
 
 	pv = get_pv_entry();
+	if (pv == NULL)
+		panic("no pv entries: increase vm.pmap.shpgperproc");
 	pv->pv_va = va;
 	pv->pv_pmap = pmap;
 

==== //depot/projects/fast_ipsec/src/sys/amd64/conf/NOTES#4 (text+ko) ====

@@ -4,7 +4,7 @@
 # This file contains machine dependent kernel configuration notes.  For
 # machine independent notes, look in /sys/conf/NOTES.
 #
-# $FreeBSD: src/sys/amd64/conf/NOTES,v 1.44 2005/10/14 17:22:28 ru Exp $
+# $FreeBSD: src/sys/amd64/conf/NOTES,v 1.45 2005/10/17 18:35:57 jhb Exp $
 #
 
 #
@@ -325,9 +325,6 @@
 hint.pbio.0.port="0x360"
 device		smbios
 device		vpd
-# sx device is i386 and pc98 only at the moment.
-device		sx
-options 	SX_DEBUG
 # HOT1 Xilinx 6200 card (http://www.vcc.com/)
 device		xrpu
 

==== //depot/projects/fast_ipsec/src/sys/arm/xscale/i80321/i80321_space.c#2 (text+ko) ====

@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_space.c,v 1.3 2005/02/13 18:20:39 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_space.c,v 1.4 2005/10/20 20:30:51 cognet Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -257,23 +257,11 @@
 i80321_mem_bs_map(void *t, bus_addr_t bpa, bus_size_t size, int flags,
     bus_space_handle_t *bshp)
 {
-
-	vm_offset_t va;
-	uint32_t busbase;
-	vm_paddr_t pa, endpa, physbase;
+	vm_paddr_t pa, endpa;
 
-	/*
-	 * Found the window -- PCI MEM space is not mapped by allocating
-	 * some kernel VA space and mapping the pages with pmap_enter().
-	 * pmap_enter() will map unmanaged pages as non-cacheable.
-	 */
-	pa = trunc_page((bpa - busbase) + physbase);
-	endpa = round_page(((bpa - busbase) + physbase) + size);
 	pa = trunc_page(bpa);
 	endpa = round_page(bpa + size);
 
-	*bshp = va + (bpa & PAGE_MASK);
-	*bshp = pa;
 	*bshp = (vm_offset_t)pmap_mapdev(pa, endpa - pa);
 		       
 	return (0);

==== //depot/projects/fast_ipsec/src/sys/arm/xscale/i80321/i80321_timer.c#3 (text+ko) ====

@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_timer.c,v 1.6 2005/10/03 14:19:55 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_timer.c,v 1.7 2005/10/17 14:51:01 cognet Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -72,8 +72,6 @@
 
 static uint32_t counts_per_hz;
 
-static uint32_t offset = 0;
-static uint32_t last = -1;
 static int ticked = 0;
 
 #define	COUNTS_PER_SEC		200000000	/* 200MHz */
@@ -83,7 +81,7 @@
 	i80321_timer_get_timecount, /* get_timecount */
 	NULL,			    /* no poll_pps */
 	~0u,			    /* counter_mask */
-	COUNTS_PER_SEC,	 	   /* frequency */
+	COUNTS_PER_SEC * 3,	 	   /* frequency */
 	"i80321 timer",		    /* name */
 	1000			    /* quality */
 };
@@ -236,19 +234,11 @@
 static unsigned
 i80321_timer_get_timecount(struct timecounter *tc)
 {
-	uint32_t cur = tcr0_read();
-	
-	if (cur > last && last != -1) {
-		offset += counts_per_hz;
-		if (ticked > 0)
-									                        ticked--;
-	}
-	if (ticked) {
-		offset += ticked * counts_per_hz;
-		ticked = 0;
-	}
-	last = cur;
-	return (counts_per_hz - cur + offset);
+	uint32_t ret;
+
+	__asm __volatile("mrc p14, 0, %0, c1, c0, 0\n"
+	    : "=r" (ret));
+	return (ret);
 }
 
 /*
@@ -329,6 +319,13 @@
 
 	tc_init(&i80321_timer_timecounter);
 	restore_interrupts(oldirqstate);
+	rid = 0;
+	/* Enable the clock count register. */
+	__asm __volatile("mrc p14, 0, %0, c0, c0, 0\n" : "=r" (rid));
+	rid &= ~(1 <<  3);
+	rid |= (1 << 2) | 1;
+	__asm __volatile("mcr p14, 0, %0, c0, c0, 0\n"
+	    : : "r" (rid));
 }
 
 

==== //depot/projects/fast_ipsec/src/sys/boot/i386/boot2/boot2.c#4 (text+ko) ====

@@ -14,7 +14,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.76 2005/10/16 01:55:35 sobomax Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/boot2/boot2.c,v 1.78 2005/10/16 20:22:36 sobomax Exp $");
 
 #include <sys/param.h>
 #include <sys/disklabel.h>
@@ -60,15 +60,14 @@
 /* 0x12 is reserved for boot programs. */
 /* 0x13 is reserved for boot programs. */
 #define RBX_PAUSE	0x14	/* -p */
+#define RBX_QUIET	0x15	/* -q */
+#define RBX_NOINTR	0x1c	/* -n */
 /* 0x1d is reserved for log2(RB_MULTIPLE) and is just misnamed here. */
 #define RBX_DUAL	0x1d	/* -D */
 /* 0x1f is reserved for log2(RB_BOOTINFO). */
-/* group of internal options below */
-#define RBX_NOINTR	0x20	/* -n */
-#define RBX_QUIET	0x21	/* -q */
 
 /* pass: -a, -s, -r, -d, -c, -v, -h, -C, -g, -m, -p, -D */
-#define RBX_MASK	0xffffffff
+#define RBX_MASK	0x2011ffff
 
 #define PATH_CONFIG	"/boot.config"
 #define PATH_BOOT3	"/boot/loader"
@@ -90,7 +89,7 @@
 #define TYPE_MAXHARD	TYPE_DA
 #define TYPE_FD		2
 
-#define OPT_CHECK(opt)	((opts >> (opt)) & 0x1)
+#define OPT_CHECK(opt)	((opts >> (opt)) & 1)
 
 extern uint32_t _end;
 
@@ -124,7 +123,7 @@
 } dsk;
 static char cmd[512];
 static char kname[1024];
-static uint64_t opts;
+static uint32_t opts;
 static int comspeed = SIOSPD;
 static struct bootinfo bootinfo;
 static uint8_t ioctrl = IO_KEYBOARD;
@@ -273,10 +272,10 @@
     for (;;) {
 	if (!autoboot || !OPT_CHECK(RBX_QUIET))
 	    printf("\nFreeBSD/i386 boot\n"
-	           "Default: %u:%s(%u,%c)%s\n"
-	           "boot: ",
-	           dsk.drive & DRV_MASK, dev_nm[dsk.type], dsk.unit,
-	           'a' + dsk.part, kname);
+		   "Default: %u:%s(%u,%c)%s\n"
+		   "boot: ",
+		   dsk.drive & DRV_MASK, dev_nm[dsk.type], dsk.unit,
+		   'a' + dsk.part, kname);
 	if (ioctrl & IO_SERIAL)
 	    sio_flush();
 	if (!autoboot || keyhit(5*SECOND))
@@ -300,7 +299,7 @@
 static void
 load(void)
 {
-    static union {
+    union {
 	struct exec ex;
 	Elf32_Ehdr eh;
     } hdr;
@@ -387,7 +386,7 @@
     bootinfo.bi_esymtab = VTOP(p);
     bootinfo.bi_kernelname = VTOP(kname);
     bootinfo.bi_bios_dev = dsk.drive;
-    __exec((caddr_t)addr, RB_BOOTINFO | (uint32_t)(opts & RBX_MASK),
+    __exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK),
 	   MAKEBOOTDEV(dev_maj[dsk.type], 0, dsk.slice, dsk.unit, dsk.part),
 	   0, 0, 0, VTOP(&bootinfo));
 }
@@ -414,7 +413,7 @@
 		    if (*(uint8_t *)PTOV(0x496) & 0x10) {
 			cp = "yes";
 		    } else {
-			opts |= (uint64_t)1 << RBX_DUAL | (uint64_t)1 << RBX_SERIAL;
+			opts |= 1 << RBX_DUAL | 1 << RBX_SERIAL;
 			cp = "no";
 		    }
 		    printf("Keyboard: %s\n", cp);
@@ -432,10 +431,10 @@
 		for (i = 0; c != optstr[i]; i++)
 		    if (i == NOPT - 1)
 			return -1;
-		opts ^= (uint64_t)1 << flags[i];
+		opts ^= 1 << flags[i];
 	    }
-	    ioctrl = opts & (uint64_t)1 << RBX_DUAL ? (IO_SERIAL|IO_KEYBOARD) :
-		     opts & (uint64_t)1 << RBX_SERIAL ? IO_SERIAL : IO_KEYBOARD;
+	    ioctrl = opts & 1 << RBX_DUAL ? (IO_SERIAL|IO_KEYBOARD) :
+		     opts & 1 << RBX_SERIAL ? IO_SERIAL : IO_KEYBOARD;
 	    if (ioctrl & IO_SERIAL)
 	        sio_init(115200 / comspeed);
 	} else {

==== //depot/projects/fast_ipsec/src/sys/boot/i386/libi386/smbios.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/smbios.c,v 1.2 2005/07/27 19:11:10 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/smbios.c,v 1.3 2005/10/18 20:03:31 jkim Exp $");
 
 #include <stand.h>
 #include <bootstrap.h>
@@ -54,6 +54,9 @@
 #define	SMBIOS_SIG		"_SM_"
 #define	SMBIOS_DMI_SIG		"_DMI_"
 
+static u_int8_t	smbios_enabled_sockets = 0;
+static u_int8_t	smbios_populated_sockets = 0;
+
 static u_int8_t	*smbios_parse_table(const u_int8_t *dmi);
 static void	smbios_setenv(const char *env, const u_int8_t *dmi,
 		    const int offset);
@@ -66,6 +69,7 @@
 	u_int8_t	*smbios, *dmi, *addr;
 	u_int16_t	i, length, count;
 	u_int32_t	paddr;
+	char		buf[4];
 
 	/* locate and validate the SMBIOS */
 	smbios = smbios_sigsearch(PTOV(SMBIOS_START), SMBIOS_LENGTH);
@@ -79,6 +83,10 @@
 	for (dmi = addr = PTOV(paddr), i = 0;
 	     dmi - addr < length && i < count; i++)
 		dmi = smbios_parse_table(dmi);
+	sprintf(buf, "%d", smbios_enabled_sockets);
+	setenv("smbios.socket.enabled", buf, 1);
+	sprintf(buf, "%d", smbios_populated_sockets);
+	setenv("smbios.socket.populated", buf, 1);
 }
 
 static u_int8_t *
@@ -110,6 +118,30 @@
 		smbios_setenv("smbios.chassis.version", dmi, 0x06);
 		break;
 
+	case 4:		/* Type 4: Processor Information */
+		/*
+		 * Offset 18h: Processor Status
+		 *
+		 * Bit 7	Reserved, must be 0
+		 * Bit 6	CPU Socket Populated
+		 *		1 - CPU Socket Populated
+		 *		0 - CPU Socket Unpopulated
+		 * Bit 5:3	Reserved, must be zero
+		 * Bit 2:0	CPU Status
+		 *		0h - Unknown
+		 *		1h - CPU Enabled
+		 *		2h - CPU Disabled by User via BIOS Setup
+		 *		3h - CPU Disabled by BIOS (POST Error)
+		 *		4h - CPU is Idle, waiting to be enabled
+		 *		5-6h - Reserved
+		 *		7h - Other
+		 */
+		if ((dmi[0x18] & 0x07) == 1)
+			smbios_enabled_sockets++;
+		if (dmi[0x18] & 0x40)
+			smbios_populated_sockets++;
+		break;
+
 	default: /* skip other types */
 		break;
 	}

==== //depot/projects/fast_ipsec/src/sys/boot/ofw/libofw/elf_freebsd.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/ofw/libofw/elf_freebsd.c,v 1.9 2005/05/24 21:43:49 grehan Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/ofw/libofw/elf_freebsd.c,v 1.10 2005/10/20 10:39:09 marius Exp $");
 
 #include <sys/param.h>
 #include <sys/linker.h>
@@ -47,7 +47,6 @@
     struct preloaded_file **result)
 {
 	int	r;
-	void	*addr;
 
 	r = __elfN(loadfile)(filename, dest, result);
 	if (r != 0)

==== //depot/projects/fast_ipsec/src/sys/boot/ofw/libofw/libofw.h#2 (text+ko) ====

@@ -22,7 +22,7 @@
  * 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/ofw/libofw/libofw.h,v 1.10 2005/01/05 22:16:58 imp Exp $
+ * $FreeBSD: src/sys/boot/ofw/libofw/libofw.h,v 1.11 2005/10/20 11:14:34 marius Exp $
  */
 
 #include "openfirm.h"
@@ -31,7 +31,7 @@
 struct ofw_devdesc {
 	struct devsw	*d_dev;
 	int		d_type;
-	phandle_t	d_handle;
+	ihandle_t	d_handle;
 	char		d_path[256];
 };
 

==== //depot/projects/fast_ipsec/src/sys/boot/ofw/libofw/ofw_console.c#2 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/ofw/libofw/ofw_console.c,v 1.10 2005/01/05 22:16:58 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/ofw/libofw/ofw_console.c,v 1.11 2005/10/20 10:39:09 marius Exp $");
 
 #include <sys/types.h>
 
@@ -112,7 +112,6 @@
 ofw_cons_poll()
 {
 	unsigned char ch;
-	int l;
 
 	if (saved_char != -1)
 		return 1;

==== //depot/projects/fast_ipsec/src/sys/boot/ofw/libofw/ofw_memory.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/ofw/libofw/ofw_memory.c,v 1.6 2005/01/05 22:16:58 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/ofw/libofw/ofw_memory.c,v 1.7 2005/10/20 10:39:09 marius Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -120,7 +120,6 @@
 {
 	phandle_t	memoryp;
 	struct		ofw_reg available;
-	void		*base;
 
 	memoryp = OF_instance_to_package(memory);
 	OF_getprop(memoryp, "available", &available, sizeof(available));

==== //depot/projects/fast_ipsec/src/sys/boot/ofw/libofw/openfirm.c#2 (text+ko) ====

@@ -56,7 +56,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/ofw/libofw/openfirm.c,v 1.11 2005/01/05 22:16:58 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/ofw/libofw/openfirm.c,v 1.12 2005/10/20 10:39:09 marius Exp $");
 
 #include <machine/stdarg.h>
 
@@ -66,9 +66,6 @@
 
 int (*openfirmware)(void *);
 
-static ihandle_t stdin;
-static ihandle_t stdout;
-
 ihandle_t mmu;
 ihandle_t memory;
 
@@ -396,7 +393,6 @@
 phandle_t
 OF_finddevice(const char *device)
 {
-	int i;
 	static struct {
 		cell_t		name;
 		cell_t		nargs;

==== //depot/projects/fast_ipsec/src/sys/compat/ndis/kern_ndis.c#3 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/ndis/kern_ndis.c,v 1.87 2005/10/12 03:02:50 wpaul Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/ndis/kern_ndis.c,v 1.88 2005/10/18 19:52:15 wpaul Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -84,7 +84,7 @@
 static void ndis_sendrsrcavail_func(ndis_handle);
 static void ndis_intrsetup(kdpc *, device_object *,
 	irp *, struct ndis_softc *);
-static void ndis_return(kdpc *, void *, void *, void *);
+static void ndis_return(device_object *, void *);
 
 static image_patch_table kernndis_functbl[] = {
 	IMPORT_SFUNC(ndis_status_func, 4),
@@ -106,6 +106,18 @@
  * Note that we call ourselves 'ndisapi' to avoid a namespace
  * collision with if_ndis.ko, which internally calls itself
  * 'ndis.'
+ *
+ * Note: some of the subsystems depend on each other, so the
+ * order in which they're started is important. The order of
+ * importance is:
+ *
+ * HAL - spinlocks and IRQL manipulation
+ * ntoskrnl - DPC and workitem threads, object waiting
+ * windrv - driver/device registration
+ *
+ * The HAL should also be the last thing shut down, since
+ * the ntoskrnl subsystem will use spinlocks right up until
+ * the DPC and workitem threads are terminated.
  */
 
 static int
@@ -117,10 +129,10 @@
 	switch (cmd) {
 	case MOD_LOAD:
 		/* Initialize subsystems */
+		hal_libinit();
+		ntoskrnl_libinit();
 		windrv_libinit();
-		hal_libinit();
 		ndis_libinit();
-		ntoskrnl_libinit();
 		usbd_libinit();
 
 		patch = kernndis_functbl;
@@ -137,11 +149,11 @@
 	case MOD_SHUTDOWN:
 		if (TAILQ_FIRST(&ndis_devhead) == NULL) {
 			/* Shut down subsystems */
-			hal_libfini();
 			ndis_libfini();
-			ntoskrnl_libfini();
 			usbd_libfini();
 			windrv_libfini();
+			ntoskrnl_libfini();
+			hal_libfini();
 
 			patch = kernndis_functbl;
 			while (patch->ipt_func != NULL) {
@@ -152,11 +164,11 @@
 		break;
 	case MOD_UNLOAD:
 		/* Shut down subsystems */
-		hal_libfini();
 		ndis_libfini();
-		ntoskrnl_libfini();
 		usbd_libfini();
 		windrv_libfini();
+		ntoskrnl_libfini();
+		hal_libfini();
 
 		patch = kernndis_functbl;
 		while (patch->ipt_func != NULL) {
@@ -441,32 +453,39 @@
 }
 
 static void
-ndis_return(dpc, arg, sysarg1, sysarg2)
-	kdpc			*dpc;
+ndis_return(dobj, arg)
+	device_object		*dobj;
 	void			*arg;
-	void			*sysarg1;
-	void			*sysarg2;
 {
-	struct ndis_softc	*sc;
+	ndis_miniport_block	*block;
+	ndis_miniport_characteristics	*ch;
 	ndis_return_handler	returnfunc;
 	ndis_handle		adapter;
 	ndis_packet		*p;
 	uint8_t			irql;
+	list_entry		*l;
 
+	block = arg;
+	ch = IoGetDriverObjectExtension(dobj->do_drvobj, (void *)1);
+
 	p = arg;
-	sc = p->np_softc;
-	adapter = sc->ndis_block->nmb_miniportadapterctx;
+	adapter = block->nmb_miniportadapterctx;
 
 	if (adapter == NULL)
 		return;
 
-	returnfunc = sc->ndis_chars->nmc_return_packet_func;
+	returnfunc = ch->nmc_return_packet_func;
 
-	if (NDIS_SERIALIZED(sc->ndis_block))
-		KeAcquireSpinLock(&sc->ndis_block->nmb_lock, &irql);
-	MSCALL2(returnfunc, adapter, p);
-	if (NDIS_SERIALIZED(sc->ndis_block))
-		KeReleaseSpinLock(&sc->ndis_block->nmb_lock, irql);
+	KeAcquireSpinLock(&block->nmb_returnlock, &irql);
+	while (!IsListEmpty(&block->nmb_returnlist)) {
+		l = RemoveHeadList((&block->nmb_returnlist));
+		p = CONTAINING_RECORD(l, ndis_packet, np_list);
+		InitializeListHead((&p->np_list));
+		KeReleaseSpinLock(&block->nmb_returnlock, irql);
+		MSCALL2(returnfunc, adapter, p);
+		KeAcquireSpinLock(&block->nmb_returnlock, &irql);
+	}
+	KeReleaseSpinLock(&block->nmb_returnlock, irql);
 
 	return;
 }
@@ -477,6 +496,7 @@
 	void			*arg;
 {
 	ndis_packet		*p;
+	ndis_miniport_block	*block;
 
 	if (arg == NULL)
 		return;
@@ -490,8 +510,16 @@
 	if (p->np_refcnt)
 		return;
 
-	KeInitializeDpc(&p->np_dpc, kernndis_functbl[7].ipt_wrap, p);
-	KeInsertQueueDpc(&p->np_dpc, NULL, NULL);
+	block = ((struct ndis_softc *)p->np_softc)->ndis_block;
+
+	KeAcquireSpinLockAtDpcLevel(&block->nmb_returnlock);
+	InitializeListHead((&p->np_list));
+	InsertHeadList((&block->nmb_returnlist), (&p->np_list));
+	KeReleaseSpinLockFromDpcLevel(&block->nmb_returnlock);
+
+	IoQueueWorkItem(block->nmb_returnitem,
+	    (io_workitem_func)kernndis_functbl[7].ipt_wrap,
+	    WORKQUEUE_CRITICAL, block);
 
 	return;
 }
@@ -621,8 +649,13 @@
 			case SYS_RES_IRQ:
 				prd->cprd_type = CmResourceTypeInterrupt;
 				prd->cprd_flags = 0;
+				/*
+				 * Always mark interrupt resources as
+				 * shared, since in our implementation,
+				 * they will be.
+				 */
 				prd->cprd_sharedisp =
-				    CmResourceShareDeviceExclusive;
+				    CmResourceShareShared;
 				prd->u.cprd_intr.cprd_level = brle->start;
 				prd->u.cprd_intr.cprd_vector = brle->start;
 				prd->u.cprd_intr.cprd_affinity = 0;
@@ -1087,8 +1120,12 @@
 #ifdef NDIS_REAP_TIMERS
 	ndis_miniport_timer	*t, *n;
 #endif
+	ndis_miniport_block	*block;
+	int			empty = 0;
+	uint8_t			irql;
 
 	sc = arg;
+	block = sc->ndis_block;
 
 #ifdef NDIS_REAP_TIMERS
 	/*
@@ -1111,6 +1148,19 @@
 	if (!cold)
 		KeFlushQueuedDpcs();
 
+	/*
+	 * Wait for all packets to be returned.
+	 */
+
+	while (1) {
+		KeAcquireSpinLock(&block->nmb_returnlock, &irql);
+		empty = IsListEmpty(&block->nmb_returnlist);
+		KeReleaseSpinLock(&block->nmb_returnlock, irql);
+		if (empty)
+			break;
+		NdisMSleep(1000);
+	}
+
 	NDIS_LOCK(sc);
 	adapter = sc->ndis_block->nmb_miniportadapterctx;
 	if (adapter == NULL) {
@@ -1398,6 +1448,17 @@
 	ndis_miniport_block	*block;
 	struct ndis_softc	*sc;
 	uint32_t		status;
+	int			error;
+
+	sc = device_get_softc(pdo->do_devext);
+
+        if (sc->ndis_iftype == PCMCIABus || sc->ndis_iftype == PCIBus) {
+		error = bus_setup_intr(sc->ndis_dev, sc->ndis_irq,
+		    INTR_TYPE_NET | INTR_MPSAFE,
+		    ntoskrnl_intr, NULL, &sc->ndis_intrhand);
+		if (error)
+			return(NDIS_STATUS_FAILURE);
+	}
 
 	status = IoCreateDevice(drv, sizeof(ndis_miniport_block), NULL,
 	    FILE_DEVICE_UNKNOWN, 0, FALSE, &fdo);
@@ -1412,17 +1473,19 @@
 	block->nmb_physdeviceobj = pdo;
 	block->nmb_nextdeviceobj = IoAttachDeviceToDeviceStack(fdo, pdo);
 	KeInitializeSpinLock(&block->nmb_lock);
-	InitializeListHead(&block->nmb_parmlist);
+	KeInitializeSpinLock(&block->nmb_returnlock);
 	KeInitializeEvent(&block->nmb_getevent, EVENT_TYPE_NOTIFY, TRUE);
 	KeInitializeEvent(&block->nmb_setevent, EVENT_TYPE_NOTIFY, TRUE);
 	KeInitializeEvent(&block->nmb_resetevent, EVENT_TYPE_NOTIFY, TRUE);
+	InitializeListHead(&block->nmb_parmlist);
+	InitializeListHead(&block->nmb_returnlist);
+	block->nmb_returnitem = IoAllocateWorkItem(fdo);
 
 	/*
 	 * Stash pointers to the miniport block and miniport
 	 * characteristics info in the if_ndis softc so the
 	 * UNIX wrapper driver can get to them later.
          */
-	sc = device_get_softc(pdo->do_devext);
 	sc->ndis_block = block;
 	sc->ndis_chars = IoGetDriverObjectExtension(drv, (void *)1);

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


More information about the p4-projects mailing list