wifi: brcmsmac: avoid function pointer casts
authorArnd Bergmann <arnd@arndb.de>
Tue, 13 Feb 2024 10:05:37 +0000 (11:05 +0100)
committerKalle Valo <kvalo@kernel.org>
Fri, 16 Feb 2024 15:48:59 +0000 (17:48 +0200)
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
drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c
drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c
drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h

index 07f83ff5a54ab0d1a8db6c67bbb1abd80653d62b..a27d6f0b881911509e617db0c700d955e48e1cdc 100644 (file)
@@ -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)) {
index a0de5db0cd64675fb02e2f435cc814715976261d..b7238179153653f35e6480314ba12980fcb88f69 100644 (file)
@@ -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)
index dd8774717adee148134cb85229f422c72fa143e2..27d0934e600ed37ff93e9e9eec7a6e9b087e58c4 100644 (file)
@@ -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);