Skip site navigation (1)Skip section navigation (2)
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>