Date: Tue, 4 Oct 2011 17:15:00 +0000 (UTC) From: "Lev A. Serebryakov" <lev@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r226014 - in projects/geom-events: contrib/top lib/libc/sys share/mk sys/arm/arm sys/arm/include sys/arm/mv sys/kern sys/pc98/pc98 usr.bin/csup usr.bin/fetch Message-ID: <201110041715.p94HF0K9071260@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: lev (ports committer) Date: Tue Oct 4 17:14:59 2011 New Revision: 226014 URL: http://svn.freebsd.org/changeset/base/226014 Log: Merge head into projects/geom-events Modified: projects/geom-events/lib/libc/sys/ptrace.2 projects/geom-events/sys/arm/arm/elf_machdep.c projects/geom-events/sys/arm/arm/elf_trampoline.c projects/geom-events/sys/arm/arm/pmap.c projects/geom-events/sys/arm/arm/trap.c projects/geom-events/sys/arm/include/proc.h projects/geom-events/sys/arm/include/vmparam.h projects/geom-events/sys/arm/mv/common.c projects/geom-events/sys/arm/mv/mv_machdep.c projects/geom-events/sys/kern/kern_racct.c projects/geom-events/sys/pc98/pc98/machdep.c projects/geom-events/usr.bin/csup/fixups.c projects/geom-events/usr.bin/csup/updater.c projects/geom-events/usr.bin/fetch/fetch.1 Directory Properties: projects/geom-events/ (props changed) projects/geom-events/cddl/contrib/opensolaris/ (props changed) projects/geom-events/contrib/bind9/ (props changed) projects/geom-events/contrib/binutils/ (props changed) projects/geom-events/contrib/bzip2/ (props changed) projects/geom-events/contrib/compiler-rt/ (props changed) projects/geom-events/contrib/dialog/ (props changed) projects/geom-events/contrib/ee/ (props changed) projects/geom-events/contrib/expat/ (props changed) projects/geom-events/contrib/file/ (props changed) projects/geom-events/contrib/gcc/ (props changed) projects/geom-events/contrib/gdb/ (props changed) projects/geom-events/contrib/gdtoa/ (props changed) projects/geom-events/contrib/gnu-sort/ (props changed) projects/geom-events/contrib/groff/ (props changed) projects/geom-events/contrib/less/ (props changed) projects/geom-events/contrib/libpcap/ (props changed) projects/geom-events/contrib/libstdc++/ (props changed) projects/geom-events/contrib/llvm/ (props changed) projects/geom-events/contrib/llvm/tools/clang/ (props changed) projects/geom-events/contrib/ncurses/ (props changed) projects/geom-events/contrib/netcat/ (props changed) projects/geom-events/contrib/ntp/ (props changed) projects/geom-events/contrib/one-true-awk/ (props changed) projects/geom-events/contrib/openbsm/ (props changed) projects/geom-events/contrib/openpam/ (props changed) projects/geom-events/contrib/openresolv/ (props changed) projects/geom-events/contrib/pf/ (props changed) projects/geom-events/contrib/sendmail/ (props changed) projects/geom-events/contrib/tcpdump/ (props changed) projects/geom-events/contrib/tcsh/ (props changed) projects/geom-events/contrib/tnftp/ (props changed) projects/geom-events/contrib/top/ (props changed) projects/geom-events/contrib/top/install-sh (props changed) projects/geom-events/contrib/tzcode/stdtime/ (props changed) projects/geom-events/contrib/tzcode/zic/ (props changed) projects/geom-events/contrib/tzdata/ (props changed) projects/geom-events/contrib/wpa/ (props changed) projects/geom-events/contrib/xz/ (props changed) projects/geom-events/crypto/heimdal/ (props changed) projects/geom-events/crypto/openssh/ (props changed) projects/geom-events/crypto/openssl/ (props changed) projects/geom-events/gnu/lib/ (props changed) projects/geom-events/gnu/usr.bin/binutils/ (props changed) projects/geom-events/gnu/usr.bin/cc/cc_tools/ (props changed) projects/geom-events/gnu/usr.bin/gdb/ (props changed) projects/geom-events/lib/libc/ (props changed) projects/geom-events/lib/libc/stdtime/ (props changed) projects/geom-events/lib/libutil/ (props changed) projects/geom-events/lib/libz/ (props changed) projects/geom-events/sbin/ (props changed) projects/geom-events/sbin/ipfw/ (props changed) projects/geom-events/share/mk/bsd.arch.inc.mk (props changed) projects/geom-events/share/zoneinfo/ (props changed) projects/geom-events/sys/ (props changed) projects/geom-events/sys/amd64/include/xen/ (props changed) projects/geom-events/sys/boot/ (props changed) projects/geom-events/sys/boot/i386/efi/ (props changed) projects/geom-events/sys/boot/ia64/efi/ (props changed) projects/geom-events/sys/boot/ia64/ski/ (props changed) projects/geom-events/sys/boot/powerpc/boot1.chrp/ (props changed) projects/geom-events/sys/boot/powerpc/ofw/ (props changed) projects/geom-events/sys/cddl/contrib/opensolaris/ (props changed) projects/geom-events/sys/conf/ (props changed) projects/geom-events/sys/contrib/dev/acpica/ (props changed) projects/geom-events/sys/contrib/octeon-sdk/ (props changed) projects/geom-events/sys/contrib/pf/ (props changed) projects/geom-events/sys/contrib/x86emu/ (props changed) projects/geom-events/usr.bin/calendar/ (props changed) projects/geom-events/usr.bin/csup/ (props changed) projects/geom-events/usr.bin/procstat/ (props changed) projects/geom-events/usr.sbin/ndiscvt/ (props changed) projects/geom-events/usr.sbin/rtadvctl/ (props changed) projects/geom-events/usr.sbin/rtadvd/ (props changed) projects/geom-events/usr.sbin/rtsold/ (props changed) projects/geom-events/usr.sbin/zic/ (props changed) Modified: projects/geom-events/lib/libc/sys/ptrace.2 ============================================================================== --- projects/geom-events/lib/libc/sys/ptrace.2 Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/lib/libc/sys/ptrace.2 Tue Oct 4 17:14:59 2011 (r226014) @@ -2,7 +2,7 @@ .\" $NetBSD: ptrace.2,v 1.2 1995/02/27 12:35:37 cgd Exp $ .\" .\" This file is in the public domain. -.Dd January 23, 2011 +.Dd October 3, 2011 .Dt PTRACE 2 .Os .Sh NAME @@ -606,4 +606,4 @@ The .Dv PL_FLAG_SCX and .Dv PL_FLAG_EXEC -are not implemented for MIPS and ARM architectures. +are not implemented for MIPS architecture. Modified: projects/geom-events/sys/arm/arm/elf_machdep.c ============================================================================== --- projects/geom-events/sys/arm/arm/elf_machdep.c Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/sys/arm/arm/elf_machdep.c Tue Oct 4 17:14:59 2011 (r226014) @@ -76,7 +76,7 @@ struct sysentvec elf32_freebsd_sysvec = .sv_maxssiz = NULL, .sv_flags = SV_ABI_FREEBSD | SV_ILP32, .sv_set_syscall_retval = cpu_set_syscall_retval, - .sv_fetch_syscall_args = NULL, /* XXXKIB */ + .sv_fetch_syscall_args = cpu_fetch_syscall_args, .sv_syscallnames = syscallnames, .sv_schedtail = NULL, }; Modified: projects/geom-events/sys/arm/arm/elf_trampoline.c ============================================================================== --- projects/geom-events/sys/arm/arm/elf_trampoline.c Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/sys/arm/arm/elf_trampoline.c Tue Oct 4 17:14:59 2011 (r226014) @@ -22,6 +22,13 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* + * Since we are compiled outside of the normal kernel build process, we + * need to include opt_global.h manually. + */ +#include "opt_global.h" +#include "opt_kernname.h" + #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); #include <machine/asm.h> @@ -33,13 +40,6 @@ __FBSDID("$FreeBSD$"); #include <machine/cpufunc.h> #include <machine/armreg.h> -/* - * Since we are compiled outside of the normal kernel build process, we - * need to include opt_global.h manually. - */ -#include "opt_global.h" -#include "opt_kernname.h" - extern char kernel_start[]; extern char kernel_end[]; Modified: projects/geom-events/sys/arm/arm/pmap.c ============================================================================== --- projects/geom-events/sys/arm/arm/pmap.c Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/sys/arm/arm/pmap.c Tue Oct 4 17:14:59 2011 (r226014) @@ -185,6 +185,9 @@ int pmap_debug_level = 0; #endif /* PMAP_DEBUG */ extern struct pv_addr systempage; + +extern int last_fault_code; + /* * Internal function prototypes */ @@ -2054,9 +2057,8 @@ pmap_fault_fixup(pmap_t pm, vm_offset_t * the TLB. */ if (rv == 0 && pm->pm_l1->l1_domain_use_count == 1) { - extern int last_fault_code; printf("fixup: pm %p, va 0x%lx, ftype %d - nothing to do!\n", - pm, va, ftype); + pm, (u_long)va, ftype); printf("fixup: l2 %p, l2b %p, ptep %p, pl1pd %p\n", l2, l2b, ptep, pl1pd); printf("fixup: pte 0x%x, l1pd 0x%x, last code 0x%x\n", @@ -4012,13 +4014,6 @@ pmap_zero_page_generic(vm_paddr_t phys, char *dstpg; #endif -#ifdef DEBUG - struct vm_page *pg = PHYS_TO_VM_PAGE(phys); - - if (pg->md.pvh_list != NULL) - panic("pmap_zero_page: page has mappings"); -#endif - if (_arm_bzero && size >= _min_bzero_size && _arm_bzero((void *)(phys + off), size, IS_PHYSICAL) == 0) return; @@ -4290,13 +4285,6 @@ pmap_copy_page_generic(vm_paddr_t src, v #if 0 struct vm_page *src_pg = PHYS_TO_VM_PAGE(src); #endif -#ifdef DEBUG - struct vm_page *dst_pg = PHYS_TO_VM_PAGE(dst); - - if (dst_pg->md.pvh_list != NULL) - panic("pmap_copy_page: dst page has mappings"); -#endif - /* * Clean the source page. Hold the source page's lock for @@ -4342,13 +4330,6 @@ pmap_copy_page_xscale(vm_paddr_t src, vm /* XXX: Only needed for pmap_clean_page(), which is commented out. */ struct vm_page *src_pg = PHYS_TO_VM_PAGE(src); #endif -#ifdef DEBUG - struct vm_page *dst_pg = PHYS_TO_VM_PAGE(dst); - - if (dst_pg->md.pvh_list != NULL) - panic("pmap_copy_page: dst page has mappings"); -#endif - /* * Clean the source page. Hold the source page's lock for Modified: projects/geom-events/sys/arm/arm/trap.c ============================================================================== --- projects/geom-events/sys/arm/arm/trap.c Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/sys/arm/arm/trap.c Tue Oct 4 17:14:59 2011 (r226014) @@ -861,98 +861,68 @@ badaddr_read(void *addr, size_t size, vo return (rv); } -#define MAXARGS 8 +int +cpu_fetch_syscall_args(struct thread *td, struct syscall_args *sa) +{ + struct proc *p; + register_t *ap; + int error; + + sa->code = sa->insn & 0x000fffff; + ap = &td->td_frame->tf_r0; + if (sa->code == SYS_syscall) { + sa->code = *ap++; + sa->nap--; + } else if (sa->code == SYS___syscall) { + sa->code = ap[_QUAD_LOWWORD]; + sa->nap -= 2; + ap += 2; + } + p = td->td_proc; + if (p->p_sysent->sv_mask) + sa->code &= p->p_sysent->sv_mask; + if (sa->code >= p->p_sysent->sv_size) + sa->callp = &p->p_sysent->sv_table[0]; + else + sa->callp = &p->p_sysent->sv_table[sa->code]; + sa->narg = sa->callp->sy_narg; + error = 0; + memcpy(sa->args, ap, sa->nap * sizeof(register_t)); + if (sa->narg > sa->nap) { + error = copyin((void *)td->td_frame->tf_usr_sp, sa->args + + sa->nap, (sa->narg - sa->nap) * sizeof(register_t)); + } + if (error == 0) { + td->td_retval[0] = 0; + td->td_retval[1] = 0; + } + return (error); +} + +#include "../../kern/subr_syscall.c" + static void syscall(struct thread *td, trapframe_t *frame, u_int32_t insn) { - struct proc *p = td->td_proc; - int code, error; - u_int nap, nargs; - register_t *ap, *args, copyargs[MAXARGS]; - struct sysent *callp; + struct syscall_args sa; + int error; - PCPU_INC(cnt.v_syscall); - td->td_pticks = 0; - if (td->td_ucred != td->td_proc->p_ucred) - cred_update_thread(td); + td->td_frame = frame; + sa.insn = insn; switch (insn & SWI_OS_MASK) { case 0: /* XXX: we need our own one. */ - nap = 4; + sa.nap = 4; break; default: call_trapsignal(td, SIGILL, 0); userret(td, frame); return; } - code = insn & 0x000fffff; - td->td_pticks = 0; - ap = &frame->tf_r0; - if (code == SYS_syscall) { - code = *ap++; - - nap--; - } else if (code == SYS___syscall) { - code = ap[_QUAD_LOWWORD]; - nap -= 2; - ap += 2; - } - if (p->p_sysent->sv_mask) - code &= p->p_sysent->sv_mask; - if (code >= p->p_sysent->sv_size) - callp = &p->p_sysent->sv_table[0]; - else - callp = &p->p_sysent->sv_table[code]; - nargs = callp->sy_narg; - memcpy(copyargs, ap, nap * sizeof(register_t)); - if (nargs > nap) { - error = copyin((void *)frame->tf_usr_sp, copyargs + nap, - (nargs - nap) * sizeof(register_t)); - if (error) - goto bad; - } - args = copyargs; - error = 0; -#ifdef KTRACE - if (KTRPOINT(td, KTR_SYSCALL)) - ktrsyscall(code, nargs, args); -#endif - - CTR4(KTR_SYSC, "syscall enter thread %p pid %d proc %s code %d", td, - td->td_proc->p_pid, td->td_name, code); - if (error == 0) { - td->td_retval[0] = 0; - td->td_retval[1] = 0; - STOPEVENT(p, S_SCE, callp->sy_narg); - PTRACESTOP_SC(p, td, S_PT_SCE); - AUDIT_SYSCALL_ENTER(code, td); - error = (*callp->sy_call)(td, args); - AUDIT_SYSCALL_EXIT(error, td); - KASSERT(td->td_ar == NULL, - ("returning from syscall with td_ar set!")); - } -bad: - cpu_set_syscall_retval(td, error); - - WITNESS_WARN(WARN_PANIC, NULL, "System call %s returning", - (code >= 0 && code < SYS_MAXSYSCALL) ? syscallnames[code] : "???"); - KASSERT(td->td_critnest == 0, - ("System call %s returning in a critical section", - (code >= 0 && code < SYS_MAXSYSCALL) ? syscallnames[code] : "???")); - KASSERT(td->td_locks == 0, - ("System call %s returning with %d locks held", - (code >= 0 && code < SYS_MAXSYSCALL) ? syscallnames[code] : "???", - td->td_locks)); - - userret(td, frame); - CTR4(KTR_SYSC, "syscall exit thread %p pid %d proc %s code %d", td, - td->td_proc->p_pid, td->td_name, code); - - STOPEVENT(p, S_SCX, code); - PTRACESTOP_SC(p, td, S_PT_SCX); -#ifdef KTRACE - if (KTRPOINT(td, KTR_SYSRET)) - ktrsysret(code, error, td->td_retval[0]); -#endif + + error = syscallenter(td, &sa); + KASSERT(error != 0 || td->td_ar == NULL, + ("returning from syscall with td_ar set!")); + syscallret(td, error, &sa); } void Modified: projects/geom-events/sys/arm/include/proc.h ============================================================================== --- projects/geom-events/sys/arm/include/proc.h Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/sys/arm/include/proc.h Tue Oct 4 17:14:59 2011 (r226014) @@ -62,4 +62,15 @@ struct mdproc { #define KINFO_PROC_SIZE 792 +#define MAXARGS 8 +struct syscall_args { + u_int code; + struct sysent *callp; + register_t args[MAXARGS]; + int narg; + u_int nap; + u_int32_t insn; +}; +#define HAVE_SYSCALL_ARGS_DEF 1 + #endif /* !_MACHINE_PROC_H_ */ Modified: projects/geom-events/sys/arm/include/vmparam.h ============================================================================== --- projects/geom-events/sys/arm/include/vmparam.h Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/sys/arm/include/vmparam.h Tue Oct 4 17:14:59 2011 (r226014) @@ -141,11 +141,21 @@ #endif #define MAXTSIZ (16*1024*1024) +#ifndef DFLDSIZ #define DFLDSIZ (128*1024*1024) +#endif +#ifndef MAXDSIZ #define MAXDSIZ (512*1024*1024) +#endif +#ifndef DFLSSIZ #define DFLSSIZ (2*1024*1024) +#endif +#ifndef MAXSSIZ #define MAXSSIZ (8*1024*1024) +#endif +#ifndef SGROWSIZ #define SGROWSIZ (128*1024) +#endif #ifdef ARM_USE_SMALL_ALLOC #define UMA_MD_SMALL_ALLOC Modified: projects/geom-events/sys/arm/mv/common.c ============================================================================== --- projects/geom-events/sys/arm/mv/common.c Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/sys/arm/mv/common.c Tue Oct 4 17:14:59 2011 (r226014) @@ -49,9 +49,6 @@ __FBSDID("$FreeBSD$"); #define MAX_CPU_WIN 5 -#define DEBUG -#undef DEBUG - #ifdef DEBUG #define debugf(fmt, args...) do { printf("%s(): ", __func__); \ printf(fmt,##args); } while (0) Modified: projects/geom-events/sys/arm/mv/mv_machdep.c ============================================================================== --- projects/geom-events/sys/arm/mv/mv_machdep.c Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/sys/arm/mv/mv_machdep.c Tue Oct 4 17:14:59 2011 (r226014) @@ -91,9 +91,6 @@ __FBSDID("$FreeBSD$"); #include <arm/mv/mvvar.h> /* XXX eventually this should be eliminated */ #include <arm/mv/mvwin.h> -#define DEBUG -#undef DEBUG - #ifdef DEBUG #define debugf(fmt, args...) printf(fmt, ##args) #else Modified: projects/geom-events/sys/kern/kern_racct.c ============================================================================== --- projects/geom-events/sys/kern/kern_racct.c Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/sys/kern/kern_racct.c Tue Oct 4 17:14:59 2011 (r226014) @@ -567,6 +567,12 @@ racct_proc_fork(struct proc *parent, str PROC_LOCK(child); mtx_lock(&racct_lock); +#ifdef RCTL + error = rctl_proc_fork(parent, child); + if (error != 0) + goto out; +#endif + /* * Inherit resource usage. */ @@ -581,12 +587,6 @@ racct_proc_fork(struct proc *parent, str goto out; } -#ifdef RCTL - error = rctl_proc_fork(parent, child); - if (error != 0) - goto out; -#endif - error = racct_add_locked(child, RACCT_NPROC, 1); error += racct_add_locked(child, RACCT_NTHR, 1); Modified: projects/geom-events/sys/pc98/pc98/machdep.c ============================================================================== --- projects/geom-events/sys/pc98/pc98/machdep.c Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/sys/pc98/pc98/machdep.c Tue Oct 4 17:14:59 2011 (r226014) @@ -1117,7 +1117,7 @@ void cpu_halt(void) { for (;;) - __asm__ ("hlt"); + halt(); } static int idle_mwait = 1; /* Use MONITOR/MWAIT for short idle. */ @@ -1136,9 +1136,22 @@ cpu_idle_hlt(int busy) state = (int *)PCPU_PTR(monitorbuf); *state = STATE_SLEEPING; + /* - * We must absolutely guarentee that hlt is the next instruction - * after sti or we introduce a timing window. + * Since we may be in a critical section from cpu_idle(), if + * an interrupt fires during that critical section we may have + * a pending preemption. If the CPU halts, then that thread + * may not execute until a later interrupt awakens the CPU. + * To handle this race, check for a runnable thread after + * disabling interrupts and immediately return if one is + * found. Also, we must absolutely guarentee that hlt is + * the next instruction after sti. This ensures that any + * interrupt that fires after the call to disable_intr() will + * immediately awaken the CPU from hlt. Finally, please note + * that on x86 this works fine because of interrupts enabled only + * after the instruction following sti takes place, while IF is set + * to 1 immediately, allowing hlt instruction to acknowledge the + * interrupt. */ disable_intr(); if (sched_runnable()) @@ -1164,11 +1177,19 @@ cpu_idle_mwait(int busy) state = (int *)PCPU_PTR(monitorbuf); *state = STATE_MWAIT; - if (!sched_runnable()) { - cpu_monitor(state, 0, 0); - if (*state == STATE_MWAIT) - cpu_mwait(0, MWAIT_C1); + + /* See comments in cpu_idle_hlt(). */ + disable_intr(); + if (sched_runnable()) { + enable_intr(); + *state = STATE_RUNNING; + return; } + cpu_monitor(state, 0, 0); + if (*state == STATE_MWAIT) + __asm __volatile("sti; mwait" : : "a" (MWAIT_C1), "c" (0)); + else + enable_intr(); *state = STATE_RUNNING; } @@ -1180,6 +1201,12 @@ cpu_idle_spin(int busy) state = (int *)PCPU_PTR(monitorbuf); *state = STATE_RUNNING; + + /* + * The sched_runnable() call is racy but as long as there is + * a loop missing it one time will have just a little impact if any + * (and it is much better than missing the check at all). + */ for (i = 0; i < 1000; i++) { if (sched_runnable()) return; Modified: projects/geom-events/usr.bin/csup/fixups.c ============================================================================== --- projects/geom-events/usr.bin/csup/fixups.c Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/usr.bin/csup/fixups.c Tue Oct 4 17:14:59 2011 (r226014) @@ -141,7 +141,7 @@ fixups_get(struct fixups *f) fixups_lock(f); while (f->size == 0 && !f->closed) pthread_cond_wait(&f->cond, &f->lock); - if (f->closed) { + if (f->closed && f->size == 0) { fixups_unlock(f); return (NULL); } Modified: projects/geom-events/usr.bin/csup/updater.c ============================================================================== --- projects/geom-events/usr.bin/csup/updater.c Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/usr.bin/csup/updater.c Tue Oct 4 17:14:59 2011 (r226014) @@ -238,7 +238,7 @@ updater(void *arg) /* * Make sure to close the fixups even in case of an error, - * so that the lister thread doesn't block indefinitely. + * so that the detailer thread doesn't block indefinitely. */ fixups_close(up->config->fixups); if (!error) Modified: projects/geom-events/usr.bin/fetch/fetch.1 ============================================================================== --- projects/geom-events/usr.bin/fetch/fetch.1 Tue Oct 4 17:11:38 2011 (r226013) +++ projects/geom-events/usr.bin/fetch/fetch.1 Tue Oct 4 17:14:59 2011 (r226014) @@ -1,5 +1,5 @@ .\"- -.\" Copyright (c) 2000-2011 Dag-Erling Smørgrav +.\" Copyright (c) 2000-2011 Dag-Erling Smørgrav .\" All rights reserved. .\" Portions Copyright (c) 1999 Massachusetts Institute of Technology; used .\" by permission.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201110041715.p94HF0K9071260>