From owner-p4-projects@FreeBSD.ORG Mon Aug 28 05:20:45 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9E4F716A4E0; Mon, 28 Aug 2006 05:20:45 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2EB7616A4DE for ; Mon, 28 Aug 2006 05:20:45 +0000 (UTC) (envelope-from als@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id C32DE43D45 for ; Mon, 28 Aug 2006 05:20:44 +0000 (GMT) (envelope-from als@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k7S5Kidc061787 for ; Mon, 28 Aug 2006 05:20:44 GMT (envelope-from als@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k7S5KgWu061783 for perforce@freebsd.org; Mon, 28 Aug 2006 05:20:42 GMT (envelope-from als@FreeBSD.org) Date: Mon, 28 Aug 2006 05:20:42 GMT Message-Id: <200608280520.k7S5KgWu061783@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to als@FreeBSD.org using -f From: Alex Lyashkov To: Perforce Change Reviews Cc: Subject: PERFORCE change 105207 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Aug 2006 05:20:45 -0000 http://perforce.freebsd.org/chv.cgi?CH=105207 Change 105207 by als@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 -__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 #include @@ -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 -__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 #include @@ -60,6 +60,7 @@ #include #include #include +#include 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 @@ -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 -__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 -__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 @@ -71,7 +71,7 @@ #include #endif -#ifdef CPU_XSCALE_80321 +#if defined(CPU_XSCALE_80321) || defined(CPU_XSCALE_80219) #include #include #endif @@ -81,7 +81,8 @@ #include #endif -#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) +#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \ + defined(CPU_XSCALE_80219) #include #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 -__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 #include #include @@ -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 #include #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 -__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 #include #include @@ -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 -__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 #include @@ -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 -__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 #include @@ -68,20 +68,6 @@ #include 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) <<<