]>
Commit | Line | Data |
---|---|---|
1eef519e SL |
1 | From da515e85aceb004ebe723869496e16a5e3e5ecbc Mon Sep 17 00:00:00 2001 |
2 | From: Sasha Levin <sashal@kernel.org> | |
3 | Date: Tue, 13 Feb 2024 11:05:37 +0100 | |
4 | Subject: wifi: brcmsmac: avoid function pointer casts | |
5 | ||
6 | From: Arnd Bergmann <arnd@arndb.de> | |
7 | ||
8 | [ Upstream commit e1ea6db35fc3ba5ff063f097385e9f7a88c25356 ] | |
9 | ||
10 | An old cleanup went a little too far and causes a warning with clang-16 | |
11 | and higher as it breaks control flow integrity (KCFI) rules: | |
12 | ||
13 | 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] | |
14 | 64 | brcms_init_timer(physhim->wl, (void (*)(void *))fn, | |
15 | | ^~~~~~~~~~~~~~~~~~~~ | |
16 | ||
17 | Change this one instance back to passing a void pointer so it can be | |
18 | used with the timer callback interface. | |
19 | ||
20 | Fixes: d89a4c80601d ("staging: brcm80211: removed void * from softmac phy") | |
21 | Signed-off-by: Arnd Bergmann <arnd@arndb.de> | |
22 | Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com> | |
23 | Signed-off-by: Kalle Valo <kvalo@kernel.org> | |
24 | Link: https://msgid.link/20240213100548.457854-1-arnd@kernel.org | |
25 | Signed-off-by: Sasha Levin <sashal@kernel.org> | |
26 | --- | |
27 | .../net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c | 3 ++- | |
28 | drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c | 5 ++--- | |
29 | drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h | 2 +- | |
30 | 3 files changed, 5 insertions(+), 5 deletions(-) | |
31 | ||
32 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c | |
33 | index ccc621b8ed9f2..4a1fe982a948e 100644 | |
34 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c | |
35 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_cmn.c | |
36 | @@ -383,8 +383,9 @@ struct shared_phy *wlc_phy_shared_attach(struct shared_phy_params *shp) | |
37 | return sh; | |
38 | } | |
39 | ||
40 | -static void wlc_phy_timercb_phycal(struct brcms_phy *pi) | |
41 | +static void wlc_phy_timercb_phycal(void *ptr) | |
42 | { | |
43 | + struct brcms_phy *pi = ptr; | |
44 | uint delay = 5; | |
45 | ||
46 | if (PHY_PERICAL_MPHASE_PENDING(pi)) { | |
47 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c | |
48 | index a0de5db0cd646..b723817915365 100644 | |
49 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c | |
50 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.c | |
51 | @@ -57,12 +57,11 @@ void wlc_phy_shim_detach(struct phy_shim_info *physhim) | |
52 | } | |
53 | ||
54 | struct wlapi_timer *wlapi_init_timer(struct phy_shim_info *physhim, | |
55 | - void (*fn)(struct brcms_phy *pi), | |
56 | + void (*fn)(void *pi), | |
57 | void *arg, const char *name) | |
58 | { | |
59 | return (struct wlapi_timer *) | |
60 | - brcms_init_timer(physhim->wl, (void (*)(void *))fn, | |
61 | - arg, name); | |
62 | + brcms_init_timer(physhim->wl, fn, arg, name); | |
63 | } | |
64 | ||
65 | void wlapi_free_timer(struct wlapi_timer *t) | |
66 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h | |
67 | index dd8774717adee..27d0934e600ed 100644 | |
68 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h | |
69 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy_shim.h | |
70 | @@ -131,7 +131,7 @@ void wlc_phy_shim_detach(struct phy_shim_info *physhim); | |
71 | ||
72 | /* PHY to WL utility functions */ | |
73 | struct wlapi_timer *wlapi_init_timer(struct phy_shim_info *physhim, | |
74 | - void (*fn)(struct brcms_phy *pi), | |
75 | + void (*fn)(void *pi), | |
76 | void *arg, const char *name); | |
77 | void wlapi_free_timer(struct wlapi_timer *t); | |
78 | void wlapi_add_timer(struct wlapi_timer *t, uint ms, int periodic); | |
79 | -- | |
80 | 2.43.0 | |
81 |