Date: Fri, 26 Jul 2013 23:31:48 -0700 From: Craig Rodrigues <rodrigc@FreeBSD.org> To: Gleb Smirnoff <glebius@freebsd.org> Cc: Adrian Chadd <adrian@freebsd.org>, Marko Zec <zec@fer.hr>, "freebsd-virtualization@freebsd.org" <freebsd-virtualization@freebsd.org>, freebsd-pf@freebsd.org Subject: De-virtualize V_pf_mtag_z to eliminate kernel panics. Message-ID: <CAG=rPVdkpj6mPs=nR_%2B3snb14RUA44pDgSMQkZC9vnBP%2BibCGA@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
[-- Attachment #1 --] Gleb, Since you did a lot of work in GRN 240233 to fix PF issues, especially for VIMAGE, I thought I would ask your opinion on the attached patch. In this post: http://lists.freebsd.org/pipermail/freebsd-virtualization/2013-July/001405.html I reported multiple PF-related panics when VIMAGE was enabled in my kernel config. In these posts: http://lists.freebsd.org/pipermail/freebsd-virtualization/2013-July/001413.html http://lists.freebsd.org/pipermail/freebsd-virtualization/2013-July/001420.html Marko Zec seemed to think that de-virtualizing V_pf_mtag_z would be a valid solution to this problem, and that keeping V_pf_mtag_z as a per-vnet variable is not necessary. What do you think of Marko's comments, and this patch? Thanks. -- Craig [-- Attachment #2 --] Index: sys/netpfil/pf/pf.c =================================================================== --- sys/netpfil/pf/pf.c (revision 253346) +++ sys/netpfil/pf/pf.c (working copy) @@ -187,8 +187,7 @@ static VNET_DEFINE(uma_zone_t, pf_sources_z); #define V_pf_sources_z VNET(pf_sources_z) -static VNET_DEFINE(uma_zone_t, pf_mtag_z); -#define V_pf_mtag_z VNET(pf_mtag_z) +uma_zone_t pf_mtag_z; VNET_DEFINE(uma_zone_t, pf_state_z); VNET_DEFINE(uma_zone_t, pf_state_key_z); @@ -749,7 +748,7 @@ V_pf_altqs_inactive = &V_pf_altqs[1]; /* Mbuf tags */ - V_pf_mtag_z = uma_zcreate("pf mtags", sizeof(struct m_tag) + + pf_mtag_z = uma_zcreate("pf mtags", sizeof(struct m_tag) + sizeof(struct pf_mtag), NULL, NULL, pf_mtag_init, NULL, UMA_ALIGN_PTR, 0); @@ -803,7 +802,7 @@ mtx_destroy(&pf_overloadqueue_mtx); mtx_destroy(&pf_unlnkdrules_mtx); - uma_zdestroy(V_pf_mtag_z); + uma_zdestroy(pf_mtag_z); uma_zdestroy(V_pf_sources_z); uma_zdestroy(V_pf_state_z); uma_zdestroy(V_pf_state_key_z); @@ -827,7 +826,7 @@ pf_mtag_free(struct m_tag *t) { - uma_zfree(V_pf_mtag_z, t); + uma_zfree(pf_mtag_z, t); } struct pf_mtag * @@ -838,7 +837,7 @@ if ((mtag = m_tag_find(m, PACKET_TAG_PF, NULL)) != NULL) return ((struct pf_mtag *)(mtag + 1)); - mtag = uma_zalloc(V_pf_mtag_z, M_NOWAIT); + mtag = uma_zalloc(pf_mtag_z, M_NOWAIT); if (mtag == NULL) return (NULL); bzero(mtag + 1, sizeof(struct pf_mtag));
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAG=rPVdkpj6mPs=nR_%2B3snb14RUA44pDgSMQkZC9vnBP%2BibCGA>
