Re: [PATCH v2] brcmfmac: Remove #ifdef guards for PM related functions

From: Arend Van Spriel
Date: Fri Jun 24 2022 - 05:24:11 EST


On 6/23/2022 2:42 PM, Paul Cercueil wrote:
Use the new DEFINE_SIMPLE_DEV_PM_OPS() and pm_sleep_ptr() macros to
handle the .suspend/.resume callbacks.

These macros allow the suspend and resume functions to be automatically
dropped by the compiler when CONFIG_SUSPEND is disabled, without having
to use #ifdef guards.

Some other functions not directly called by the .suspend/.resume
callbacks, but still related to PM were also taken outside #ifdef
guards.

The advantage is then that these functions are now always compiled
independently of any Kconfig option, and thanks to that bugs and
regressions are easier to catch.

Reviewed-by: Arend van Spriel <aspriel@xxxxxxxxx>
Signed-off-by: Paul Cercueil <paul@xxxxxxxxxxxxxxx>
---

Notes:
v2:
- Move checks for IS_ENABLED(CONFIG_PM_SLEEP) inside functions to keep
the calling functions intact.
- Reword the commit message to explain why this patch is useful.

.../broadcom/brcm80211/brcmfmac/bcmsdh.c | 38 +++++++------------
.../broadcom/brcm80211/brcmfmac/sdio.c | 5 +--
.../broadcom/brcm80211/brcmfmac/sdio.h | 16 --------
3 files changed, 16 insertions(+), 43 deletions(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
index 9c598ea97499..11ad878a906b 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
@@ -784,9 +784,11 @@ void brcmf_sdiod_sgtable_alloc(struct brcmf_sdio_dev *sdiodev)
sdiodev->txglomsz = sdiodev->settings->bus.sdio.txglomsz;
}
-#ifdef CONFIG_PM_SLEEP
static int brcmf_sdiod_freezer_attach(struct brcmf_sdio_dev *sdiodev)
{
+ if (!IS_ENABLED(CONFIG_PM_SLEEP))
+ return 0;
+
sdiodev->freezer = kzalloc(sizeof(*sdiodev->freezer), GFP_KERNEL);
if (!sdiodev->freezer)
return -ENOMEM;
@@ -799,7 +801,7 @@ static int brcmf_sdiod_freezer_attach(struct brcmf_sdio_dev *sdiodev)
static void brcmf_sdiod_freezer_detach(struct brcmf_sdio_dev *sdiodev)
{
- if (sdiodev->freezer) {
+ if (IS_ENABLED(CONFIG_PM_SLEEP) && sdiodev->freezer) {

This change is not necessary. sdiodev->freezer will be NULL when CONFIG_PM_SLEEP is not enabled.

WARN_ON(atomic_read(&sdiodev->freezer->freezing));
kfree(sdiodev->freezer);
}