Module Name:    src
Committed By:   pooka
Date:           Wed Apr 14 13:31:33 UTC 2010

Modified Files:
        src/sys/net: bpf.c

Log Message:
Add a little comment on how bpf can be made unloadable, per pointer from ad.


To generate a diff of this commit:
cvs rdiff -u -r1.157 -r1.158 src/sys/net/bpf.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/net/bpf.c
diff -u src/sys/net/bpf.c:1.157 src/sys/net/bpf.c:1.158
--- src/sys/net/bpf.c:1.157	Mon Apr  5 07:22:22 2010
+++ src/sys/net/bpf.c	Wed Apr 14 13:31:33 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: bpf.c,v 1.157 2010/04/05 07:22:22 joerg Exp $	*/
+/*	$NetBSD: bpf.c,v 1.158 2010/04/14 13:31:33 pooka Exp $	*/
 
 /*
  * Copyright (c) 1990, 1991, 1993
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bpf.c,v 1.157 2010/04/05 07:22:22 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bpf.c,v 1.158 2010/04/14 13:31:33 pooka Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_bpf.h"
@@ -1976,8 +1976,24 @@
 
 	case MODULE_CMD_FINI:
 		/*
-		 * bpf_ops is not (yet) referenced in the callers before
-		 * attach.  maybe other issues too.  "safety first".
+		 * While there is no reference counting for bpf callers,
+		 * unload could at least in theory be done similarly to 
+		 * system call disestablishment.  This should even be
+		 * a little simpler:
+		 * 
+		 * 1) replace op vector with stubs
+		 * 2) post update to all cpus with xc
+		 * 3) check that nobody is in bpf anymore
+		 *    (it's doubtful we'd want something like l_sysent,
+		 *     but we could do something like *signed* percpu
+		 *     counters.  if the sum is 0, we're good).
+		 * 4) if fail, unroll changes
+		 *
+		 * NOTE: change won't be atomic to the outside.  some
+		 * packets may be not captured even if unload is
+		 * not succesful.  I think packet capture not working
+		 * is a perfectly logical consequence of trying to
+		 * disable packet capture.
 		 */
 		error = EOPNOTSUPP;
 		break;

Reply via email to