From owner-p4-projects Mon Apr 1 9:59:53 2002 Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4609537B41F; Mon, 1 Apr 2002 09:58:33 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id 5FBCE37B400 for ; Mon, 1 Apr 2002 09:58:31 -0800 (PST) Received: (from perforce@localhost) by freefall.freebsd.org (8.11.6/8.11.6) id g31HwT500191 for perforce@freebsd.org; Mon, 1 Apr 2002 09:58:29 -0800 (PST) (envelope-from jhb@freebsd.org) Date: Mon, 1 Apr 2002 09:58:29 -0800 (PST) Message-Id: <200204011758.g31HwT500191@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin Subject: PERFORCE change 8793 for review To: Perforce Change Reviews Sender: owner-p4-projects@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG http://people.freebsd.org/~peter/p4db/chv.cgi?CH=8793 Change 8793 by jhb@jhb_laptop on 2002/04/01 09:58:24 IFC. Affected files ... ... //depot/projects/smpng/sys/alpha/alpha/autoconf.c#6 integrate ... //depot/projects/smpng/sys/alpha/alpha/critical.c#1 branch ... //depot/projects/smpng/sys/alpha/alpha/dec_eb64plus.c#3 integrate ... //depot/projects/smpng/sys/alpha/alpha/dec_kn300.c#4 integrate ... //depot/projects/smpng/sys/alpha/alpha/exception.s#5 integrate ... //depot/projects/smpng/sys/alpha/alpha/genassym.c#10 integrate ... //depot/projects/smpng/sys/alpha/alpha/machdep.c#32 integrate ... //depot/projects/smpng/sys/alpha/alpha/trap.c#29 integrate ... //depot/projects/smpng/sys/alpha/conf/GENERIC#14 integrate ... //depot/projects/smpng/sys/alpha/include/cpufunc.h#6 integrate ... //depot/projects/smpng/sys/alpha/include/proc.h#4 integrate ... //depot/projects/smpng/sys/alpha/mcbus/mcbus.c#2 integrate ... //depot/projects/smpng/sys/alpha/mcbus/mcbusvar.h#2 integrate ... //depot/projects/smpng/sys/alpha/mcbus/mcpcia.c#14 integrate ... //depot/projects/smpng/sys/alpha/mcbus/mcpciavar.h#2 integrate ... //depot/projects/smpng/sys/boot/Makefile#4 integrate ... //depot/projects/smpng/sys/boot/common/Makefile.inc#2 integrate ... //depot/projects/smpng/sys/boot/efi/libefi/arch/ia64/start.S#3 integrate ... //depot/projects/smpng/sys/boot/efi/libefi/efifs.c#5 integrate ... //depot/projects/smpng/sys/boot/efi/libefi/efinet.c#2 integrate ... //depot/projects/smpng/sys/boot/efi/libefi/elf_freebsd.c#5 integrate ... //depot/projects/smpng/sys/boot/efi/loader/Makefile#5 integrate ... //depot/projects/smpng/sys/boot/efi/loader/main.c#4 integrate ... //depot/projects/smpng/sys/boot/efi/loader/version#2 integrate ... //depot/projects/smpng/sys/boot/i386/loader/Makefile#5 integrate ... //depot/projects/smpng/sys/boot/ia64/libski/elf_freebsd.c#3 integrate ... //depot/projects/smpng/sys/boot/ia64/skiload/Makefile#4 integrate ... //depot/projects/smpng/sys/boot/ia64/skiload/version#2 integrate ... //depot/projects/smpng/sys/boot/pc98/loader/Makefile#4 integrate ... //depot/projects/smpng/sys/boot/sparc64/Makefile#1 branch ... //depot/projects/smpng/sys/boot/sparc64/boot1/_start.S#1 branch ... //depot/projects/smpng/sys/boot/sparc64/bootblock/Makefile#2 delete ... //depot/projects/smpng/sys/boot/sparc64/bootblock/bootblock.c#4 delete ... //depot/projects/smpng/sys/cam/scsi/scsi_all.c#7 integrate ... //depot/projects/smpng/sys/cam/scsi/scsi_da.c#21 integrate ... //depot/projects/smpng/sys/compat/linprocfs/linprocfs.c#12 integrate ... //depot/projects/smpng/sys/compat/svr4/svr4_misc.c#12 integrate ... //depot/projects/smpng/sys/conf/files#30 integrate ... //depot/projects/smpng/sys/conf/files.alpha#11 integrate ... //depot/projects/smpng/sys/conf/files.i386#21 integrate ... //depot/projects/smpng/sys/conf/files.ia64#11 integrate ... //depot/projects/smpng/sys/conf/files.pc98#21 integrate ... //depot/projects/smpng/sys/conf/files.powerpc#5 integrate ... //depot/projects/smpng/sys/conf/files.sparc64#13 integrate ... //depot/projects/smpng/sys/conf/options#15 integrate ... //depot/projects/smpng/sys/dev/aac/aac_disk.c#9 integrate ... //depot/projects/smpng/sys/dev/asr/asr.c#10 integrate ... //depot/projects/smpng/sys/dev/ata/ata-all.c#15 integrate ... //depot/projects/smpng/sys/dev/ata/ata-disk.c#15 integrate ... //depot/projects/smpng/sys/dev/ata/ata-dma.c#15 integrate ... //depot/projects/smpng/sys/dev/ata/ata-raid.c#9 integrate ... //depot/projects/smpng/sys/dev/ata/ata-raid.h#7 integrate ... //depot/projects/smpng/sys/dev/ata/atapi-cd.c#18 integrate ... //depot/projects/smpng/sys/dev/ccd/ccd.c#11 integrate ... //depot/projects/smpng/sys/dev/ida/ida_disk.c#5 integrate ... //depot/projects/smpng/sys/dev/kbd/atkbdc.c#3 integrate ... //depot/projects/smpng/sys/dev/null/null.c#2 integrate ... //depot/projects/smpng/sys/dev/pccard/pccard_cis.c#8 integrate ... //depot/projects/smpng/sys/dev/pdq/if_fea.c#3 integrate ... //depot/projects/smpng/sys/dev/pdq/if_fpa.c#2 integrate ... //depot/projects/smpng/sys/dev/pdq/pdq.c#2 integrate ... //depot/projects/smpng/sys/dev/pdq/pdq_freebsd.h#1 branch ... //depot/projects/smpng/sys/dev/pdq/pdq_ifsubr.c#3 integrate ... //depot/projects/smpng/sys/dev/pdq/pdqreg.h#2 integrate ... //depot/projects/smpng/sys/dev/pdq/pdqvar.h#2 integrate ... //depot/projects/smpng/sys/dev/puc/pucdata.c#3 integrate ... //depot/projects/smpng/sys/dev/sio/sio.c#14 integrate ... //depot/projects/smpng/sys/dev/twe/twe_freebsd.c#6 integrate ... //depot/projects/smpng/sys/dev/usb/if_aue.c#8 integrate ... //depot/projects/smpng/sys/dev/usb/ohci.c#11 integrate ... //depot/projects/smpng/sys/dev/usb/ohcireg.h#3 integrate ... //depot/projects/smpng/sys/dev/usb/ohcivar.h#4 integrate ... //depot/projects/smpng/sys/dev/usb/uhci.c#12 integrate ... //depot/projects/smpng/sys/dev/usb/usb.c#8 integrate ... //depot/projects/smpng/sys/dev/usb/usb_port.h#7 integrate ... //depot/projects/smpng/sys/dev/usb/usb_subr.c#6 integrate ... //depot/projects/smpng/sys/dev/usb/usbdevs#16 integrate ... //depot/projects/smpng/sys/dev/usb/usbdevs.h#16 integrate ... //depot/projects/smpng/sys/dev/usb/usbdevs_data.h#16 integrate ... //depot/projects/smpng/sys/dev/usb/usbdi.c#5 integrate ... //depot/projects/smpng/sys/dev/usb/usbdi_util.c#2 integrate ... //depot/projects/smpng/sys/dev/usb/usbdi_util.h#2 integrate ... //depot/projects/smpng/sys/dev/usb/uvscom.c#2 integrate ... //depot/projects/smpng/sys/dev/vinum/vinum.c#6 integrate ... //depot/projects/smpng/sys/dev/vinum/vinumext.h#4 integrate ... //depot/projects/smpng/sys/dev/wi/if_wavelan_ieee.h#3 integrate ... //depot/projects/smpng/sys/dev/wi/if_wi.c#22 integrate ... //depot/projects/smpng/sys/dev/wi/if_wireg.h#7 integrate ... //depot/projects/smpng/sys/fs/procfs/procfs_status.c#9 integrate ... //depot/projects/smpng/sys/geom/geom.h#3 integrate ... //depot/projects/smpng/sys/geom/geom_bsd.c#3 integrate ... //depot/projects/smpng/sys/geom/geom_dev.c#2 integrate ... //depot/projects/smpng/sys/geom/geom_disk.c#2 integrate ... //depot/projects/smpng/sys/geom/geom_dump.c#2 integrate ... //depot/projects/smpng/sys/geom/geom_enc.c#2 integrate ... //depot/projects/smpng/sys/geom/geom_event.c#2 integrate ... //depot/projects/smpng/sys/geom/geom_int.h#1 branch ... //depot/projects/smpng/sys/geom/geom_io.c#2 integrate ... //depot/projects/smpng/sys/geom/geom_kern.c#2 integrate ... //depot/projects/smpng/sys/geom/geom_mbr.c#3 integrate ... //depot/projects/smpng/sys/geom/geom_pc98.c#1 branch ... //depot/projects/smpng/sys/geom/geom_slice.c#2 integrate ... //depot/projects/smpng/sys/geom/geom_slice.h#2 integrate ... //depot/projects/smpng/sys/geom/geom_subr.c#2 integrate ... //depot/projects/smpng/sys/geom/geom_sunlabel.c#3 integrate ... //depot/projects/smpng/sys/gnu/ext2fs/ext2_vfsops.c#12 integrate ... //depot/projects/smpng/sys/i386/conf/NOTES#30 integrate ... //depot/projects/smpng/sys/i386/i386/autoconf.c#9 integrate ... //depot/projects/smpng/sys/i386/i386/bios.c#8 integrate ... //depot/projects/smpng/sys/i386/i386/critical.c#1 branch ... //depot/projects/smpng/sys/i386/i386/exception.s#7 integrate ... //depot/projects/smpng/sys/i386/i386/genassym.c#14 integrate ... //depot/projects/smpng/sys/i386/i386/i386dump.c#1 branch ... //depot/projects/smpng/sys/i386/i386/machdep.c#27 integrate ... //depot/projects/smpng/sys/i386/i386/mp_machdep.c#20 integrate ... //depot/projects/smpng/sys/i386/i386/mpapic.c#8 integrate ... //depot/projects/smpng/sys/i386/i386/swtch.s#12 integrate ... //depot/projects/smpng/sys/i386/i386/vm_machdep.c#20 integrate ... //depot/projects/smpng/sys/i386/include/cpufunc.h#12 integrate ... //depot/projects/smpng/sys/i386/include/mutex.h#9 integrate ... //depot/projects/smpng/sys/i386/include/pcb.h#6 integrate ... //depot/projects/smpng/sys/i386/include/pcpu.h#3 integrate ... //depot/projects/smpng/sys/i386/include/proc.h#6 integrate ... //depot/projects/smpng/sys/i386/isa/apic_vector.s#10 integrate ... //depot/projects/smpng/sys/i386/isa/clock.c#14 integrate ... //depot/projects/smpng/sys/i386/isa/icu_vector.s#9 integrate ... //depot/projects/smpng/sys/i386/isa/intr_machdep.c#13 integrate ... //depot/projects/smpng/sys/i386/isa/intr_machdep.h#8 integrate ... //depot/projects/smpng/sys/i386/isa/ipl.s#6 integrate ... //depot/projects/smpng/sys/i386/isa/npx.c#24 integrate ... //depot/projects/smpng/sys/ia64/ia64/autoconf.c#7 integrate ... //depot/projects/smpng/sys/ia64/ia64/critical.c#1 branch ... //depot/projects/smpng/sys/ia64/ia64/exception.s#17 integrate ... //depot/projects/smpng/sys/ia64/ia64/genassym.c#16 integrate ... //depot/projects/smpng/sys/ia64/ia64/locore.s#11 integrate ... //depot/projects/smpng/sys/ia64/ia64/machdep.c#28 integrate ... //depot/projects/smpng/sys/ia64/include/asm.h#4 integrate ... //depot/projects/smpng/sys/ia64/include/cpufunc.h#11 integrate ... //depot/projects/smpng/sys/ia64/include/proc.h#5 integrate ... //depot/projects/smpng/sys/isa/fd.c#9 integrate ... //depot/projects/smpng/sys/isofs/cd9660/cd9660_vfsops.c#11 integrate ... //depot/projects/smpng/sys/kern/bus_if.m#2 integrate ... //depot/projects/smpng/sys/kern/init_main.c#14 integrate ... //depot/projects/smpng/sys/kern/kern_condvar.c#11 integrate ... //depot/projects/smpng/sys/kern/kern_descrip.c#19 integrate ... //depot/projects/smpng/sys/kern/kern_exec.c#30 integrate ... //depot/projects/smpng/sys/kern/kern_exit.c#28 integrate ... //depot/projects/smpng/sys/kern/kern_fork.c#29 integrate ... //depot/projects/smpng/sys/kern/kern_ktr.c#12 integrate ... //depot/projects/smpng/sys/kern/kern_mutex.c#21 integrate ... //depot/projects/smpng/sys/kern/kern_proc.c#18 integrate ... //depot/projects/smpng/sys/kern/kern_prot.c#52 integrate ... //depot/projects/smpng/sys/kern/kern_shutdown.c#18 integrate ... //depot/projects/smpng/sys/kern/kern_switch.c#12 integrate ... //depot/projects/smpng/sys/kern/kern_tc.c#7 integrate ... //depot/projects/smpng/sys/kern/subr_bus.c#8 integrate ... //depot/projects/smpng/sys/kern/subr_disk.c#8 integrate ... //depot/projects/smpng/sys/kern/subr_disklabel.c#6 integrate ... //depot/projects/smpng/sys/kern/subr_diskslice.c#6 integrate ... //depot/projects/smpng/sys/kern/subr_trap.c#31 integrate ... //depot/projects/smpng/sys/kern/subr_witness.c#35 integrate ... //depot/projects/smpng/sys/kern/subr_xxx.c#4 integrate ... //depot/projects/smpng/sys/kern/sys_pipe.c#12 integrate ... //depot/projects/smpng/sys/kern/vfs_aio.c#16 integrate ... //depot/projects/smpng/sys/kern/vfs_conf.c#5 integrate ... //depot/projects/smpng/sys/kern/vfs_syscalls.c#31 integrate ... //depot/projects/smpng/sys/net/fddi.h#3 integrate ... //depot/projects/smpng/sys/net/if.c#18 integrate ... //depot/projects/smpng/sys/net/if_fddisubr.c#6 integrate ... //depot/projects/smpng/sys/net/if_llc.h#2 integrate ... //depot/projects/smpng/sys/netinet/in.h#8 integrate ... //depot/projects/smpng/sys/netinet6/ip6_mroute.c#4 integrate ... //depot/projects/smpng/sys/netinet6/ip6_output.c#8 integrate ... //depot/projects/smpng/sys/netinet6/nd6.c#5 integrate ... //depot/projects/smpng/sys/pc98/i386/machdep.c#22 integrate ... //depot/projects/smpng/sys/pc98/pc98/clock.c#7 integrate ... //depot/projects/smpng/sys/pc98/pc98/fd.c#8 integrate ... //depot/projects/smpng/sys/powerpc/include/cpufunc.h#10 integrate ... //depot/projects/smpng/sys/powerpc/include/proc.h#5 integrate ... //depot/projects/smpng/sys/powerpc/powerpc/autoconf.c#5 integrate ... //depot/projects/smpng/sys/powerpc/powerpc/critical.c#1 branch ... //depot/projects/smpng/sys/powerpc/powerpc/machdep.c#18 integrate ... //depot/projects/smpng/sys/powerpc/powerpc/trap.c#16 integrate ... //depot/projects/smpng/sys/powerpc/powerpc/vm_machdep.c#12 integrate ... //depot/projects/smpng/sys/sparc64/include/cpufunc.h#14 integrate ... //depot/projects/smpng/sys/sparc64/include/proc.h#7 integrate ... //depot/projects/smpng/sys/sparc64/sparc64/autoconf.c#6 integrate ... //depot/projects/smpng/sys/sparc64/sparc64/clock.c#4 integrate ... //depot/projects/smpng/sys/sparc64/sparc64/critical.c#1 branch ... //depot/projects/smpng/sys/sparc64/sparc64/exception.s#17 integrate ... //depot/projects/smpng/sys/sparc64/sparc64/genassym.c#18 integrate ... //depot/projects/smpng/sys/sparc64/sparc64/machdep.c#20 integrate ... //depot/projects/smpng/sys/sys/_types.h#1 branch ... //depot/projects/smpng/sys/sys/ata.h#7 integrate ... //depot/projects/smpng/sys/sys/bio.h#6 integrate ... //depot/projects/smpng/sys/sys/bus.h#4 integrate ... //depot/projects/smpng/sys/sys/cdefs.h#9 integrate ... //depot/projects/smpng/sys/sys/condvar.h#3 integrate ... //depot/projects/smpng/sys/sys/conf.h#13 integrate ... //depot/projects/smpng/sys/sys/disk.h#4 integrate ... //depot/projects/smpng/sys/sys/disklabel.h#9 integrate ... //depot/projects/smpng/sys/sys/filedesc.h#9 integrate ... //depot/projects/smpng/sys/sys/kerneldump.h#1 branch ... //depot/projects/smpng/sys/sys/ktr.h#7 integrate ... //depot/projects/smpng/sys/sys/lock.h#14 integrate ... //depot/projects/smpng/sys/sys/mutex.h#20 integrate ... //depot/projects/smpng/sys/sys/proc.h#41 integrate ... //depot/projects/smpng/sys/sys/stdint.h#2 integrate ... //depot/projects/smpng/sys/sys/sysctl.h#8 integrate ... //depot/projects/smpng/sys/sys/systm.h#27 integrate ... //depot/projects/smpng/sys/sys/tty.h#6 integrate ... //depot/projects/smpng/sys/sys/types.h#10 integrate ... //depot/projects/smpng/sys/ufs/ffs/ffs_vfsops.c#17 integrate ... //depot/projects/smpng/sys/vm/uma_int.h#2 integrate Differences ... ==== //depot/projects/smpng/sys/alpha/alpha/autoconf.c#6 (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/alpha/alpha/autoconf.c,v 1.50 2002/03/20 18:58:44 obrien Exp $ + * $FreeBSD: src/sys/alpha/alpha/autoconf.c,v 1.51 2002/03/31 07:15:24 phk Exp $ */ #include "opt_bootp.h" @@ -71,9 +71,6 @@ extern int nfs_diskless_valid; /* XXX use include file */ -dev_t rootdev = NODEV; -dev_t dumpdev = NODEV; - static void configure_start() { ==== //depot/projects/smpng/sys/alpha/alpha/dec_eb64plus.c#3 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/alpha/alpha/dec_eb64plus.c,v 1.10 2002/03/20 18:58:44 obrien Exp $ */ +/* $FreeBSD: src/sys/alpha/alpha/dec_eb64plus.c,v 1.11 2002/03/29 23:05:05 wilko Exp $ */ /* * Copyright (c) 1995, 1996, 1997 Carnegie-Mellon University. @@ -31,21 +31,20 @@ */ /* - * Port to based on NetBSD/axp by Wilko Bulte * FreeBSD version based on: * NetBSD: dec_eb64plus.c,v 1.15 1998/11/19 02:20:07 ross Exp * - * Some info on the Aspen Alpine as this might be hard to come by: + * Some info on the Aspen Alpine which might be hard to come by: * - Hardware is close enough to the DEC EB64+ design to allow it to run - * the EB64+ SRM console f/w - * - 3 PCI slots, closest to the SIMMs: Alpine calls this slot C - * the middle one Alpine calls this slot B - * the 3rd one is Alpine calls this slot A - * (A, B, C is silkscreened on the PCB) + * the EB64+ SRM console firmware + * - 3 PCI slots, closest to the SIMMs: Alpine calls this one slot C + * the middle one Alpine calls slot B + * the 3rd one Alpine calls slot A + * (A, B, C are silkscreened on the PCB) * - embedded NCR810, located at PCI slot 5 * - 3 ISA slots, hanging off an Intel 82378IB PCI-ISA bridge at PCI slot 8 - * - embedded floppy, PC keyboard interface, PS/2 mouse interface, 2x serial - * ports and a parallel port. All of this hiding after the ISA bridge + * - embedded floppy, PC keyboard interface, PS/2 mouse interface, 2 serial + * ports and a parallel port. All of this hanging off the ISA bridge */ #include "opt_ddb.h" ==== //depot/projects/smpng/sys/alpha/alpha/dec_kn300.c#4 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/alpha/alpha/dec_kn300.c,v 1.7 2002/03/20 18:58:44 obrien Exp $ */ +/* $FreeBSD: src/sys/alpha/alpha/dec_kn300.c,v 1.8 2002/03/26 19:46:40 dfr Exp $ */ /* * Copyright (c) 2000 by Matthew Jacob @@ -92,6 +92,7 @@ } platform.iobus = "mcbus"; + platform.cons_init = dec_kn300_cons_init; } extern int comconsole; @@ -101,6 +102,7 @@ { struct ctb *ctb; + mcbus_init(); #ifdef DDB siogdbattach(0x2f8, 57600); #endif ==== //depot/projects/smpng/sys/alpha/alpha/exception.s#5 (text+ko) ==== @@ -24,7 +24,7 @@ * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * $NetBSD: locore.s,v 1.47 1998/03/22 07:26:32 thorpej Exp $ - * $FreeBSD: src/sys/alpha/alpha/exception.s,v 1.14 2001/12/11 23:33:38 jhb Exp $ + * $FreeBSD: src/sys/alpha/alpha/exception.s,v 1.15 2002/03/29 16:35:25 jake Exp $ */ #include @@ -130,16 +130,26 @@ CALL(syscall) /* Handle any AST's. */ +2: ldiq a0, ALPHA_PSL_IPL_HIGH /* disable all interrupts */ + call_pal PAL_OSF1_swpipl + ldq s0, PC_CURTHREAD(pcpup) /* checking for pending asts */ + ldq s1, TD_KSE(s0) /* atomically with returning */ + ldl s1, KE_FLAGS(s1) + ldiq s2, KEF_ASTPENDING | KEF_NEEDRESCHED + and s1, s2 + beq s1, 3f + ldiq a0, ALPHA_PSL_IPL_0 /* reenable interrupts */ + call_pal PAL_OSF1_swpipl mov sp, a0 /* only arg is frame */ CALL(ast) + jmp zero, 2b /* see if we need a full exception_return */ - ldq t1, (FRAME_FLAGS*8)(sp) +3: ldq t1, (FRAME_FLAGS*8)(sp) and t1, FRAME_FLAGS_SYSCALL beq t1, exception_return /* set the hae register if this process has specified a value */ - ldq s0, PC_CURTHREAD(pcpup) ldq t1, TD_MD_FLAGS(s0) and t1, MDP_HAEUSED beq t1, 3f @@ -266,8 +276,19 @@ beq t0, Lkernelret /* no: kernel return */ /* Handle any AST's or resched's. */ +1: ldiq a0, ALPHA_PSL_IPL_HIGH /* disable all interrupts */ + call_pal PAL_OSF1_swpipl + ldq s2, TD_KSE(s0) /* checking for pending asts */ + ldl s2, KE_FLAGS(s2) /* atomically with returning */ + ldiq s3, KEF_ASTPENDING | KEF_NEEDRESCHED + and s2, s3 + beq s2, 2f + ldiq a0, ALPHA_PSL_IPL_0 /* reenable interrupts */ + call_pal PAL_OSF1_swpipl mov sp, a0 /* only arg is frame */ CALL(ast) + jmp zero, 1b +2: #ifdef SMP br Lrestoreregs #endif ==== //depot/projects/smpng/sys/alpha/alpha/genassym.c#10 (text+ko) ==== @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)genassym.c 5.11 (Berkeley) 5/10/91 - * $FreeBSD: src/sys/alpha/alpha/genassym.c,v 1.36 2002/02/07 10:27:56 phk Exp $ + * $FreeBSD: src/sys/alpha/alpha/genassym.c,v 1.37 2002/03/29 16:35:25 jake Exp $ */ #include @@ -81,6 +81,11 @@ ASSYM(TD_KSE, offsetof(struct thread, td_kse)); ASSYM(TD_PROC, offsetof(struct thread, td_proc)); +ASSYM(KE_FLAGS, offsetof(struct kse, ke_flags)); + +ASSYM(KEF_ASTPENDING, KEF_ASTPENDING); +ASSYM(KEF_NEEDRESCHED, KEF_NEEDRESCHED); + ASSYM(TD_MD_FLAGS, offsetof(struct thread, td_md.md_flags)); ASSYM(TD_MD_PCBPADDR, offsetof(struct thread, td_md.md_pcbpaddr)); ASSYM(TD_MD_HAE, offsetof(struct thread, td_md.md_hae)); ==== //depot/projects/smpng/sys/alpha/alpha/machdep.c#32 (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/alpha/alpha/machdep.c,v 1.169 2002/03/21 06:14:57 imp Exp $ + * $FreeBSD: src/sys/alpha/alpha/machdep.c,v 1.170 2002/03/27 09:23:37 jeff Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -955,7 +955,7 @@ */ mtx_init(&Giant, "Giant", MTX_DEF | MTX_RECURSE); mtx_init(&sched_lock, "sched lock", MTX_SPIN | MTX_RECURSE); - mtx_init(&proc0.p_mtx, "process lock", MTX_DEF); + mtx_init(&proc0.p_mtx, "process lock", MTX_DEF|MTX_DUPOK); mtx_init(&clock_lock, "clk", MTX_SPIN | MTX_RECURSE); mtx_init(&icu_lock, "icu", MTX_SPIN); mtx_lock(&Giant); ==== //depot/projects/smpng/sys/alpha/alpha/trap.c#29 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/alpha/alpha/trap.c,v 1.89 2002/03/21 06:14:57 imp Exp $ */ +/* $FreeBSD: src/sys/alpha/alpha/trap.c,v 1.90 2002/03/29 18:55:07 alc Exp $ */ /* $NetBSD: trap.c,v 1.31 1998/03/26 02:21:46 thorpej Exp $ */ /* @@ -534,13 +534,13 @@ /* * Grow the stack if necessary */ - /* grow_stack returns false only if va falls into + /* vm_map_growstack fails only if va falls into * a growable stack region and the stack growth - * fails. It returns true if va was not within + * fails. It succeeds if va was not within * a growable stack region, or if the stack * growth succeeded. */ - if (!grow_stack (p, va)) + if (vm_map_growstack(p, va) != KERN_SUCCESS) rv = KERN_FAILURE; else /* Fault in the user page: */ ==== //depot/projects/smpng/sys/alpha/conf/GENERIC#14 (text+ko) ==== @@ -19,7 +19,7 @@ # # For hardware specific information check HARDWARE.TXT # -# $FreeBSD: src/sys/alpha/conf/GENERIC,v 1.133 2002/03/24 14:35:20 wilko Exp $ +# $FreeBSD: src/sys/alpha/conf/GENERIC,v 1.134 2002/03/27 21:10:38 wilko Exp $ machine alpha cpu EV4 @@ -137,7 +137,6 @@ device ppc device ppbus # Parallel port bus (required) device lpt # Printer -#device plip # TCP/IP over parallel device ppi # Parallel port interface device #device vpo # Requires scbus and da ==== //depot/projects/smpng/sys/alpha/include/cpufunc.h#6 (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/alpha/include/cpufunc.h,v 1.13 2002/03/21 06:14:57 imp Exp $ + * $FreeBSD: src/sys/alpha/include/cpufunc.h,v 1.14 2002/03/27 05:39:16 dillon Exp $ */ #ifndef _MACHINE_CPUFUNC_H_ @@ -35,7 +35,7 @@ #include #include -#define CRITICAL_FORK (ALPHA_PSL_IPL_0) +struct thread; #ifdef __GNUC__ @@ -47,18 +47,6 @@ #endif -static __inline critical_t -cpu_critical_enter(void) -{ - return (alpha_pal_swpipl(ALPHA_PSL_IPL_MCES)); -} - -static __inline void -cpu_critical_exit(critical_t ipl) -{ - alpha_pal_swpipl(ipl); -} - static __inline register_t intr_disable(void) { @@ -71,6 +59,10 @@ alpha_pal_swpipl(ipl); } +void cpu_critical_enter(void); +void cpu_critical_exit(void); +void cpu_critical_fork_exit(void); +void cpu_thread_link(struct thread *td); #endif /* _KERNEL */ ==== //depot/projects/smpng/sys/alpha/include/proc.h#4 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/alpha/include/proc.h,v 1.13 2001/12/11 23:33:39 jhb Exp $ */ +/* $FreeBSD: src/sys/alpha/include/proc.h,v 1.14 2002/03/27 05:39:16 dillon Exp $ */ /* From: NetBSD: proc.h,v 1.3 1997/04/06 08:47:36 cgd Exp */ /* @@ -47,6 +47,7 @@ u_int64_t md_hae; /* user HAE register value */ void *osf_sigtramp; /* user-level signal trampoline */ u_int md_kernnest; /* nesting level in the kernel */ + register_t md_savecrit; /* save PSL for critical section */ }; #define MDP_FPUSED 0x0001 /* Process used the FPU */ ==== //depot/projects/smpng/sys/alpha/mcbus/mcbus.c#2 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/alpha/mcbus/mcbus.c,v 1.2 2000/08/28 21:48:02 dfr Exp $ */ +/* $FreeBSD: src/sys/alpha/mcbus/mcbus.c,v 1.3 2002/03/26 19:46:40 dfr Exp $ */ /* * Copyright (c) 2000 by Matthew Jacob * All rights reserved. @@ -43,6 +43,7 @@ #include #include +#include struct mcbus_device *mcbus_primary_cpu = NULL; @@ -106,6 +107,34 @@ static const int mcbus_mcpcia_probe_order[] = { 5, 4, 7, 6 }; /* + * Early console support requires us to partially probe the bus to + * find the ISA bus resources. + */ +void +mcbus_init(void) +{ + static int initted = 0; + int i, mid, gid; + + if (initted) return; + initted = 1; + + /* + * We only look at the first two mids because at this point, + * badaddr() doesn't work so we can't call NO_MCPCIA_AT(). + */ + gid = MCBUS_GID_FROM_INSTANCE(0); + for (i = 0; i < 2; ++i) { + mid = mcbus_mcpcia_probe_order[i]; + + if (NO_MCPCIA_AT(mid, gid)) { + continue; + } + mcpcia_init(gid, mid); + } +} + +/* * At 'probe' time, we add all the devices which we know about to the * bus. The generic attach routine will probe and attach them if they * are alive. ==== //depot/projects/smpng/sys/alpha/mcbus/mcbusvar.h#2 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/alpha/mcbus/mcbusvar.h,v 1.1 2000/05/07 04:53:04 mjacob Exp $ */ +/* $FreeBSD: src/sys/alpha/mcbus/mcbusvar.h,v 1.2 2002/03/26 19:46:40 dfr Exp $ */ /* * Copyright (c) 2000 by Matthew Jacob * All rights reserved. @@ -71,3 +71,5 @@ #define MCBUS_TYPE_PCI 4 #define DEVTOMCBUS(dev) ((struct mcbus_device *) device_get_ivars(dev)) + +extern void mcbus_init(void); ==== //depot/projects/smpng/sys/alpha/mcbus/mcpcia.c#14 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/alpha/mcbus/mcpcia.c,v 1.22 2002/03/01 23:10:19 mjacob Exp $ */ +/* $FreeBSD: src/sys/alpha/mcbus/mcpcia.c,v 1.23 2002/03/26 19:46:40 dfr Exp $ */ /* * Copyright (c) 2000 Matthew Jacob * All rights reserved. @@ -120,6 +120,40 @@ static struct mcpcia_softc *mcpcia_root; +/* + * Early console support requires us to partially probe the bus to + * find the ISA bus resources. + */ +void +mcpcia_init(int gid, int mid) +{ + static struct swiz_space io_space; + static struct swiz_space mem_space; + u_int64_t sysbase; + vm_offset_t regs, io_base, smem_base; + + sysbase = MCBUS_IOSPACE | + (((u_int64_t) gid) << MCBUS_GID_SHIFT) | + (((u_int64_t) mid) << MCBUS_MID_SHIFT); + + if (EISA_PRESENT(REGVAL(sysbase + | MCPCIA_PCI_BRIDGE + | _MCPCIA_PCI_REV))) { + /* + * Define temporary spaces for bootstrap i/o. + */ + regs = (vm_offset_t) KV(sysbase); + io_base = regs + MCPCIA_PCI_IOSPACE; + smem_base = regs + MCPCIA_PCI_SPARSE; + + swiz_init_space(&io_space, io_base); + swiz_init_space(&mem_space, smem_base); + + busspace_isa_io = (struct alpha_busspace *) &io_space; + busspace_isa_mem = (struct alpha_busspace *) &mem_space; + } +} + static int mcpcia_probe(device_t dev) { @@ -233,10 +267,6 @@ &sc->io_space; busspace_isa_mem = (struct alpha_busspace *) &sc->mem_space; - printf("Attaching Real Console\n"); - mcpcia_enable_intr(sc, 16); - dec_kn300_cons_init(); - promcndetach(); /* * Enable EISA interrupts. */ ==== //depot/projects/smpng/sys/alpha/mcbus/mcpciavar.h#2 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/alpha/mcbus/mcpciavar.h,v 1.2 2001/02/13 22:46:30 mjacob Exp $ */ +/* $FreeBSD: src/sys/alpha/mcbus/mcpciavar.h,v 1.3 2002/03/26 19:46:40 dfr Exp $ */ /* * Copyright (c) 1998, 2000 by Matthew Jacob @@ -61,3 +61,5 @@ */ #define MCPCIA_I2C_CVEC 0xA90 #define MCPCIA_I2C_BVEC 0xAA0 + +extern void mcpcia_init(int, int); ==== //depot/projects/smpng/sys/boot/Makefile#4 (text+ko) ==== @@ -1,10 +1,10 @@ -# $FreeBSD: src/sys/boot/Makefile,v 1.11 2001/10/25 09:05:47 ru Exp $ +# $FreeBSD: src/sys/boot/Makefile,v 1.12 2002/03/28 01:37:10 obrien Exp $ # Build the add-in FORTH interpreter SUBDIR+= ficl -# Build OpenFirmware library on PowerPC -.if ${MACHINE_ARCH} == "powerpc" +# Build OpenFirmware library +.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "sparc64" SUBDIR+= ofw .endif ==== //depot/projects/smpng/sys/boot/common/Makefile.inc#2 (text+ko) ==== @@ -1,9 +1,13 @@ -# $FreeBSD: src/sys/boot/common/Makefile.inc,v 1.12 2001/03/27 11:59:21 ru Exp $ +# $FreeBSD: src/sys/boot/common/Makefile.inc,v 1.13 2002/03/28 01:28:21 obrien Exp $ SRCS+= bcache.c boot.c commands.c console.c devopen.c interp.c -SRCS+= interp_backslash.c interp_parse.c load_aout.c load_elf.c ls.c misc.c +SRCS+= interp_backslash.c interp_parse.c load_elf.c ls.c misc.c SRCS+= module.c panic.c +.if defined(LOADER_AOUT_SUPPORT) +SRCS+= load_aout.c +.endif + .if defined(LOADER_NET_SUPPORT) SRCS+= dev_net.c .endif ==== //depot/projects/smpng/sys/boot/efi/libefi/arch/ia64/start.S#3 (text+ko) ==== @@ -23,12 +23,11 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/boot/efi/libefi/arch/ia64/start.S,v 1.3 2001/10/24 20:14:49 dfr Exp $ + * $FreeBSD: src/sys/boot/efi/libefi/arch/ia64/start.S,v 1.4 2002/03/28 07:07:45 marcel Exp $ */ .text -#include #include #define EFI_SUCCESS 0 ==== //depot/projects/smpng/sys/boot/efi/libefi/efifs.c#5 (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/efi/libefi/efifs.c,v 1.4 2002/03/19 23:05:33 peter Exp $ + * $FreeBSD: src/sys/boot/efi/libefi/efifs.c,v 1.5 2002/03/30 01:36:03 marcel Exp $ */ #include @@ -48,7 +48,12 @@ CHAR16 *cp; CHAR16 *path; - if (!dev->d_handle) + /* + * We cannot blindly assume that f->f_devdata points to a + * efi_devdesc structure. Before we dereference 'dev', make + * sure that the underlying device is ours. + */ + if (f->f_dev != &efifs_dev || dev->d_handle == NULL) return ENOENT; status = BS->HandleProtocol(dev->d_handle, &sfsid, (VOID **)&sfs); ==== //depot/projects/smpng/sys/boot/efi/libefi/efinet.c#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/efi/libefi/efinet.c,v 1.1 2001/09/22 19:10:56 dfr Exp $ + * $FreeBSD: src/sys/boot/efi/libefi/efinet.c,v 1.3 2002/03/30 04:50:52 marcel Exp $ */ #include @@ -39,6 +39,40 @@ extern struct netif_driver efi_net; +#ifdef EFINET_DEBUG +static void +dump_mode(EFI_SIMPLE_NETWORK_MODE *mode) +{ + int i; + + printf("State = %x\n", mode->State); + printf("HwAddressSize = %u\n", mode->HwAddressSize); + printf("MediaHeaderSize = %u\n", mode->MediaHeaderSize); + printf("MaxPacketSize = %u\n", mode->MaxPacketSize); + printf("NvRamSize = %u\n", mode->NvRamSize); + printf("NvRamAccessSize = %u\n", mode->NvRamAccessSize); + printf("ReceiveFilterMask = %x\n", mode->ReceiveFilterMask); + printf("ReceiveFilterSetting = %u\n", mode->ReceiveFilterSetting); + printf("MaxMCastFilterCount = %u\n", mode->MaxMCastFilterCount); + printf("MCastFilterCount = %u\n", mode->MCastFilterCount); + printf("MCastFilter = {"); + for (i = 0; i < mode->MCastFilterCount; i++) + printf(" %s", ether_sprintf(mode->MCastFilter[i].Addr)); + printf(" }\n"); + printf("CurrentAddress = %s\n", + ether_sprintf(mode->CurrentAddress.Addr)); + printf("BroadcastAddress = %s\n", + ether_sprintf(mode->BroadcastAddress.Addr)); + printf("PermanentAddress = %s\n", + ether_sprintf(mode->PermanentAddress.Addr)); + printf("IfType = %u\n", mode->IfType); + printf("MacAddressChangeable = %d\n", mode->MacAddressChangeable); + printf("MultipleTxSupported = %d\n", mode->MultipleTxSupported); + printf("MediaPresentSupported = %d\n", mode->MediaPresentSupported); + printf("MediaPresent = %d\n", mode->MediaPresent); +} +#endif + int efinet_match(struct netif *nif, void *machdep_hint) { @@ -56,26 +90,39 @@ int efinet_put(struct iodesc *desc, void *pkt, size_t len) { - EFI_SIMPLE_NETWORK *net = desc->io_netif->nif_devdata; + struct netif *nif = desc->io_netif; + EFI_SIMPLE_NETWORK *net; EFI_STATUS status; - int i; + void *buf; + + net = nif->nif_devdata; status = net->Transmit(net, 0, len, pkt, 0, 0, 0); - if (!EFI_ERROR(status)) - return len; - else + if (status != EFI_SUCCESS) return -1; + + /* Wait for the buffer to be transmitted */ + buf = 0; /* XXX Is this needed? */ + do { + status = net->GetStatus(net, 0, &buf); + } while (status == EFI_SUCCESS && buf != pkt); + + /* XXX How do we deal with status != EFI_SUCCESS now? */ + return (status == EFI_SUCCESS) ? len : -1; } int efinet_get(struct iodesc *desc, void *pkt, size_t len, time_t timeout) { - EFI_SIMPLE_NETWORK *net = desc->io_netif->nif_devdata; + struct netif *nif = desc->io_netif; + EFI_SIMPLE_NETWORK *net; EFI_STATUS status; UINTN bufsz; time_t t; + net = nif->nif_devdata; + t = time(0); while ((time(0) - t) < timeout) { bufsz = len; @@ -92,16 +139,46 @@ void efinet_init(struct iodesc *desc, void *machdep_hint) { - struct netif *nif; - EFI_SIMPLE_NETWORK *net; - int i; + struct netif *nif = desc->io_netif; + EFI_SIMPLE_NETWORK *net; + EFI_STATUS status; - nif = desc->io_netif; net = nif->nif_driver->netif_ifs[nif->nif_unit].dif_private; - desc->io_netif->nif_devdata = net; + nif->nif_devdata = net; + + if (net->Mode->State == EfiSimpleNetworkStopped) { + status = net->Start(net); + if (status != EFI_SUCCESS) { + printf("net%d: cannot start interface (status=%d)\n", + nif->nif_unit, status); + return; + } + } + + if (net->Mode->State != EfiSimpleNetworkInitialized) { + status = net->Initialize(net, 0, 0); + if (status != EFI_SUCCESS) { + printf("net%d: cannot init. interface (status=%d)\n", + nif->nif_unit, status); + return; + } + } + + if (net->Mode->ReceiveFilterSetting == 0) { + UINT32 mask = EFI_SIMPLE_NETWORK_RECEIVE_UNICAST | + EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST; + + status = net->ReceiveFilters(net, mask, 0, FALSE, 0, 0); + if (status != EFI_SUCCESS) { + printf("net%d: cannot set rx. filters (status=%d)\n", + nif->nif_unit, status); + return; + } + } - net->Start(net); - net->Initialize(net, 0, 0); +#ifdef EFINET_DEBUG + dump_mode(net->Mode); +#endif bcopy(net->Mode->CurrentAddress.Addr, desc->myea, 6); desc->xid = 1; @@ -145,7 +222,6 @@ dif->dif_unit = i; dif->dif_nsel = 1; dif->dif_stats = &stats[i]; - dif->dif_private = handles[i]; BS->HandleProtocol(handles[i], &netid, (VOID**) &dif->dif_private); ==== //depot/projects/smpng/sys/boot/efi/libefi/elf_freebsd.c#5 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/boot/efi/libefi/elf_freebsd.c,v 1.5 2001/10/25 08:53:39 dfr Exp $ */ +/* $FreeBSD: src/sys/boot/efi/libefi/elf_freebsd.c,v 1.6 2002/03/30 23:00:04 marcel Exp $ */ /* $NetBSD: loadfile.c,v 1.10 1998/06/25 06:45:46 ross Exp $ */ /*- @@ -129,7 +129,7 @@ __asm __volatile("mov cr.iip=%0" :: "r"(start)); __asm __volatile("mov cr.ifs=r0;;"); __asm __volatile("mov ar.rsc=0;; flushrs;;"); - + __asm __volatile("mov r8=%0" :: "r" (bi)); __asm __volatile("rfi;;"); } ==== //depot/projects/smpng/sys/boot/efi/loader/Makefile#5 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/boot/efi/loader/Makefile,v 1.8 2001/10/08 01:41:45 marcel Exp $ +# $FreeBSD: src/sys/boot/efi/loader/Makefile,v 1.10 2002/03/31 20:48:13 marcel Exp $ .PATH: ${.CURDIR}/../common @@ -62,6 +62,7 @@ -j .rela \ -j .reloc \ -j .dynsym \ + -j .dynstr \ --target=efi-app-${MACHINE_ARCH} \ ${BASE}.sym ${BASE}.efi @@ -70,12 +71,9 @@ > ${.TARGET} beforeinstall: -.if exists(${.OBJDIR}/loader.help) +.if exists(${.OBJDIR}/${BASE}.help) ${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 \ ${.OBJDIR}/${BASE}.help ${DESTDIR}/boot -.else - ${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 \ - ${.CURDIR}/${BASE}.help ${DESTDIR}/boot .endif # Other fragments still to be brought in from ../Makfile.booters? @@ -87,10 +85,9 @@ .include -${BASE}.sym: ${OBJS} ${LIBSTAND} ${LIBEFI} ${CRT} vers.o - ${LD} ${LDFLAGS} -o ${BASE}.sym -M \ - ${CRT} ${OBJS} vers.o \ - ${LIBFICL} ${LIBSTAND} ${LIBEFI} ${LIBSTAND} \ +${BASE}.sym: ${OBJS} ${LIBEFI} ${CRT} vers.o + ${LD} ${LDFLAGS} -o ${BASE}.sym -M ${CRT} ${OBJS} vers.o \ + ${LIBFICL} ${LIBEFI} -L${DESTDIR}${LIBDIR} ${LIBSTAND} \ > ${.OBJDIR}/${BASE}.list beforedepend ${OBJS}: machine ==== //depot/projects/smpng/sys/boot/efi/loader/main.c#4 (text+ko) ==== @@ -27,7 +27,7 @@ #ifndef lint static const char rcsid[] = - "$FreeBSD: src/sys/boot/efi/loader/main.c,v 1.9 2001/09/25 19:44:19 dfr Exp $"; + "$FreeBSD: src/sys/boot/efi/loader/main.c,v 1.10 2002/03/30 07:32:08 marcel Exp $"; #endif /* not lint */ #include @@ -98,10 +98,15 @@ EFI_STATUS efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *system_table) { - int i; + static EFI_GUID imgid = LOADED_IMAGE_PROTOCOL; + static EFI_GUID netid = EFI_SIMPLE_NETWORK_PROTOCOL; EFI_PHYSICAL_ADDRESS mem; + EFI_LOADED_IMAGE *img; + EFI_SIMPLE_NETWORK *net; + EFI_STATUS status; struct ia64_pal_result res; char buf[32]; + int i; >>> TRUNCATED FOR MAIL (1000 lines) <<< To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message