PERFORCE change 105207 for review
Alex Lyashkov
als at FreeBSD.org
Mon Aug 28 05:20:45 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=105207
Change 105207 by als at als_head on 2006/08/28 05:20:33
update to last HEAD
Affected files ...
.. //depot/projects/jail2/sys/amd64/amd64/support.S#3 integrate
.. //depot/projects/jail2/sys/amd64/linux32/linux32_dummy.c#4 integrate
.. //depot/projects/jail2/sys/amd64/linux32/linux32_machdep.c#3 integrate
.. //depot/projects/jail2/sys/amd64/linux32/linux32_proto.h#4 integrate
.. //depot/projects/jail2/sys/amd64/linux32/linux32_syscall.h#4 integrate
.. //depot/projects/jail2/sys/amd64/linux32/linux32_sysent.c#4 integrate
.. //depot/projects/jail2/sys/amd64/linux32/syscalls.master#4 integrate
.. //depot/projects/jail2/sys/arm/arm/busdma_machdep.c#2 integrate
.. //depot/projects/jail2/sys/arm/arm/cpufunc.c#2 integrate
.. //depot/projects/jail2/sys/arm/arm/elf_trampoline.c#4 integrate
.. //depot/projects/jail2/sys/arm/arm/fusu.S#2 integrate
.. //depot/projects/jail2/sys/arm/arm/identcpu.c#2 integrate
.. //depot/projects/jail2/sys/arm/at91/if_ate.c#4 integrate
.. //depot/projects/jail2/sys/arm/conf/EP80219#1 branch
.. //depot/projects/jail2/sys/arm/include/armreg.h#2 integrate
.. //depot/projects/jail2/sys/arm/include/cpuconf.h#2 integrate
.. //depot/projects/jail2/sys/arm/include/cpufunc.h#2 integrate
.. //depot/projects/jail2/sys/arm/include/elf.h#2 integrate
.. //depot/projects/jail2/sys/arm/include/vmparam.h#3 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/ep80219_machdep.c#1 branch
.. //depot/projects/jail2/sys/arm/xscale/i80321/files.ep80219#1 branch
.. //depot/projects/jail2/sys/arm/xscale/i80321/files.i80219#1 branch
.. //depot/projects/jail2/sys/arm/xscale/i80321/i80321_intr.h#2 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/i80321_pci.c#2 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/i80321reg.h#2 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/i80321var.h#2 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/iq31244_machdep.c#3 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/iq80321.c#3 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/iq80321reg.h#2 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/std.ep80219#1 branch
.. //depot/projects/jail2/sys/arm/xscale/i80321/std.i80219#1 branch
.. //depot/projects/jail2/sys/bsm/audit.h#2 integrate
.. //depot/projects/jail2/sys/bsm/audit_internal.h#2 integrate
.. //depot/projects/jail2/sys/bsm/audit_kevents.h#3 integrate
.. //depot/projects/jail2/sys/bsm/audit_record.h#3 integrate
.. //depot/projects/jail2/sys/cam/scsi/scsi_all.c#2 integrate
.. //depot/projects/jail2/sys/cam/scsi/scsi_all.h#2 integrate
.. //depot/projects/jail2/sys/compat/linux/linux_futex.c#2 integrate
.. //depot/projects/jail2/sys/compat/linux/linux_misc.c#5 integrate
.. //depot/projects/jail2/sys/compat/linux/linux_stats.c#3 integrate
.. //depot/projects/jail2/sys/conf/NOTES#5 integrate
.. //depot/projects/jail2/sys/conf/files.powerpc#3 integrate
.. //depot/projects/jail2/sys/conf/options.arm#3 integrate
.. //depot/projects/jail2/sys/crypto/sha2/sha2.c#2 integrate
.. //depot/projects/jail2/sys/dev/ata/ata-raid.c#2 integrate
.. //depot/projects/jail2/sys/dev/bge/if_bge.c#3 integrate
.. //depot/projects/jail2/sys/dev/bge/if_bgereg.h#3 integrate
.. //depot/projects/jail2/sys/dev/em/if_em.c#3 integrate
.. //depot/projects/jail2/sys/dev/fb/creator.c#2 integrate
.. //depot/projects/jail2/sys/dev/iicbus/if_ic.c#2 integrate
.. //depot/projects/jail2/sys/dev/iicbus/iicbb.c#2 integrate
.. //depot/projects/jail2/sys/dev/isp/isp_ioctl.h#3 integrate
.. //depot/projects/jail2/sys/dev/isp/isp_pci.c#3 integrate
.. //depot/projects/jail2/sys/dev/ispfw/asm_2400.h#1 branch
.. //depot/projects/jail2/sys/dev/ispfw/ispfw.c#3 integrate
.. //depot/projects/jail2/sys/dev/mii/brgphy.c#3 integrate
.. //depot/projects/jail2/sys/i386/i386/support.s#3 integrate
.. //depot/projects/jail2/sys/i386/linux/linux_dummy.c#4 integrate
.. //depot/projects/jail2/sys/i386/linux/linux_machdep.c#3 integrate
.. //depot/projects/jail2/sys/i386/linux/linux_proto.h#4 integrate
.. //depot/projects/jail2/sys/i386/linux/linux_syscall.h#4 integrate
.. //depot/projects/jail2/sys/i386/linux/linux_sysent.c#4 integrate
.. //depot/projects/jail2/sys/i386/linux/syscalls.master#4 integrate
.. //depot/projects/jail2/sys/ia64/ia64/support.S#2 integrate
.. //depot/projects/jail2/sys/ia64/include/vmparam.h#2 integrate
.. //depot/projects/jail2/sys/kern/init_main.c#3 integrate
.. //depot/projects/jail2/sys/kern/init_sysent.c#3 integrate
.. //depot/projects/jail2/sys/kern/kern_thr.c#3 integrate
.. //depot/projects/jail2/sys/kern/kern_thread.c#3 integrate
.. //depot/projects/jail2/sys/kern/kern_umtx.c#2 integrate
.. //depot/projects/jail2/sys/kern/sched_4bsd.c#3 integrate
.. //depot/projects/jail2/sys/kern/sched_core.c#3 integrate
.. //depot/projects/jail2/sys/kern/sched_ule.c#2 integrate
.. //depot/projects/jail2/sys/kern/subr_witness.c#2 integrate
.. //depot/projects/jail2/sys/kern/syscalls.c#3 integrate
.. //depot/projects/jail2/sys/kern/syscalls.master#3 integrate
.. //depot/projects/jail2/sys/kern/systrace_args.c#2 integrate
.. //depot/projects/jail2/sys/kern/vfs_mount.c#4 integrate
.. //depot/projects/jail2/sys/modules/ispfw/Makefile#3 integrate
.. //depot/projects/jail2/sys/modules/ispfw/isp_2400/Makefile#1 branch
.. //depot/projects/jail2/sys/net/if_bridge.c#4 integrate
.. //depot/projects/jail2/sys/net/if_ethersubr.c#3 integrate
.. //depot/projects/jail2/sys/net/if_spppsubr.c#3 integrate
.. //depot/projects/jail2/sys/net/if_vlan.c#4 integrate
.. //depot/projects/jail2/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c#3 integrate
.. //depot/projects/jail2/sys/netgraph/bluetooth/socket/ng_btsocket_rfcomm.c#3 integrate
.. //depot/projects/jail2/sys/netgraph/ng_fec.c#2 integrate
.. //depot/projects/jail2/sys/netinet/tcp_subr.c#3 integrate
.. //depot/projects/jail2/sys/netsmb/smb_crypt.c#2 integrate
.. //depot/projects/jail2/sys/netsmb/smb_iod.c#2 integrate
.. //depot/projects/jail2/sys/netsmb/smb_rq.c#2 integrate
.. //depot/projects/jail2/sys/netsmb/smb_rq.h#2 integrate
.. //depot/projects/jail2/sys/pci/agp_amd64.c#2 integrate
.. //depot/projects/jail2/sys/powerpc/include/gdb_machdep.h#1 branch
.. //depot/projects/jail2/sys/powerpc/include/vmparam.h#2 integrate
.. //depot/projects/jail2/sys/powerpc/powerpc/copyinout.c#2 integrate
.. //depot/projects/jail2/sys/powerpc/powerpc/gdb_machdep.c#1 branch
.. //depot/projects/jail2/sys/security/audit/audit_bsm.c#3 integrate
.. //depot/projects/jail2/sys/security/audit/audit_bsm_token.c#3 integrate
.. //depot/projects/jail2/sys/security/audit/audit_ioctl.h#2 integrate
.. //depot/projects/jail2/sys/security/audit/audit_pipe.c#2 integrate
.. //depot/projects/jail2/sys/security/mac_mls/mac_mls.c#2 integrate
.. //depot/projects/jail2/sys/sparc64/sparc64/support.S#2 integrate
.. //depot/projects/jail2/sys/sys/kobj.h#2 integrate
.. //depot/projects/jail2/sys/sys/proc.h#2 integrate
.. //depot/projects/jail2/sys/sys/sched.h#2 integrate
.. //depot/projects/jail2/sys/sys/syscall.h#3 integrate
.. //depot/projects/jail2/sys/sys/syscall.mk#3 integrate
.. //depot/projects/jail2/sys/sys/sysctl.h#3 integrate
.. //depot/projects/jail2/sys/sys/sysproto.h#3 integrate
.. //depot/projects/jail2/sys/sys/systm.h#4 integrate
.. //depot/projects/jail2/sys/sys/umtx.h#2 integrate
.. //depot/projects/jail2/sys/ufs/ffs/ffs_snapshot.c#2 integrate
.. //depot/projects/jail2/sys/vm/vm_contig.c#2 integrate
.. //depot/projects/jail2/sys/vm/vm_object.c#4 integrate
.. //depot/projects/jail2/sys/vm/vm_page.c#4 integrate
.. //depot/projects/jail2/sys/vm/vm_page.h#3 integrate
.. //depot/projects/jail2/sys/vm/vm_pageq.c#3 integrate
.. //depot/projects/jail2/sys/vm/vm_zeroidle.c#2 integrate
Differences ...
==== //depot/projects/jail2/sys/amd64/amd64/support.S#3 (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.119 2006/08/16 22:22:28 davidxu Exp $
+ * $FreeBSD: src/sys/amd64/amd64/support.S,v 1.120 2006/08/28 02:28:14 davidxu Exp $
*/
#include "opt_ddb.h"
@@ -314,6 +314,34 @@
ret
/*
+ * casuword32. Compare and set user integer. Returns -1 or the current value.
+ * dst = %rdi, old = %rsi, new = %rdx
+ */
+ENTRY(casuword32)
+ movq PCPU(CURPCB),%rcx
+ movq $fusufault,PCB_ONFAULT(%rcx)
+
+ movq $VM_MAXUSER_ADDRESS-4,%rax
+ cmpq %rax,%rdi /* verify address is valid */
+ ja fusufault
+
+ movl %esi,%eax /* old */
+#ifdef SMP
+ lock
+#endif
+ cmpxchgl %edx,(%rdi) /* new = %edx */
+
+ /*
+ * The old value is in %eax. If the store succeeded it will be the
+ * value we expected (old) from before the store, otherwise it will
+ * be the current value.
+ */
+
+ movq PCPU(CURPCB),%rcx
+ movq $0,PCB_ONFAULT(%rcx)
+ ret
+
+/*
* casuptr. Compare and set user pointer. Returns -1 or the current value.
* dst = %rdi, old = %rsi, new = %rdx
*/
==== //depot/projects/jail2/sys/amd64/linux32/linux32_dummy.c#4 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_dummy.c,v 1.4 2006/08/15 12:54:29 netchild Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_dummy.c,v 1.5 2006/08/27 08:56:53 netchild Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -77,7 +77,6 @@
DUMMY(timer_gettime);
DUMMY(timer_getoverrun);
DUMMY(timer_delete);
-DUMMY(statfs64);
DUMMY(fstatfs64);
DUMMY(utimes);
DUMMY(fadvise64_64);
==== //depot/projects/jail2/sys/amd64/linux32/linux32_machdep.c#3 (text+ko) ====
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_machdep.c,v 1.14 2006/08/16 18:54:50 netchild Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_machdep.c,v 1.16 2006/08/25 11:59:56 netchild Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -60,6 +60,7 @@
#include <compat/linux/linux_ipc.h>
#include <compat/linux/linux_signal.h>
#include <compat/linux/linux_util.h>
+#include <compat/linux/linux_emul.h>
struct l_old_select_argv {
l_int nfds;
@@ -211,6 +212,14 @@
free(path, M_TEMP);
if (error == 0)
error = kern_execve(td, &eargs, NULL);
+ if (error == 0)
+ /* linux process can exec fbsd one, dont attempt
+ * to create emuldata for such process using
+ * linux_proc_init, this leads to a panic on KASSERT
+ * because such process has p->p_emuldata == NULL
+ */
+ if (td->td_proc->p_sysent == &elf_linux_sysvec)
+ error = linux_proc_init(td, 0, 0);
return (error);
}
@@ -452,6 +461,10 @@
if (td->td_retval[1] == 1)
td->td_retval[0] = 0;
+ error = linux_proc_init(td, td->td_retval[0], 0);
+ if (error)
+ return (error);
+
return (0);
}
@@ -459,17 +472,31 @@
linux_vfork(struct thread *td, struct linux_vfork_args *args)
{
int error;
+ struct proc *p2;
#ifdef DEBUG
if (ldebug(vfork))
printf(ARGS(vfork, ""));
#endif
- if ((error = vfork(td, (struct vfork_args *)args)) != 0)
+ /* exclude RFPPWAIT */
+ if ((error = fork1(td, RFFDG | RFPROC | RFMEM, 0, &p2)) != 0)
return (error);
+ if (error == 0) {
+ td->td_retval[0] = p2->p_pid;
+ td->td_retval[1] = 0;
+ }
/* Are we the child? */
if (td->td_retval[1] == 1)
td->td_retval[0] = 0;
+ error = linux_proc_init(td, td->td_retval[0], 0);
+ if (error)
+ return (error);
+ /* wait for the children to exit, ie. emulate vfork */
+ PROC_LOCK(p2);
+ while (p2->p_flag & P_PPWAIT)
+ msleep(td->td_proc, &p2->p_mtx, PWAIT, "ppwait", 0);
+ PROC_UNLOCK(p2);
return (0);
}
@@ -480,12 +507,14 @@
struct proc *p2;
struct thread *td2;
int exit_signal;
+ struct linux_emuldata *em;
#ifdef DEBUG
if (ldebug(clone)) {
- printf(ARGS(clone, "flags %x, stack %x"),
- (unsigned int)(uintptr_t)args->flags,
- (unsigned int)(uintptr_t)args->stack);
+ printf(ARGS(clone, "flags %x, stack %x, parent tid: %x, child tid: %x"),
+ (unsigned int)args->flags, (unsigned int)(uintptr_t)args->stack,
+ (unsigned int)(uintptr_t)args->parent_tidptr,
+ (unsigned int)(uintptr_t)args->child_tidptr);
}
#endif
@@ -503,11 +532,75 @@
if (!(args->flags & CLONE_FILES))
ff |= RFFDG;
+ /*
+ * Attempt to detect when linux_clone(2) is used for creating
+ * kernel threads. Unfortunately despite the existence of the
+ * CLONE_THREAD flag, version of linuxthreads package used in
+ * most popular distros as of beginning of 2005 doesn't make
+ * any use of it. Therefore, this detection relay fully on
+ * empirical observation that linuxthreads sets certain
+ * combination of flags, so that we can make more or less
+ * precise detection and notify the FreeBSD kernel that several
+ * processes are in fact part of the same threading group, so
+ * that special treatment is necessary for signal delivery
+ * between those processes and fd locking.
+ */
+ if ((args->flags & 0xffffff00) == THREADING_FLAGS)
+ ff |= RFTHREAD;
+
error = fork1(td, ff, 0, &p2);
if (error)
return (error);
+ /* create the emuldata */
+ error = linux_proc_init(td, p2->p_pid, args->flags);
+ /* reference it - no need to check this */
+ em = em_find(p2, EMUL_UNLOCKED);
+ KASSERT(em != NULL, ("clone: emuldata not found.\n"));
+ /* and adjust it */
+ if (args->flags & CLONE_PARENT_SETTID) {
+ if (args->parent_tidptr == NULL) {
+ EMUL_UNLOCK(&emul_lock);
+ return (EINVAL);
+ }
+ error = copyout(&p2->p_pid, args->parent_tidptr, sizeof(p2->p_pid));
+ if (error) {
+ EMUL_UNLOCK(&emul_lock);
+ return (error);
+ }
+ }
+ if (args->flags & CLONE_PARENT) {
+#ifdef DEBUG
+ printf("linux_clone: CLONE_PARENT\n");
+#endif
+ }
+
+ if (args->flags & CLONE_THREAD) {
+ /* XXX: linux mangles pgrp and pptr somehow
+ * I think it might be this but I am not sure.
+ */
+#ifdef notyet
+ p2->p_pgrp = td->td_proc->p_pgrp;
+ p2->p_pptr = td->td_proc->p_pptr;
+#endif
+ exit_signal = 0;
+#ifdef DEBUG
+ printf("linux_clone: CLONE_THREADS\n");
+#endif
+ }
+
+ if (args->flags & CLONE_CHILD_SETTID)
+ em->child_set_tid = args->child_tidptr;
+ else
+ em->child_set_tid = NULL;
+
+ if (args->flags & CLONE_CHILD_CLEARTID)
+ em->child_clear_tid = args->child_tidptr;
+ else
+ em->child_clear_tid = NULL;
+ EMUL_UNLOCK(&emul_lock);
+
PROC_LOCK(p2);
p2->p_sigparent = exit_signal;
PROC_UNLOCK(p2);
@@ -519,6 +612,10 @@
if (args->stack)
td2->td_frame->tf_rsp = PTROUT(args->stack);
+ if (args->flags & CLONE_SETTLS) {
+ /* XXX: todo */
+ }
+
#ifdef DEBUG
if (ldebug(clone))
printf(LMSG("clone: successful rfork to %ld, stack %p sig = %d"),
==== //depot/projects/jail2/sys/amd64/linux32/linux32_proto.h#4 (text+ko) ====
@@ -2,8 +2,8 @@
* System call prototypes.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/amd64/linux32/linux32_proto.h,v 1.21 2006/08/15 17:36:58 jhb Exp $
- * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.19 2006/08/15 12:28:14 netchild Exp
+ * $FreeBSD: src/sys/amd64/linux32/linux32_proto.h,v 1.22 2006/08/27 08:58:00 netchild Exp $
+ * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.20 2006/08/27 08:56:53 netchild Exp
*/
#ifndef _LINUX_SYSPROTO_H_
@@ -782,7 +782,8 @@
char rmtp_l_[PADL_(struct l_timespec *)]; struct l_timespec * rmtp; char rmtp_r_[PADR_(struct l_timespec *)];
};
struct linux_statfs64_args {
- register_t dummy;
+ char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char buf_l_[PADL_(struct l_statfs64_buf *)]; struct l_statfs64_buf * buf; char buf_r_[PADR_(struct l_statfs64_buf *)];
};
struct linux_fstatfs64_args {
register_t dummy;
==== //depot/projects/jail2/sys/amd64/linux32/linux32_syscall.h#4 (text+ko) ====
@@ -2,8 +2,8 @@
* System call numbers.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/amd64/linux32/linux32_syscall.h,v 1.21 2006/08/15 17:36:58 jhb Exp $
- * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.19 2006/08/15 12:28:14 netchild Exp
+ * $FreeBSD: src/sys/amd64/linux32/linux32_syscall.h,v 1.22 2006/08/27 08:58:00 netchild Exp $
+ * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.20 2006/08/27 08:56:53 netchild Exp
*/
#define LINUX_SYS_exit 1
==== //depot/projects/jail2/sys/amd64/linux32/linux32_sysent.c#4 (text+ko) ====
@@ -2,8 +2,8 @@
* System call switch table.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/amd64/linux32/linux32_sysent.c,v 1.21 2006/08/15 17:36:58 jhb Exp $
- * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.19 2006/08/15 12:28:14 netchild Exp
+ * $FreeBSD: src/sys/amd64/linux32/linux32_sysent.c,v 1.22 2006/08/27 08:58:00 netchild Exp $
+ * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.20 2006/08/27 08:56:53 netchild Exp
*/
#include <bsm/audit_kevents.h>
@@ -288,7 +288,7 @@
{ AS(linux_clock_gettime_args), (sy_call_t *)linux_clock_gettime, AUE_NULL, NULL, 0, 0 }, /* 265 = linux_clock_gettime */
{ AS(linux_clock_getres_args), (sy_call_t *)linux_clock_getres, AUE_NULL, NULL, 0, 0 }, /* 266 = linux_clock_getres */
{ AS(linux_clock_nanosleep_args), (sy_call_t *)linux_clock_nanosleep, AUE_NULL, NULL, 0, 0 }, /* 267 = linux_clock_nanosleep */
- { 0, (sy_call_t *)linux_statfs64, AUE_NULL, NULL, 0, 0 }, /* 268 = linux_statfs64 */
+ { AS(linux_statfs64_args), (sy_call_t *)linux_statfs64, AUE_NULL, NULL, 0, 0 }, /* 268 = linux_statfs64 */
{ 0, (sy_call_t *)linux_fstatfs64, AUE_NULL, NULL, 0, 0 }, /* 269 = linux_fstatfs64 */
{ AS(linux_tgkill_args), (sy_call_t *)linux_tgkill, AUE_NULL, NULL, 0, 0 }, /* 270 = linux_tgkill */
{ 0, (sy_call_t *)linux_utimes, AUE_NULL, NULL, 0, 0 }, /* 271 = linux_utimes */
==== //depot/projects/jail2/sys/amd64/linux32/syscalls.master#4 (text+ko) ====
@@ -1,4 +1,4 @@
- $FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.19 2006/08/15 12:28:14 netchild Exp $
+ $FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.20 2006/08/27 08:56:53 netchild Exp $
; @(#)syscalls.master 8.1 (Berkeley) 7/19/93
; System call name/number master file (or rather, slave, from LINUX).
@@ -430,7 +430,7 @@
266 AUE_NULL STD { int linux_clock_getres(clockid_t which, struct l_timespec *tp); }
267 AUE_NULL STD { int linux_clock_nanosleep(clockid_t which, int flags, \
struct l_timespec *rqtp, struct l_timespec *rmtp); }
-268 AUE_NULL STD { int linux_statfs64(void); }
+268 AUE_NULL STD { int linux_statfs64(char *path, struct l_statfs64_buf *buf); }
269 AUE_NULL STD { int linux_fstatfs64(void); }
270 AUE_NULL STD { int linux_tgkill(int tgid, int pid, int sig); }
271 AUE_NULL STD { int linux_utimes(void); }
==== //depot/projects/jail2/sys/arm/arm/busdma_machdep.c#2 (text+ko) ====
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.26 2006/05/31 15:50:33 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.27 2006/08/25 15:10:45 cognet Exp $");
/*
* MacPPC bus dma support routines
@@ -346,6 +346,7 @@
}
*mapp = newmap;
newmap->dmat = dmat;
+ newmap->allocbuffer = NULL;
dmat->map_count++;
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
==== //depot/projects/jail2/sys/arm/arm/cpufunc.c#2 (text+ko) ====
@@ -45,7 +45,7 @@
* Created : 30/01/97
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/cpufunc.c,v 1.10 2006/04/09 23:07:31 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/cpufunc.c,v 1.11 2006/08/24 23:51:27 cognet Exp $");
#include <sys/cdefs.h>
@@ -71,7 +71,7 @@
#include <arm/xscale/i80200/i80200var.h>
#endif
-#ifdef CPU_XSCALE_80321
+#if defined(CPU_XSCALE_80321) || defined(CPU_XSCALE_80219)
#include <arm/xscale/i80321/i80321reg.h>
#include <arm/xscale/i80321/i80321var.h>
#endif
@@ -81,7 +81,8 @@
#include <arm/xscale/ixp425/ixp425var.h>
#endif
-#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321)
+#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
+ defined(CPU_XSCALE_80219)
#include <arm/xscale/xscalereg.h>
#endif
@@ -511,7 +512,9 @@
#endif /* CPU_IXP12X0 */
#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
- defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
+ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \
+ defined(CPU_XSCALE_80219)
+
struct cpu_functions xscale_cpufuncs = {
/* CPU functions */
@@ -567,7 +570,8 @@
xscale_setup /* cpu setup */
};
#endif
-/* CPU_XSCALE_80200 || CPU_XSCALE_80321 || CPU_XSCALE_PXA2X0 || CPU_XSCALE_IXP425 */
+/* CPU_XSCALE_80200 || CPU_XSCALE_80321 || CPU_XSCALE_PXA2X0 || CPU_XSCALE_IXP425
+ CPU_XSCALE_80219 */
/*
* Global constants also used by locore.s
@@ -578,9 +582,11 @@
u_int cpu_reset_needs_v4_MMU_disable; /* flag used in locore.s */
#if defined(CPU_ARM7TDMI) || defined(CPU_ARM8) || defined(CPU_ARM9) || \
- defined (CPU_ARM10) || \
- defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
- defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
+ defined (CPU_ARM10) || \
+ defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
+ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \
+ defined(CPU_XSCALE_80219)
+
static void get_cachetype_cp15(void);
/* Additional cache information local to this file. Log2 of some of the
@@ -888,9 +894,10 @@
return 0;
}
#endif /* CPU_XSCALE_80200 */
-#ifdef CPU_XSCALE_80321
+#if defined(CPU_XSCALE_80321) || defined(CPU_XSCALE_80219)
if (cputype == CPU_ID_80321_400 || cputype == CPU_ID_80321_600 ||
- cputype == CPU_ID_80321_400_B0 || cputype == CPU_ID_80321_600_B0) {
+ cputype == CPU_ID_80321_400_B0 || cputype == CPU_ID_80321_600_B0 ||
+ cputype == CPU_ID_80219_400 || cputype == CPU_ID_80219_600) {
/*
* Reset the Performance Monitoring Unit to a
@@ -915,6 +922,7 @@
return 0;
}
#endif /* CPU_XSCALE_80321 */
+
#ifdef CPU_XSCALE_PXA2X0
/* ignore core revision to test PXA2xx CPUs */
if ((cputype & ~CPU_ID_XSCALE_COREREV_MASK) == CPU_ID_PXA250 ||
@@ -1318,9 +1326,10 @@
*/
#if defined(CPU_ARM7TDMI) || defined(CPU_ARM8) || defined (CPU_ARM9) || \
- defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) || \
- defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
- defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
+ defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) || \
+ defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
+ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \
+ defined(CPU_XSCALE_80219)
#define IGN 0
#define OR 1
@@ -1365,7 +1374,7 @@
}
return(cpuctrl);
}
-#endif /* CPU_ARM7TDMI || CPU_ARM8 || CPU_SA110 */
+#endif /* CPU_ARM7TDMI || CPU_ARM8 || CPU_SA110 || XSCALE*/
#if defined(CPU_ARM7TDMI) || defined(CPU_ARM8)
struct cpu_option arm678_options[] = {
@@ -1787,7 +1796,8 @@
#endif /* CPU_IXP12X0 */
#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
- defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
+ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \
+ defined(CPU_XSCALE_80219)
struct cpu_option xscale_options[] = {
#ifdef COMPAT_12
{ "branchpredict", BIC, OR, CPU_CONTROL_BPRD_ENABLE },
@@ -1864,4 +1874,5 @@
__asm __volatile("mcr p15, 0, %0, c1, c0, 1"
: : "r" (auxctl));
}
-#endif /* CPU_XSCALE_80200 || CPU_XSCALE_80321 || CPU_XSCALE_PXA2X0 || CPU_XSCALE_IXP425 */
+#endif /* CPU_XSCALE_80200 || CPU_XSCALE_80321 || CPU_XSCALE_PXA2X0 || CPU_XSCALE_IXP425
+ CPU_XSCALE_80219 */
==== //depot/projects/jail2/sys/arm/arm/elf_trampoline.c#4 (text+ko) ====
@@ -23,7 +23,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/elf_trampoline.c,v 1.12 2006/08/15 18:11:25 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/elf_trampoline.c,v 1.13 2006/08/24 23:51:27 cognet Exp $");
#include <machine/asm.h>
#include <sys/types.h>
#include <sys/elf32.h>
@@ -64,7 +64,8 @@
defined(CPU_IXP12X0)
#define cpu_idcache_wbinv_all sa1_cache_purgeID
#elif defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
- defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
+ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \
+ defined(CPU_XSCALE_80219)
#define cpu_idcache_wbinv_all xscale_cache_purgeID
#endif
==== //depot/projects/jail2/sys/arm/arm/fusu.S#2 (text+ko) ====
@@ -37,7 +37,7 @@
#include <machine/asmacros.h>
#include <machine/armreg.h>
#include "assym.s"
-__FBSDID("$FreeBSD: src/sys/arm/arm/fusu.S,v 1.7 2005/04/23 16:45:04 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/fusu.S,v 1.8 2006/08/28 02:28:14 davidxu Exp $");
#ifdef MULTIPROCESSOR
.Lcpu_info:
@@ -52,6 +52,7 @@
* Fetch an int from the user's address space.
*/
+ALTENTRY(casuword32)
ENTRY(casuptr)
#ifdef MULTIPROCESSOR
/* XXX Probably not appropriate for non-Hydra SMPs */
==== //depot/projects/jail2/sys/arm/arm/identcpu.c#2 (text+ko) ====
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/identcpu.c,v 1.7 2006/02/03 06:39:57 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/identcpu.c,v 1.8 2006/08/24 23:51:27 cognet Exp $");
#include <sys/systm.h>
#include <sys/param.h>
#include <sys/malloc.h>
@@ -229,6 +229,12 @@
{ CPU_ID_80321_600_B0, CPU_CLASS_XSCALE, "i80321 600MHz",
i80321_steppings },
+ { CPU_ID_80219_400, CPU_CLASS_XSCALE, "i80219 400MHz",
+ xscale_steppings },
+
+ { CPU_ID_80219_600, CPU_CLASS_XSCALE, "i80219 600MHz",
+ xscale_steppings },
+
{ CPU_ID_PXA250A, CPU_CLASS_XSCALE, "PXA250",
pxa2x0_steppings },
{ CPU_ID_PXA210A, CPU_CLASS_XSCALE, "PXA210",
==== //depot/projects/jail2/sys/arm/at91/if_ate.c#4 (text) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/if_ate.c,v 1.9 2006/07/17 21:36:08 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/if_ate.c,v 1.10 2006/08/25 13:38:42 cognet Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -352,11 +352,6 @@
busdma_lock_mutex, &sc->sc_mtx, &sc->rxtag);
if (err != 0)
goto errout;
- for (i = 0; i < ATE_MAX_RX_BUFFERS; i++) {
- err = bus_dmamap_create(sc->rxtag, 0, &sc->rx_map[i]);
- if (err != 0)
- goto errout;
- }
/* Dma TAG and MAP for the rx descriptors. */
err = bus_dma_tag_create(NULL, sizeof(eth_rx_desc_t), 0,
==== //depot/projects/jail2/sys/arm/include/armreg.h#2 (text+ko) ====
@@ -35,7 +35,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/arm/include/armreg.h,v 1.3 2005/11/21 19:06:25 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/armreg.h,v 1.4 2006/08/24 23:51:28 cognet Exp $
*/
#ifndef MACHINE_ARMREG_H
@@ -155,6 +155,8 @@
#define CPU_ID_80321_600 0x69052430
#define CPU_ID_80321_400_B0 0x69052c20
#define CPU_ID_80321_600_B0 0x69052c30
+#define CPU_ID_80219_400 0x69052e20 /* A0 stepping/revision. */
+#define CPU_ID_80219_600 0x69052e30 /* A0 stepping/revision. */
#define CPU_ID_IXP425_533 0x690541c0
#define CPU_ID_IXP425_400 0x690541d0
#define CPU_ID_IXP425_266 0x690541f0
==== //depot/projects/jail2/sys/arm/include/cpuconf.h#2 (text+ko) ====
@@ -34,7 +34,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/arm/include/cpuconf.h,v 1.7 2006/06/02 09:39:06 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/cpuconf.h,v 1.8 2006/08/24 23:51:28 cognet Exp $
*
*/
@@ -64,7 +64,7 @@
#define ARM_ARCH_4 0
#endif
-#if (defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
+#if (defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || defined(CPU_XSCALE_80219) || \
defined(CPU_XSCALE_PXA2X0)) || defined(CPU_ARM10)
#define ARM_ARCH_5 1
#else
@@ -112,7 +112,8 @@
#endif
#if(defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
- defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425))
+ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \
+ defined(CPU_XSCALE_80219))
#define ARM_MMU_XSCALE 1
#else
#define ARM_MMU_XSCALE 0
@@ -130,7 +131,8 @@
* ARM_XSCALE_PMU Performance Monitoring Unit on 80200 and 80321
*/
-#if (defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321))
+#if (defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
+ defined(CPU_XSCALE_80219))
#define ARM_XSCALE_PMU 1
#else
#define ARM_XSCALE_PMU 0
==== //depot/projects/jail2/sys/arm/include/cpufunc.h#2 (text+ko) ====
@@ -38,7 +38,7 @@
*
* Prototypes for cpu, mmu and tlb related functions.
*
- * $FreeBSD: src/sys/arm/include/cpufunc.h,v 1.8 2006/06/01 16:17:44 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/cpufunc.h,v 1.9 2006/08/24 23:51:28 cognet Exp $
*/
#ifndef _MACHINE_CPUFUNC_H_
@@ -371,10 +371,11 @@
#endif
#if defined(CPU_ARM9) || defined(CPU_ARM10) || defined(CPU_SA110) || \
- defined(CPU_SA1100) || defined(CPU_SA1110) || \
- defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
- defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
-
+ defined(CPU_SA1100) || defined(CPU_SA1110) || \
+ defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
+ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \
+ defined(CPU_XSCALE_80219)
+
void armv4_tlb_flushID (void);
void armv4_tlb_flushI (void);
void armv4_tlb_flushD (void);
@@ -389,8 +390,9 @@
void ixp12x0_setup (char *string);
#endif
-#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
- defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
+#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
+ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \
+ defined(CPU_XSCALE_80219)
void xscale_cpwait (void);
void xscale_cpu_sleep (int mode);
@@ -428,7 +430,8 @@
void xscale_context_switch (void);
void xscale_setup (char *string);
-#endif /* CPU_XSCALE_80200 || CPU_XSCALE_80321 || CPU_XSCALE_PXA2X0 || CPU_XSCALE_IXP425 */
+#endif /* CPU_XSCALE_80200 || CPU_XSCALE_80321 || CPU_XSCALE_PXA2X0 || CPU_XSCALE_IXP425
+ CPU_XSCALE_80219 */
#define tlb_flush cpu_tlb_flushID
#define setttb cpu_setttb
==== //depot/projects/jail2/sys/arm/include/elf.h#2 (text+ko) ====
@@ -24,7 +24,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/arm/include/elf.h,v 1.6 2005/11/24 02:27:55 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/elf.h,v 1.7 2006/08/24 23:00:03 cognet Exp $
*/
#ifndef _MACHINE_ELF_H_
@@ -121,7 +121,11 @@
/* Define "machine" characteristics */
#define ELF_TARG_CLASS ELFCLASS32
+#ifdef __ARMEB__
+#define ELF_TARG_DATA ELFDATA2MSB
+#else
#define ELF_TARG_DATA ELFDATA2LSB
+#endif
#define ELF_TARG_MACH EM_ARM
#define ELF_TARG_VER 1
==== //depot/projects/jail2/sys/arm/include/vmparam.h#3 (text+ko) ====
@@ -28,7 +28,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/arm/include/vmparam.h,v 1.6 2006/08/08 20:59:38 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/vmparam.h,v 1.7 2006/08/25 23:51:10 alc Exp $
*/
#ifndef _MACHINE_VMPARAM_H_
@@ -50,15 +50,6 @@
/*
* Override the default pager_map size, there's not enough KVA.
*/
-/*
- * Size of User Raw I/O map
- */
-
-#define USRIOSIZE 300
-
-/* virtual sizes (bytes) for various kernel submaps */
-
-#define VM_PHYS_SIZE (USRIOSIZE*PAGE_SIZE)
/*
* max number of non-contig chunks of physical RAM you can have
==== //depot/projects/jail2/sys/arm/xscale/i80321/i80321_intr.h#2 (text+ko) ====
@@ -34,7 +34,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/arm/xscale/i80321/i80321_intr.h,v 1.2 2005/01/05 21:58:49 imp Exp $
+ * $FreeBSD: src/sys/arm/xscale/i80321/i80321_intr.h,v 1.3 2006/08/24 23:51:28 cognet Exp $
*
*/
@@ -73,9 +73,21 @@
: "r" (intr_steer & ICU_INT_HWMASK));
}
+#if defined ( CPU_XSCALE_80219 )
+#define INT_SWMASK \
+ ((1U << ICU_INT_bit26) | \
+ (1U << ICU_INT_bit25) | \
+ (1U << ICU_INT_bit23) | \
+ (1U << ICU_INT_bit22) | \
+ (1U << ICU_INT_bit7) | \
+ (1U << ICU_INT_bit6) | \
+ (1U << ICU_INT_bit5) | \
+ (1U << ICU_INT_bit4))
+#else
#define INT_SWMASK \
((1U << ICU_INT_bit26) | (1U << ICU_INT_bit22) | \
(1U << ICU_INT_bit5) | (1U << ICU_INT_bit4))
+#endif
#if 0
static __inline void __attribute__((__unused__))
==== //depot/projects/jail2/sys/arm/xscale/i80321/i80321_pci.c#2 (text+ko) ====
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_pci.c,v 1.8 2006/04/20 04:12:02 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_pci.c,v 1.9 2006/08/24 23:51:28 cognet Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -68,20 +68,6 @@
#include <dev/pci/pcireg.h>
extern struct i80321_softc *i80321_softc;
-struct i80321_pci_softc {
- device_t sc_dev;
- bus_space_tag_t sc_st;
- bus_space_handle_t sc_atu_sh;
- bus_space_tag_t sc_pciio;
- bus_space_tag_t sc_pcimem;
- int sc_busno;
- struct rman sc_mem_rman;
- struct rman sc_io_rman;
- struct rman sc_irq_rman;
- uint32_t sc_mem;
- uint32_t sc_io;
-};
-
static int
i80321_pci_probe(device_t dev)
{
@@ -260,62 +246,6 @@
}
static int
-i80321_pci_route_interrupt(device_t pcib, device_t dev, int pin)
-{
- int bus;
- int device;
- int func;
- uint32_t busno;
- struct i80321_pci_softc *sc = device_get_softc(pcib);
- bus = pci_get_bus(dev);
- device = pci_get_slot(dev);
- func = pci_get_function(dev);
- busno = bus_space_read_4(sc->sc_st, sc->sc_atu_sh, ATU_PCIXSR);
- busno = PCIXSR_BUSNO(busno);
- if (busno == 0xff)
- busno = 0;
- if (bus != busno)
- goto no_mapping;
- switch (device) {
- /* IQ31244 PCI */
- case 1: /* PCIX-PCIX bridge */
- /*
- * The S-ATA chips are behind the bridge, and all of
- * the S-ATA interrupts are wired together.
- */
- return (ICU_INT_XINT(2));
- case 2: /* PCI slot */
- /* All pins are wired together. */
- return (ICU_INT_XINT(3));
- case 3: /* i82546 dual Gig-E */
- if (pin == 1 || pin == 2)
- return (ICU_INT_XINT(0));
- goto no_mapping;
- /* IQ80321 PCI */
- case 4: /* i82544 Gig-E */
- case 8: /*
- * Apparently you can set the device for the ethernet adapter
- * to 8 with a jumper, so handle that as well
- */
- if (pin == 1)
- return (ICU_INT_XINT(0));
- goto no_mapping;
- case 6: /* S-PCI-X slot */
- if (pin == 1)
- return (ICU_INT_XINT(2));
- if (pin == 2)
- return (ICU_INT_XINT(3));
- goto no_mapping;
- default:
-no_mapping:
- printf("No mapping for %d/%d/%d/%c\n", bus, device, func, pin);
-
- }
- return (0);
-
-}
-
-static int
i80321_read_ivar(device_t dev, device_t child, int which, uintptr_t *result)
{
struct i80321_pci_softc *sc = device_get_softc(dev);
@@ -453,7 +383,7 @@
DEVMETHOD(pcib_maxslots, i80321_pci_maxslots),
DEVMETHOD(pcib_read_config, i80321_pci_read_config),
DEVMETHOD(pcib_write_config, i80321_pci_write_config),
- DEVMETHOD(pcib_route_interrupt, i80321_pci_route_interrupt),
+ DEVMETHOD(pcib_route_interrupt, machdep_pci_route_interrupt),
{0, 0}
};
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list