From nobody Tue May 3 17:28:58 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id D3B911AC7342; Tue, 3 May 2022 17:28:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Kt6Q22ydtz3DMK; Tue, 3 May 2022 17:28:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1651598938; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=5gNeZ/MKJSxkDYS8uQuXSYBL7yuoFJdPjqj5RpeBKn8=; b=Z/U8Rcqig4QdI8+Jklecjbd7OqqDW1yu8GUdEUd3iYVNS7pD+VmAYeK8MfT0yMqeU/TnNe cvBQ9wMkkmtupHCk9XTUudPtvgbSj8WzmVuYxUyPIr3rkNJnhxmqd+fxpg6FB6YWo+Tv7c hnNKx+Bi3WwGd/0nWUo5YY8wATZPRJG0Iuqsefg2XefjCSKq4CKWE3ObeDi56+C4bO6MHg O+qHV6lFnvTSz6Bqvu2DlVVG27mo6Gt3gispUYW7hKHPJWHUIzIQZq4muO9PbvbsNKMJ/O lwwBDrb2ekFkHRDu6lTHTy/B8d2/rhVfPMz/cFI+tWh+h0A0Ojr9Bc5nxc7HLg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2085D22A01; Tue, 3 May 2022 17:28:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 243HSwud050053; Tue, 3 May 2022 17:28:58 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 243HSw8x050052; Tue, 3 May 2022 17:28:58 GMT (envelope-from git) Date: Tue, 3 May 2022 17:28:58 GMT Message-Id: <202205031728.243HSw8x050052@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Marko Zec Subject: git: 6c741ffbfa7f - main - Revert "mbuf: do not restore dying interfaces" List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: zec X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6c741ffbfa7f3dabb6af23dbbfe1d1e9f535d16b Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1651598938; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=5gNeZ/MKJSxkDYS8uQuXSYBL7yuoFJdPjqj5RpeBKn8=; b=wI0A5pDr1YVYT+16MJkFA4y0Lnylcauql+Gxiiho2bRAGay1gsu1H+bMyarSuNGK8R/p9w rt9K9sq4QEC105ZneihkSr0K2AqvZMpDilBo9CqTKI9JPSbjA9MCOwqY7WBGrCwzn9tszf i9M1UDIh3t4HdMAa0zIKCmLIDi636gY0/lnDCoQk55m9YS3UTBhbvgxnZhTrhqCrrc5yOA icMBVf59Af8s2cJMuqIIEt7nGI3UUHWKIVSg117b2FFAgCZ08k7hGEwPQqFTaA5KyjiCYd ZGHwLmP67xeL9F4UukKb5yHbKxd2lgxJThR/mi1yo+/COlUpB3sIh/LZl4o4yQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1651598938; a=rsa-sha256; cv=none; b=RYAvIHw0gYaK/Ox8FHg7jUf+dwWZzzTDb2brXsibwNnlqJQl5bO2TQstbx42z3n55Nha7V nkspgJZaZbj/PET4PjKxPgDhnbXhvV7N4GKKTlDaJanmPwkrM5wDh3S2oQCl5xubcFf1Ob 7NMD4rUz2J3gMHE9Dw/mAJt+ZqfBUr605qyvYpfUQhSGZzj3J7qK5DuuTMEUqzhJO8621G qO/zdewpwi2xz5sI5bxParrrevSjr2iqZtAMY8uW8YaATnLzXfitOFtkbWfJX4YxIeRumh hF+M5qAj7bkDeOBumiOa3Y9voKD298JXGxfu9UOGni9QzM3nKNGnQehAKeI9bg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by zec: URL: https://cgit.FreeBSD.org/src/commit/?id=6c741ffbfa7f3dabb6af23dbbfe1d1e9f535d16b commit 6c741ffbfa7f3dabb6af23dbbfe1d1e9f535d16b Author: Marko Zec AuthorDate: 2022-05-03 14:56:57 +0000 Commit: Marko Zec CommitDate: 2022-05-03 17:11:40 +0000 Revert "mbuf: do not restore dying interfaces" This reverts commit 703e533da5e2e4743d38bbf4605fec041bc69976. Revert "ifnet/mbuf: provide KPI to serialize/restore m->m_pkthdr.rcvif" This reverts commit e1882428dcbbafd2814d7e17b977a8f686784b39. Obtained from: github.com/glebius/FreeBSD/commits/backout-ifindex --- sys/kern/kern_mbuf.c | 27 --------------------------- sys/net/if.c | 49 +++++++++++++------------------------------------ sys/net/if_var.h | 9 +-------- sys/sys/mbuf.h | 6 ------ 4 files changed, 14 insertions(+), 77 deletions(-) diff --git a/sys/kern/kern_mbuf.c b/sys/kern/kern_mbuf.c index 23050e991418..f1e76ef00c65 100644 --- a/sys/kern/kern_mbuf.c +++ b/sys/kern/kern_mbuf.c @@ -1635,33 +1635,6 @@ m_snd_tag_destroy(struct m_snd_tag *mst) counter_u64_add(snd_tag_count, -1); } -void -m_rcvif_serialize(struct mbuf *m) -{ - u_short idx, gen; - - M_ASSERTPKTHDR(m); - idx = m->m_pkthdr.rcvif->if_index; - gen = m->m_pkthdr.rcvif->if_idxgen; - m->m_pkthdr.rcvidx = idx; - m->m_pkthdr.rcvgen = gen; -} - -struct ifnet * -m_rcvif_restore(struct mbuf *m) -{ - struct ifnet *ifp; - - M_ASSERTPKTHDR(m); - NET_EPOCH_ASSERT(); - - ifp = ifnet_byindexgen(m->m_pkthdr.rcvidx, m->m_pkthdr.rcvgen); - if (ifp == NULL || (ifp->if_flags & IFF_DYING)) - return (NULL); - - return (m->m_pkthdr.rcvif = ifp); -} - /* * Allocate an mbuf with anonymous external pages. */ diff --git a/sys/net/if.c b/sys/net/if.c index ff7071cea364..3b303fe42e99 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -313,10 +313,7 @@ VNET_DEFINE(struct ifgrouphead, ifg_head); /* Table of ifnet by index. */ static int if_index; static int if_indexlim = 8; -static struct ifindex_entry { - struct ifnet *ife_ifnet; - uint16_t ife_gencnt; -} *ifindex_table; +static struct ifnet **ifindex_table; SYSCTL_NODE(_net_link_generic, IFMIB_SYSTEM, system, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, @@ -328,8 +325,8 @@ sysctl_ifcount(SYSCTL_HANDLER_ARGS) IFNET_RLOCK(); for (int i = 1; i <= if_index; i++) - if (ifindex_table[i].ife_ifnet != NULL && - ifindex_table[i].ife_ifnet->if_vnet == curvnet) + if (ifindex_table[i] != NULL && + ifindex_table[i]->if_vnet == curvnet) rv = i; IFNET_RUNLOCK(); @@ -373,7 +370,7 @@ ifnet_byindex(u_int idx) if (__predict_false(idx > if_index)) return (NULL); - ifp = ck_pr_load_ptr(&ifindex_table[idx].ife_ifnet); + ifp = ck_pr_load_ptr(&ifindex_table[idx]); if (curvnet != NULL && ifp != NULL && ifp->if_vnet != curvnet) ifp = NULL; @@ -394,24 +391,6 @@ ifnet_byindex_ref(u_int idx) return (ifp); } -struct ifnet * -ifnet_byindexgen(uint16_t idx, uint16_t gen) -{ - struct ifnet *ifp; - - NET_EPOCH_ASSERT(); - - if (__predict_false(idx > if_index)) - return (NULL); - - ifp = ck_pr_load_ptr(&ifindex_table[idx].ife_ifnet); - - if (ifindex_table[idx].ife_gencnt == gen) - return (ifp); - else - return (NULL); -} - /* * Network interface utility routines. * @@ -578,13 +557,13 @@ if_alloc_domain(u_char type, int numa_domain) * next slot. */ for (idx = 1; idx <= if_index; idx++) { - if (ifindex_table[idx].ife_ifnet == NULL) + if (ifindex_table[idx] == NULL) break; } /* Catch if_index overflow. */ if (idx >= if_indexlim) { - struct ifindex_entry *new, *old; + struct ifnet **new, **old; int newlim; newlim = if_indexlim * 2; @@ -600,8 +579,7 @@ if_alloc_domain(u_char type, int numa_domain) if_index = idx; ifp->if_index = idx; - ifp->if_idxgen = ifindex_table[idx].ife_gencnt; - ck_pr_store_ptr(&ifindex_table[idx].ife_ifnet, ifp); + ck_pr_store_ptr(&ifindex_table[idx], ifp); IFNET_WUNLOCK(); return (ifp); @@ -676,10 +654,9 @@ if_free(struct ifnet *ifp) * virtualized and interface would outlive the vnet. */ IFNET_WLOCK(); - MPASS(ifindex_table[ifp->if_index].ife_ifnet == ifp); - ck_pr_store_ptr(&ifindex_table[ifp->if_index].ife_ifnet, NULL); - ifindex_table[ifp->if_index].ife_gencnt++; - while (if_index > 0 && ifindex_table[if_index].ife_ifnet == NULL) + MPASS(ifindex_table[ifp->if_index] == ifp); + ck_pr_store_ptr(&ifindex_table[ifp->if_index], NULL); + while (if_index > 0 && ifindex_table[if_index] == NULL) if_index--; IFNET_WUNLOCK(); @@ -828,7 +805,7 @@ if_attach_internal(struct ifnet *ifp, bool vmove) struct sockaddr_dl *sdl; struct ifaddr *ifa; - MPASS(ifindex_table[ifp->if_index].ife_ifnet == ifp); + MPASS(ifindex_table[ifp->if_index] == ifp); #ifdef VIMAGE ifp->if_vnet = curvnet; @@ -4517,8 +4494,8 @@ if_show_ifnet(struct ifnet *ifp) IF_DB_PRINTF("%d", if_dunit); IF_DB_PRINTF("%s", if_description); IF_DB_PRINTF("%u", if_index); - IF_DB_PRINTF("%d", if_idxgen); IF_DB_PRINTF("%u", if_refcount); + IF_DB_PRINTF("%d", if_index_reserved); IF_DB_PRINTF("%p", if_softc); IF_DB_PRINTF("%p", if_l2com); IF_DB_PRINTF("%p", if_llsoftc); @@ -4573,7 +4550,7 @@ DB_SHOW_ALL_COMMAND(ifnets, db_show_all_ifnets) u_short idx; for (idx = 1; idx <= if_index; idx++) { - ifp = ifindex_table[idx].ife_ifnet; + ifp = ifindex_table[idx]; if (ifp == NULL) continue; db_printf( "%20s ifp=%p\n", ifp->if_xname, ifp); diff --git a/sys/net/if_var.h b/sys/net/if_var.h index e054c613e9e6..d741d8abee2e 100644 --- a/sys/net/if_var.h +++ b/sys/net/if_var.h @@ -334,7 +334,7 @@ struct ifnet { const char *if_dname; /* driver name */ int if_dunit; /* unit or IF_DUNIT_NONE */ u_short if_index; /* numeric abbreviation for this if */ - u_short if_idxgen; /* ... and its generation count */ + short if_index_reserved; /* spare space to grow if_index */ char if_xname[IFNAMSIZ]; /* external name (name + unit) */ char *if_description; /* interface description */ @@ -644,13 +644,6 @@ extern struct sx ifnet_sxlock; struct ifnet *ifnet_byindex(u_int); struct ifnet *ifnet_byindex_ref(u_int); -/* - * ifnet_byindexgen() looks up ifnet by index and generation count, - * attempting to restore a weak pointer that had been stored across - * the epoch. - */ -struct ifnet *ifnet_byindexgen(uint16_t idx, uint16_t gen); - VNET_DECLARE(struct ifnethead, ifnet); VNET_DECLARE(struct ifgrouphead, ifg_head); VNET_DECLARE(struct ifnet *, loif); /* first loopback interface */ diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h index 78b175ebe2c0..8ca23b60269d 100644 --- a/sys/sys/mbuf.h +++ b/sys/sys/mbuf.h @@ -159,10 +159,6 @@ struct pkthdr { union { struct m_snd_tag *snd_tag; /* send tag, if any */ struct ifnet *rcvif; /* rcv interface */ - struct { - uint16_t rcvidx; /* rcv interface index ... */ - uint16_t rcvgen; /* ... and generation count */ - }; }; SLIST_HEAD(packet_tags, m_tag) tags; /* list of packet tags */ int32_t len; /* total packet length */ @@ -866,8 +862,6 @@ int m_snd_tag_alloc(struct ifnet *, void m_snd_tag_init(struct m_snd_tag *, struct ifnet *, const struct if_snd_tag_sw *); void m_snd_tag_destroy(struct m_snd_tag *); -void m_rcvif_serialize(struct mbuf *); -struct ifnet *m_rcvif_restore(struct mbuf *); static __inline int m_gettype(int size)