svn commit: r226536 - head/sys/contrib/pf/net
Bjoern A. Zeeb
bz at FreeBSD.org
Wed Oct 19 11:04:50 UTC 2011
Author: bz
Date: Wed Oct 19 11:04:49 2011
New Revision: 226536
URL: http://svn.freebsd.org/changeset/base/226536
Log:
De-virtualize the pf_task_mtx lock. At the current state of pf locking
and virtualization it is not helpful but complicates things.
Current state of art is to not virtualize these kinds of locks -
inp_group/hash/info/.. are all not virtualized either.
MFC after: 3 days
Modified:
head/sys/contrib/pf/net/pf_ioctl.c
head/sys/contrib/pf/net/pfvar.h
Modified: head/sys/contrib/pf/net/pf_ioctl.c
==============================================================================
--- head/sys/contrib/pf/net/pf_ioctl.c Wed Oct 19 10:16:42 2011 (r226535)
+++ head/sys/contrib/pf/net/pf_ioctl.c Wed Oct 19 11:04:49 2011 (r226536)
@@ -266,7 +266,7 @@ static struct cdevsw pf_cdevsw = {
static volatile VNET_DEFINE(int, pf_pfil_hooked);
#define V_pf_pfil_hooked VNET(pf_pfil_hooked)
VNET_DEFINE(int, pf_end_threads);
-VNET_DEFINE(struct mtx, pf_task_mtx);
+struct mtx pf_task_mtx;
/* pfsync */
pfsync_state_import_t *pfsync_state_import_ptr = NULL;
@@ -287,18 +287,18 @@ SYSCTL_VNET_INT(_debug, OID_AUTO, pfugid
&VNET_NAME(debug_pfugidhack), 0,
"Enable/disable pf user/group rules mpsafe hack");
-void
+static void
init_pf_mutex(void)
{
- mtx_init(&V_pf_task_mtx, "pf task mtx", NULL, MTX_DEF);
+ mtx_init(&pf_task_mtx, "pf task mtx", NULL, MTX_DEF);
}
-void
+static void
destroy_pf_mutex(void)
{
- mtx_destroy(&V_pf_task_mtx);
+ mtx_destroy(&pf_task_mtx);
}
void
init_zone_var(void)
@@ -4381,11 +4381,8 @@ pf_load(void)
init_zone_var();
sx_init(&V_pf_consistency_lock, "pf_statetbl_lock");
- init_pf_mutex();
- if (pfattach() < 0) {
- destroy_pf_mutex();
+ if (pfattach() < 0)
return (ENOMEM);
- }
return (0);
}
@@ -4413,14 +4410,13 @@ pf_unload(void)
V_pf_end_threads = 1;
while (V_pf_end_threads < 2) {
wakeup_one(pf_purge_thread);
- msleep(pf_purge_thread, &V_pf_task_mtx, 0, "pftmo", hz);
+ msleep(pf_purge_thread, &pf_task_mtx, 0, "pftmo", hz);
}
pfi_cleanup();
pf_osfp_flush();
pf_osfp_cleanup();
cleanup_pf_zone();
PF_UNLOCK();
- destroy_pf_mutex();
sx_destroy(&V_pf_consistency_lock);
return error;
}
@@ -4432,10 +4428,12 @@ pf_modevent(module_t mod, int type, void
switch(type) {
case MOD_LOAD:
+ init_pf_mutex();
pf_dev = make_dev(&pf_cdevsw, 0, 0, 0, 0600, PF_NAME);
break;
case MOD_UNLOAD:
destroy_dev(pf_dev);
+ destroy_pf_mutex();
break;
default:
error = EINVAL;
Modified: head/sys/contrib/pf/net/pfvar.h
==============================================================================
--- head/sys/contrib/pf/net/pfvar.h Wed Oct 19 10:16:42 2011 (r226535)
+++ head/sys/contrib/pf/net/pfvar.h Wed Oct 19 11:04:49 2011 (r226536)
@@ -237,19 +237,18 @@ struct pfi_dynaddr {
uma_zdestroy(var)
#ifdef __FreeBSD__
-VNET_DECLARE(struct mtx, pf_task_mtx);
-#define V_pf_task_mtx VNET(pf_task_mtx)
+extern struct mtx pf_task_mtx;
-#define PF_LOCK_ASSERT() mtx_assert(&V_pf_task_mtx, MA_OWNED)
-#define PF_UNLOCK_ASSERT() mtx_assert(&V_pf_task_mtx, MA_NOTOWNED)
+#define PF_LOCK_ASSERT() mtx_assert(&pf_task_mtx, MA_OWNED)
+#define PF_UNLOCK_ASSERT() mtx_assert(&pf_task_mtx, MA_NOTOWNED)
#define PF_LOCK() do { \
PF_UNLOCK_ASSERT(); \
- mtx_lock(&V_pf_task_mtx); \
+ mtx_lock(&pf_task_mtx); \
} while(0)
#define PF_UNLOCK() do { \
PF_LOCK_ASSERT(); \
- mtx_unlock(&V_pf_task_mtx); \
+ mtx_unlock(&pf_task_mtx); \
} while(0)
#else
#define PF_LOCK_ASSERT()
@@ -270,9 +269,6 @@ VNET_DECLARE(struct mtx, pf_task_mtx);
PF_LOCK(); \
} while(0)
-extern void init_pf_mutex(void);
-extern void destroy_pf_mutex(void);
-
#define PF_MODVER 1
#define PFLOG_MODVER 1
#define PFSYNC_MODVER 1
More information about the svn-src-head
mailing list