From: Robin Murphy <robin.murphy@arm.com>
To: Masahiro Yamada <masahiroy@kernel.org>,
linux-kernel@vger.kernel.org, Christoph Hellwig <hch@lst.de>,
Marek Szyprowski <m.szyprowski@samsung.com>,
iommu@lists.linux.dev
Cc: Guenter Roeck <linux@roeck-us.net>,
linux-kbuild@vger.kernel.org,
"Martin K. Petersen" <martin.petersen@oracle.com>,
Ming Lin <ming.l@ssi.samsung.com>,
Sagi Grimberg <sagi@grimberg.me>
Subject: Re: [PATCH] lib/sg_pool: change module_init(sg_pool_init) to subsys_initcall
Date: Fri, 23 Sep 2022 13:09:44 +0100 [thread overview]
Message-ID: <a5a3ae17-ca58-d93d-e6b0-708ea5fc1ff8@arm.com> (raw)
In-Reply-To: <20220923113835.21544-1-masahiroy@kernel.org>
On 2022-09-23 12:38, Masahiro Yamada wrote:
> sg_alloc_table_chained() is called by several drivers, but if it is
> called before sg_pool_init(), it results in a NULL pointer dereference
> in sg_pool_alloc().
>
> Since commit 9b1d6c895002 ("lib: scatterlist: move SG pool code from
> SCSI driver to lib/sg_pool.c"), we rely on module_init(sg_pool_init)
> is invoked before other module_init calls but this assumption is
> fragile.
>
> I slightly changed the link order while Kbuild refactoring Kbuild,
> then uncovered this issue. I should keep the current link order, but
> depending on a specific call order among module_init is so fragine.
>
> We usually define the init order by specifying *_initcall correctly,
> or delay the driver probing by returning -EPROBE_DEFER.
>
> Change module_initcall() to subsys_initcall(), and also delete the
> pointless module_exit() because lib/sg_pool.c is always compiled as
> built-in. (CONFIG_SG_POOL is bool)
Makes sense to me. Short of having some cool-but-impractically-complex
system to derive a dependency graph from the config and compute an
initcall order from that, initialising helper library code at an earlier
step than drivers certainly seems like the next-best option, and subsys
doesn't seem inappropriate for the nature of this code. FWIW,
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
> Link: https://lore.kernel.org/all/20220921043946.GA1355561@roeck-us.net/
> Link: https://lore.kernel.org/all/8e70837d-d859-dfb2-bf7f-83f8b31467bc@samsung.com/
> Fixes: 9b1d6c895002 ("lib: scatterlist: move SG pool code from SCSI driver to lib/sg_pool.c")
> Reported-by: Guenter Roeck <linux@roeck-us.net>
> Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> ---
>
> I am sending this to DMA subsystem because I did not find
> a corresponding one for lib/sg_pool.c
>
> lib/sg_pool.c | 16 ++--------------
> 1 file changed, 2 insertions(+), 14 deletions(-)
>
> diff --git a/lib/sg_pool.c b/lib/sg_pool.c
> index a0b1a52cd6f7..9bfe60ca3f37 100644
> --- a/lib/sg_pool.c
> +++ b/lib/sg_pool.c
> @@ -1,5 +1,5 @@
> // SPDX-License-Identifier: GPL-2.0-only
> -#include <linux/module.h>
> +#include <linux/init.h>
> #include <linux/scatterlist.h>
> #include <linux/mempool.h>
> #include <linux/slab.h>
> @@ -177,16 +177,4 @@ static __init int sg_pool_init(void)
> return -ENOMEM;
> }
>
> -static __exit void sg_pool_exit(void)
> -{
> - int i;
> -
> - for (i = 0; i < SG_MEMPOOL_NR; i++) {
> - struct sg_pool *sgp = sg_pools + i;
> - mempool_destroy(sgp->pool);
> - kmem_cache_destroy(sgp->slab);
> - }
> -}
> -
> -module_init(sg_pool_init);
> -module_exit(sg_pool_exit);
> +subsys_initcall(sg_pool_init);
next prev parent reply other threads:[~2022-09-23 12:18 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20220923113941eucas1p2e5f7b9bc7316114e69ab6348d40d3b6d@eucas1p2.samsung.com>
2022-09-23 11:38 ` [PATCH] lib/sg_pool: change module_init(sg_pool_init) to subsys_initcall Masahiro Yamada
2022-09-23 11:43 ` Masahiro Yamada
2022-09-23 12:09 ` Robin Murphy [this message]
2022-09-23 12:20 ` Marek Szyprowski
2022-09-23 14:49 ` Christoph Hellwig
2022-09-23 15:28 Guenter Roeck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a5a3ae17-ca58-d93d-e6b0-708ea5fc1ff8@arm.com \
--to=robin.murphy@arm.com \
--cc=hch@lst.de \
--cc=iommu@lists.linux.dev \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=m.szyprowski@samsung.com \
--cc=martin.petersen@oracle.com \
--cc=masahiroy@kernel.org \
--cc=ming.l@ssi.samsung.com \
--cc=sagi@grimberg.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.