Module Name: src Committed By: hannken Date: Tue Aug 9 06:36:52 UTC 2011
Modified Files: src/sys/kern: sys_select.c Log Message: No need to lock the selcluster in selscan() if either NO_DIRECT_SELECT is defined or all polls return an event. To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.35 src/sys/kern/sys_select.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/sys_select.c diff -u src/sys/kern/sys_select.c:1.34 src/sys/kern/sys_select.c:1.35 --- src/sys/kern/sys_select.c:1.34 Sat Aug 6 11:04:25 2011 +++ src/sys/kern/sys_select.c Tue Aug 9 06:36:51 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_select.c,v 1.34 2011/08/06 11:04:25 hannken Exp $ */ +/* $NetBSD: sys_select.c,v 1.35 2011/08/09 06:36:51 hannken Exp $ */ /*- * Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. @@ -84,7 +84,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_select.c,v 1.34 2011/08/06 11:04:25 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_select.c,v 1.35 2011/08/09 06:36:51 hannken Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -390,7 +390,7 @@ for (i = 0; i < nfd; i += NFDBITS) { fd_mask ibits, obits; - ibits = *ibitp++; + ibits = *ibitp; obits = 0; while ((j = ffs(ibits)) && (fd = i + --j) < nfd) { ibits &= ~(1 << j); @@ -408,10 +408,17 @@ fd_putfile(fd); } if (obits != 0) { - mutex_spin_enter(lock); +#ifndef NO_DIRECT_SELECT + if (obits != *ibitp) + mutex_spin_enter(lock); *obitp |= obits; - mutex_spin_exit(lock); + if (obits != *ibitp) + mutex_spin_exit(lock); +#else + *obitp |= obits; +#endif } + ibitp++; obitp++; } }