From owner-svn-src-projects@freebsd.org Sat Mar 5 15:07:26 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DB003A137DC for ; Sat, 5 Mar 2016 15:07:26 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 92B94819; Sat, 5 Mar 2016 15:07:26 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u25F7PbU054683; Sat, 5 Mar 2016 15:07:25 GMT (envelope-from bz@FreeBSD.org) Received: (from bz@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u25F7Pti054682; Sat, 5 Mar 2016 15:07:25 GMT (envelope-from bz@FreeBSD.org) Message-Id: <201603051507.u25F7Pti054682@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bz set sender to bz@FreeBSD.org using -f From: "Bjoern A. Zeeb" Date: Sat, 5 Mar 2016 15:07:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r296409 - projects/vnet/sys/net X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Mar 2016 15:07:26 -0000 Author: bz Date: Sat Mar 5 15:07:25 2016 New Revision: 296409 URL: https://svnweb.freebsd.org/changeset/base/296409 Log: Decompose the protocol hooks and the interface creation as they occur (and have to happen) at totally different times. Interfaces are created before protocols are attached and protocol hooks are removed before protocols are torn down. This prevents a panic on boot when enc(4) is compiled into the kernel or the module is loaded from loader. Reported by: kp Sponsored by: The FreeBSD Foundation Modified: projects/vnet/sys/net/if_enc.c Modified: projects/vnet/sys/net/if_enc.c ============================================================================== --- projects/vnet/sys/net/if_enc.c Sat Mar 5 13:17:53 2016 (r296408) +++ projects/vnet/sys/net/if_enc.c Sat Mar 5 15:07:25 2016 (r296409) @@ -136,7 +136,6 @@ enc_clone_destroy(struct ifnet *ifp) sc = ifp->if_softc; KASSERT(sc == V_enc_sc, ("sc != ifp->if_softc")); - enc_remove_hhooks(sc); bpfdetach(ifp); if_detach(ifp); if_free(ifp); @@ -170,10 +169,6 @@ enc_clone_create(struct if_clone *ifc, i ifp->if_softc = sc; if_attach(ifp); bpfattach(ifp, DLT_ENC, sizeof(struct enchdr)); - if (enc_add_hhooks(sc) != 0) { - enc_clone_destroy(ifp); - return (ENXIO); - } return (0); } @@ -373,6 +368,17 @@ VNET_SYSINIT(vnet_enc_init, SI_SUB_PSEUD vnet_enc_init, NULL); static void +vnet_enc_init_proto(void *unused __unused) +{ + KASSERT(V_enc_sc != NULL, ("%s: V_enc_sc is %p\n", __func__, V_enc_sc)); + + if (enc_add_hhooks(V_enc_sc) != 0) + enc_clone_destroy(V_enc_sc->sc_ifp); +} +VNET_SYSINIT(vnet_enc_init_proto, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY, + vnet_enc_init_proto, NULL); + +static void vnet_enc_uninit(const void *unused __unused) { @@ -381,6 +387,16 @@ vnet_enc_uninit(const void *unused __unu VNET_SYSUNINIT(vnet_enc_uninit, SI_SUB_PSEUDO, SI_ORDER_ANY, vnet_enc_uninit, NULL); +static void +vnet_enc_uninit_proto(void *unused __unused) +{ + KASSERT(V_enc_sc != NULL, ("%s: V_enc_sc is %p\n", __func__, V_enc_sc)); + + enc_remove_hhooks(V_enc_sc); +} +VNET_SYSUNINIT(vnet_enc_uninit_proto, SI_SUB_PROTO_IFATTACHDOMAIN, + SI_ORDER_ANY, vnet_enc_uninit_proto, NULL); + static int enc_modevent(module_t mod, int type, void *data) {