| From da515e85aceb004ebe723869496e16a5e3e5ecbc Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 13 Feb 2024 11:05:37 +0100 |
| Subject: wifi: brcmsmac: avoid function pointer casts |
| |
| From: Arnd Bergmann <arnd@arndb.de> |
| |
| [ Upstream commit e1ea6db35fc3ba5ff063f097385e9f7a88c25356 ] |
| |
| An old cleanup went a little too far and causes a warning with clang-16 |
| and higher as it breaks control flow integrity (KCFI) rules: |
| |
| drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c:64:34: error: cast from 'void (*)(struct brcms_phy *)' to 'void (*)(void *)' converts to incompatible function type [-Werror,-Wcast-function-type-strict] |
| 64 | brcms_init_timer(physhim->wl, (void (*)(void *))fn, |
| | ^~~~~~~~~~~~~~~~~~~~ |
| |
| Change this one instance back to passing a void pointer so it can be |
| used with the timer callback interface. |
| |
| Fixes: d89a4c80601d ("staging: brcm80211: removed void * from softmac phy") |
| Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
| Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com> |
| Signed-off-by: Kalle Valo <kvalo@kernel.org> |
| Link: https://msgid.link/20240213100548.457854-1-arnd@kernel.org |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| .../net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c | 3 ++- |
| drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c | 5 ++--- |
| drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h | 2 +- |
| 3 files changed, 5 insertions(+), 5 deletions(-) |
| |
| diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c |
| index ccc621b8ed9f2..4a1fe982a948e 100644 |
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c |
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c |
| @@ -383,8 +383,9 @@ struct shared_phy *wlc_phy_shared_attach(struct shared_phy_params *shp) |
| return sh; |
| } |
| |
| -static void wlc_phy_timercb_phycal(struct brcms_phy *pi) |
| +static void wlc_phy_timercb_phycal(void *ptr) |
| { |
| + struct brcms_phy *pi = ptr; |
| uint delay = 5; |
| |
| if (PHY_PERICAL_MPHASE_PENDING(pi)) { |
| diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c |
| index a0de5db0cd646..b723817915365 100644 |
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c |
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c |
| @@ -57,12 +57,11 @@ void wlc_phy_shim_detach(struct phy_shim_info *physhim) |
| } |
| |
| struct wlapi_timer *wlapi_init_timer(struct phy_shim_info *physhim, |
| - void (*fn)(struct brcms_phy *pi), |
| + void (*fn)(void *pi), |
| void *arg, const char *name) |
| { |
| return (struct wlapi_timer *) |
| - brcms_init_timer(physhim->wl, (void (*)(void *))fn, |
| - arg, name); |
| + brcms_init_timer(physhim->wl, fn, arg, name); |
| } |
| |
| void wlapi_free_timer(struct wlapi_timer *t) |
| diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h |
| index dd8774717adee..27d0934e600ed 100644 |
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h |
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h |
| @@ -131,7 +131,7 @@ void wlc_phy_shim_detach(struct phy_shim_info *physhim); |
| |
| /* PHY to WL utility functions */ |
| struct wlapi_timer *wlapi_init_timer(struct phy_shim_info *physhim, |
| - void (*fn)(struct brcms_phy *pi), |
| + void (*fn)(void *pi), |
| void *arg, const char *name); |
| void wlapi_free_timer(struct wlapi_timer *t); |
| void wlapi_add_timer(struct wlapi_timer *t, uint ms, int periodic); |
| -- |
| 2.43.0 |
| |