svn commit: r198371 - in stable/8/sys: . amd64/include/xen
cddl/contrib/opensolaris contrib/dev/acpica contrib/pf
dev/xen/xenpci net
Qing Li
qingli at FreeBSD.org
Thu Oct 22 18:48:26 UTC 2009
Author: qingli
Date: Thu Oct 22 18:48:25 2009
New Revision: 198371
URL: http://svn.freebsd.org/changeset/base/198371
Log:
MFC 198306
The flow-table function flowtable_route_flush() may be called
during system initialization time. Since the flow-table is
designed to maintain per CPU flow cache, the existing code
did not check whether "smp_started" is true before calling
sched_bind() and sched_unbind(), which triggers a page fault.
Reviewed by: jeff
Approved by: re
Modified:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
stable/8/sys/dev/xen/xenpci/ (props changed)
stable/8/sys/net/flowtable.c
Modified: stable/8/sys/net/flowtable.c
==============================================================================
--- stable/8/sys/net/flowtable.c Thu Oct 22 17:36:41 2009 (r198370)
+++ stable/8/sys/net/flowtable.c Thu Oct 22 18:48:25 2009 (r198371)
@@ -930,16 +930,20 @@ flowtable_route_flush(struct flowtable *
for (i = 0; i <= mp_maxid; i++) {
if (CPU_ABSENT(i))
continue;
-
- thread_lock(curthread);
- sched_bind(curthread, i);
- thread_unlock(curthread);
+
+ if (smp_started == 1) {
+ thread_lock(curthread);
+ sched_bind(curthread, i);
+ thread_unlock(curthread);
+ }
flowtable_free_stale(ft, rt);
- thread_lock(curthread);
- sched_unbind(curthread);
- thread_unlock(curthread);
+ if (smp_started == 1) {
+ thread_lock(curthread);
+ sched_unbind(curthread);
+ thread_unlock(curthread);
+ }
}
} else {
flowtable_free_stale(ft, rt);
More information about the svn-src-stable-8
mailing list