Page MenuHomeFreeBSD

D29211.diff
No OneTemporary

D29211.diff

diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -1390,6 +1390,8 @@
VNET_DECLARE(void *, pf_swi_cookie);
#define V_pf_swi_cookie VNET(pf_swi_cookie)
+VNET_DECLARE(struct intr_event *, pf_swi_ie);
+#define V_pf_swi_ie VNET(pf_swi_ie)
VNET_DECLARE(uint64_t, pf_stateid[MAXCPU]);
#define V_pf_stateid VNET(pf_stateid)
diff --git a/sys/netpfil/pf/if_pfsync.c b/sys/netpfil/pf/if_pfsync.c
--- a/sys/netpfil/pf/if_pfsync.c
+++ b/sys/netpfil/pf/if_pfsync.c
@@ -254,6 +254,8 @@
#define V_pfsyncif VNET(pfsyncif)
VNET_DEFINE_STATIC(void *, pfsync_swi_cookie) = NULL;
#define V_pfsync_swi_cookie VNET(pfsync_swi_cookie)
+VNET_DEFINE_STATIC(struct intr_event *, pfsync_swi_ie);
+#define V_pfsync_swi_ie VNET(pfsync_swi_ie)
VNET_DEFINE_STATIC(struct pfsyncstats, pfsyncstats);
#define V_pfsyncstats VNET(pfsyncstats)
VNET_DEFINE_STATIC(int, pfsync_carp_adj) = CARP_MAXSKEW;
@@ -2472,7 +2474,7 @@
V_pfsync_cloner = if_clone_simple(pfsyncname,
pfsync_clone_create, pfsync_clone_destroy, 1);
- error = swi_add(NULL, pfsyncname, pfsyncintr, V_pfsyncif,
+ error = swi_add(&V_pfsync_swi_ie, pfsyncname, pfsyncintr, V_pfsyncif,
SWI_NET, INTR_MPSAFE, &V_pfsync_swi_cookie);
if (error) {
if_clone_detach(V_pfsync_cloner);
@@ -2487,11 +2489,15 @@
static void
vnet_pfsync_uninit(const void *unused __unused)
{
+ int ret;
pfsync_pointers_uninit();
if_clone_detach(V_pfsync_cloner);
- swi_remove(V_pfsync_swi_cookie);
+ ret = swi_remove(V_pfsync_swi_cookie);
+ MPASS(ret == 0);
+ ret = intr_event_destroy(V_pfsync_swi_ie);
+ MPASS(ret == 0);
}
VNET_SYSUNINIT(vnet_pfsync_uninit, SI_SUB_PROTO_FIREWALL, SI_ORDER_FOURTH,
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -388,6 +388,7 @@
&pf_ioctl_maxcount, 0, "Maximum number of tables, addresses, ... in a single ioctl() call");
VNET_DEFINE(void *, pf_swi_cookie);
+VNET_DEFINE(struct intr_event *, pf_swi_ie);
VNET_DEFINE(uint32_t, pf_hashseed);
#define V_pf_hashseed VNET(pf_hashseed)
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -331,7 +331,7 @@
for (int i = 0; i < SCNT_MAX; i++)
V_pf_status.scounters[i] = counter_u64_alloc(M_WAITOK);
- if (swi_add(NULL, "pf send", pf_intr, curvnet, SWI_NET,
+ if (swi_add(&V_pf_swi_ie, "pf send", pf_intr, curvnet, SWI_NET,
INTR_MPSAFE, &V_pf_swi_cookie) != 0)
/* XXXGL: leaked all above. */
return;
@@ -4670,6 +4670,7 @@
static void
pf_unload_vnet(void)
{
+ int ret;
V_pf_vnet_active = 0;
V_pf_status.running = 0;
@@ -4679,7 +4680,10 @@
shutdown_pf();
PF_RULES_WUNLOCK();
- swi_remove(V_pf_swi_cookie);
+ ret = swi_remove(V_pf_swi_cookie);
+ MPASS(ret == 0);
+ ret = intr_event_destroy(V_pf_swi_ie);
+ MPASS(ret == 0);
pf_unload_vnet_purge();

File Metadata

Mime Type
text/plain
Expires
Sat, Dec 20, 10:47 AM (9 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27095776
Default Alt Text
D29211.diff (2 KB)

Event Timeline