Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Aug 2022 07:51:54 -0700
From:      Kyle Evans <kevans@freebsd.org>
To:        "Alexander V. Chernikov" <melifaro@freebsd.org>
Cc:        src-committers@freebsd.org, dev-commits-src-all@freebsd.org,  dev-commits-src-main@freebsd.org
Subject:   Re: git: 9b967bd65de6 - main - domains: allow domains to be unloaded
Message-ID:  <CACNAnaGUc-c8ohwT4mNVvHmBeCG14NTLQW4AP7bJXfsSMdaBvA@mail.gmail.com>
In-Reply-To: <202208140922.27E9Mewk097766@gitrepo.freebsd.org>
References:  <202208140922.27E9Mewk097766@gitrepo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Aug 14, 2022 at 2:22 AM Alexander V. Chernikov
<melifaro@freebsd.org> wrote:
>
> The branch main has been updated by melifaro:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=9b967bd65de6647aed68a141dc34f9b223a2593c
>
> commit 9b967bd65de6647aed68a141dc34f9b223a2593c
> Author:     Alexander V. Chernikov <melifaro@FreeBSD.org>
> AuthorDate: 2022-08-12 13:36:53 +0000
> Commit:     Alexander V. Chernikov <melifaro@FreeBSD.org>
> CommitDate: 2022-08-14 09:22:33 +0000
>
>     domains: allow domains to be unloaded
>
>     Add domain_remove() SYSUNINT callback that removes the domain
>      from the domain list if it has DOMF_UNLOADABLE flag set.
>     This change is required to support netlink ( D36002 ).
>
>     Reviewed by:    glebius
>     Differential Revision: https://reviews.freebsd.org/D36173
> ---
>  sys/kern/uipc_domain.c | 23 +++++++++++++++++++++++
>  sys/sys/domain.h       |  4 ++++
>  2 files changed, 27 insertions(+)
>
> diff --git a/sys/kern/uipc_domain.c b/sys/kern/uipc_domain.c
> index c70b3150cbf0..2cae08be089a 100644
> --- a/sys/kern/uipc_domain.c
> +++ b/sys/kern/uipc_domain.c
> @@ -239,6 +239,29 @@ domain_add(void *data)
>         mtx_unlock(&dom_mtx);
>  }
>
> +void
> +domain_remove(void *data)
> +{
> +       struct domain *dp = (struct domain *)data;
> +
> +       if ((dp->dom_flags & DOMF_UNLOADABLE) == 0)
> +               return;
> +
> +       mtx_lock(&dom_mtx);
> +       if (domains == dp) {
> +               domains = dp->dom_next;
> +       } else {
> +               struct domain *curr;
> +               for (curr = domains; curr != NULL; curr = curr->dom_next) {
> +                       if (curr->dom_next == dp) {
> +                               curr->dom_next = dp->dom_next;
> +                               break;
> +                       }
> +               }
> +       }
> +       mtx_unlock(&dom_mtx);
> +}
> +
>  /* ARGSUSED*/
>  static void
>  domaininit(void *dummy)

While it's not important for the one domain you care about, this
should likely also check if any contained protocols have
pr_fasttimo/pr_slowtimo and purge them from the appropriate list, just
to be technically correct. (Or at least assert under INVARIANTS that
they do not)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CACNAnaGUc-c8ohwT4mNVvHmBeCG14NTLQW4AP7bJXfsSMdaBvA>