From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> To: "Ulf Hansson" <ulf.hansson@linaro.org>, "Marcel Holtmann" <marcel@holtmann.org>, "Luiz Augusto von Dentz" <luiz.dentz@gmail.com>, "Matthias Brugger" <matthias.bgg@gmail.com>, "AngeloGioacchino Del Regno" <angelogioacchino.delregno@collabora.com>, "Kalle Valo" <kvalo@kernel.org>, "Jeff Johnson" <jjohnson@kernel.org>, "Arend van Spriel" <arend.vanspriel@broadcom.com>, "Brian Norris" <briannorris@chromium.org>, "Jérôme Pouiller" <jerome.pouiller@silabs.com> Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-bluetooth@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-wireless@vger.kernel.org, ath10k@lists.infradead.org, brcm80211@lists.linux.dev, brcm80211-dev-list.pdl@broadcom.com, Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Subject: [PATCH 1/7] mmc: sdio: store owner from modules with sdio_register_driver() Date: Fri, 29 Mar 2024 18:24:31 +0100 [thread overview] Message-ID: <20240329-module-owner-sdio-v1-1-e4010b11ccaa@linaro.org> (raw) In-Reply-To: <20240329-module-owner-sdio-v1-0-e4010b11ccaa@linaro.org> Modules registering driver with sdio_register_driver() might forget to set .owner field. The field is used by some of other kernel parts for reference counting (try_module_get()), so it is expected that drivers will set it. Solve the problem by moving this task away from the drivers to the core code, just like we did for platform_driver in commit 9447057eaff8 ("platform_device: use a macro instead of platform_driver_register"). Since many drivers forget to set the .owner, this effectively will fix them. Examples of fixed drivers are: ath6kl, b43, btsdio.c, ks7010, libertas, MediaTek WiFi drivers, Realtek WiFi drivers, rsi, siano, wilc1000, wl1251 and more. Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> --- drivers/mmc/core/sdio_bus.c | 9 ++++++--- include/linux/mmc/sdio_func.h | 5 ++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c index 71d885fbc228..c5fdfe2325f8 100644 --- a/drivers/mmc/core/sdio_bus.c +++ b/drivers/mmc/core/sdio_bus.c @@ -265,16 +265,19 @@ void sdio_unregister_bus(void) } /** - * sdio_register_driver - register a function driver + * __sdio_register_driver - register a function driver * @drv: SDIO function driver + * @owner: owning module/driver */ -int sdio_register_driver(struct sdio_driver *drv) +int __sdio_register_driver(struct sdio_driver *drv, struct module *owner) { drv->drv.name = drv->name; drv->drv.bus = &sdio_bus_type; + drv->drv.owner = owner; + return driver_register(&drv->drv); } -EXPORT_SYMBOL_GPL(sdio_register_driver); +EXPORT_SYMBOL_GPL(__sdio_register_driver); /** * sdio_unregister_driver - unregister a function driver diff --git a/include/linux/mmc/sdio_func.h b/include/linux/mmc/sdio_func.h index 478855b8e406..fed1f5f4a8d3 100644 --- a/include/linux/mmc/sdio_func.h +++ b/include/linux/mmc/sdio_func.h @@ -106,7 +106,10 @@ struct sdio_driver { .class = (dev_class), \ .vendor = SDIO_ANY_ID, .device = SDIO_ANY_ID -extern int sdio_register_driver(struct sdio_driver *); +/* use a macro to avoid include chaining to get THIS_MODULE */ +#define sdio_register_driver(drv) \ + __sdio_register_driver(drv, THIS_MODULE) +extern int __sdio_register_driver(struct sdio_driver *, struct module *); extern void sdio_unregister_driver(struct sdio_driver *); /** -- 2.34.1
WARNING: multiple messages have this Message-ID (diff)
From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> To: "Ulf Hansson" <ulf.hansson@linaro.org>, "Marcel Holtmann" <marcel@holtmann.org>, "Luiz Augusto von Dentz" <luiz.dentz@gmail.com>, "Matthias Brugger" <matthias.bgg@gmail.com>, "AngeloGioacchino Del Regno" <angelogioacchino.delregno@collabora.com>, "Kalle Valo" <kvalo@kernel.org>, "Jeff Johnson" <jjohnson@kernel.org>, "Arend van Spriel" <arend.vanspriel@broadcom.com>, "Brian Norris" <briannorris@chromium.org>, "Jérôme Pouiller" <jerome.pouiller@silabs.com> Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-bluetooth@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-wireless@vger.kernel.org, ath10k@lists.infradead.org, brcm80211@lists.linux.dev, brcm80211-dev-list.pdl@broadcom.com, Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Subject: [PATCH 1/7] mmc: sdio: store owner from modules with sdio_register_driver() Date: Fri, 29 Mar 2024 18:24:31 +0100 [thread overview] Message-ID: <20240329-module-owner-sdio-v1-1-e4010b11ccaa@linaro.org> (raw) In-Reply-To: <20240329-module-owner-sdio-v1-0-e4010b11ccaa@linaro.org> Modules registering driver with sdio_register_driver() might forget to set .owner field. The field is used by some of other kernel parts for reference counting (try_module_get()), so it is expected that drivers will set it. Solve the problem by moving this task away from the drivers to the core code, just like we did for platform_driver in commit 9447057eaff8 ("platform_device: use a macro instead of platform_driver_register"). Since many drivers forget to set the .owner, this effectively will fix them. Examples of fixed drivers are: ath6kl, b43, btsdio.c, ks7010, libertas, MediaTek WiFi drivers, Realtek WiFi drivers, rsi, siano, wilc1000, wl1251 and more. Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> --- drivers/mmc/core/sdio_bus.c | 9 ++++++--- include/linux/mmc/sdio_func.h | 5 ++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c index 71d885fbc228..c5fdfe2325f8 100644 --- a/drivers/mmc/core/sdio_bus.c +++ b/drivers/mmc/core/sdio_bus.c @@ -265,16 +265,19 @@ void sdio_unregister_bus(void) } /** - * sdio_register_driver - register a function driver + * __sdio_register_driver - register a function driver * @drv: SDIO function driver + * @owner: owning module/driver */ -int sdio_register_driver(struct sdio_driver *drv) +int __sdio_register_driver(struct sdio_driver *drv, struct module *owner) { drv->drv.name = drv->name; drv->drv.bus = &sdio_bus_type; + drv->drv.owner = owner; + return driver_register(&drv->drv); } -EXPORT_SYMBOL_GPL(sdio_register_driver); +EXPORT_SYMBOL_GPL(__sdio_register_driver); /** * sdio_unregister_driver - unregister a function driver diff --git a/include/linux/mmc/sdio_func.h b/include/linux/mmc/sdio_func.h index 478855b8e406..fed1f5f4a8d3 100644 --- a/include/linux/mmc/sdio_func.h +++ b/include/linux/mmc/sdio_func.h @@ -106,7 +106,10 @@ struct sdio_driver { .class = (dev_class), \ .vendor = SDIO_ANY_ID, .device = SDIO_ANY_ID -extern int sdio_register_driver(struct sdio_driver *); +/* use a macro to avoid include chaining to get THIS_MODULE */ +#define sdio_register_driver(drv) \ + __sdio_register_driver(drv, THIS_MODULE) +extern int __sdio_register_driver(struct sdio_driver *, struct module *); extern void sdio_unregister_driver(struct sdio_driver *); /** -- 2.34.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2024-03-29 17:24 UTC|newest] Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-03-29 17:24 [PATCH 0/7] mmc/wifi/bluetooth: store owner from modules with sdio_register_driver() Krzysztof Kozlowski 2024-03-29 17:24 ` Krzysztof Kozlowski 2024-03-29 17:24 ` Krzysztof Kozlowski [this message] 2024-03-29 17:24 ` [PATCH 1/7] mmc: sdio: " Krzysztof Kozlowski 2024-03-29 17:57 ` mmc/wifi/bluetooth: " bluez.test.bot 2024-03-31 20:37 ` [PATCH 1/7] mmc: sdio: " Francesco Dolcini 2024-03-31 20:37 ` Francesco Dolcini 2024-04-01 9:44 ` Krzysztof Kozlowski 2024-04-01 9:44 ` Krzysztof Kozlowski 2024-03-29 17:24 ` [PATCH 2/7] bluetooth: btmrvl_sdio: drop driver owner initialization Krzysztof Kozlowski 2024-03-29 17:24 ` Krzysztof Kozlowski 2024-03-29 17:24 ` [PATCH 3/7] bluetooth: btmtksdio: " Krzysztof Kozlowski 2024-03-29 17:24 ` Krzysztof Kozlowski 2024-03-29 17:24 ` [PATCH 4/7] wifi: ath10k: sdio: " Krzysztof Kozlowski 2024-03-29 17:24 ` Krzysztof Kozlowski 2024-03-29 23:22 ` Jeff Johnson 2024-03-29 23:22 ` Jeff Johnson 2024-03-29 17:24 ` [PATCH 5/7] wifi: brcm80211: " Krzysztof Kozlowski 2024-03-29 17:24 ` Krzysztof Kozlowski 2024-03-29 23:52 ` Arend Van Spriel 2024-03-29 23:52 ` Arend Van Spriel 2024-03-29 17:24 ` [PATCH 6/7] wifi: marvell: mwifiex: " Krzysztof Kozlowski 2024-03-29 17:24 ` Krzysztof Kozlowski 2024-03-31 20:28 ` Francesco Dolcini 2024-03-31 20:28 ` Francesco Dolcini 2024-04-03 13:53 ` Kalle Valo 2024-04-03 13:53 ` Kalle Valo 2024-03-29 17:24 ` [PATCH 7/7] wifi: silabs: wfx: " Krzysztof Kozlowski 2024-03-29 17:24 ` Krzysztof Kozlowski 2024-04-03 13:54 ` Kalle Valo 2024-04-03 13:54 ` Kalle Valo 2024-04-02 10:57 ` [PATCH 0/7] mmc/wifi/bluetooth: store owner from modules with sdio_register_driver() Ulf Hansson 2024-04-02 10:57 ` Ulf Hansson
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=20240329-module-owner-sdio-v1-1-e4010b11ccaa@linaro.org \ --to=krzysztof.kozlowski@linaro.org \ --cc=angelogioacchino.delregno@collabora.com \ --cc=arend.vanspriel@broadcom.com \ --cc=ath10k@lists.infradead.org \ --cc=brcm80211-dev-list.pdl@broadcom.com \ --cc=brcm80211@lists.linux.dev \ --cc=briannorris@chromium.org \ --cc=jerome.pouiller@silabs.com \ --cc=jjohnson@kernel.org \ --cc=kvalo@kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-bluetooth@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mediatek@lists.infradead.org \ --cc=linux-mmc@vger.kernel.org \ --cc=linux-wireless@vger.kernel.org \ --cc=luiz.dentz@gmail.com \ --cc=marcel@holtmann.org \ --cc=matthias.bgg@gmail.com \ --cc=ulf.hansson@linaro.org \ /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: linkBe 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.