2023-07-03 16:37:27

by Dmitry Antipov

[permalink] [raw]
Subject: [PATCH] [v2] wifi: brcmsmac: use generic lists to manage timers

Prefer generic lists over ad-hoc quirks to manage
timers, adjust related code.

Signed-off-by: Dmitry Antipov <[email protected]>
---
v2: add missing list_del() in removal loop within brcms_free()
---
.../broadcom/brcm80211/brcmsmac/mac80211_if.c | 36 +++++--------------
.../broadcom/brcm80211/brcmsmac/mac80211_if.h | 4 +--
2 files changed, 10 insertions(+), 30 deletions(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
index 0bd4e679a359..18a06290af1c 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
@@ -314,8 +314,8 @@ static void brcms_free(struct brcms_info *wl)
schedule();

/* free timers */
- for (t = wl->timers; t; t = next) {
- next = t->next;
+ list_for_each_entry_safe(t, next, &wl->timers, list) {
+ list_del(&t->list);
#ifdef DEBUG
kfree(t->name);
#endif
@@ -1152,6 +1152,8 @@ static struct brcms_info *brcms_attach(struct bcma_device *pdev)
spin_lock_init(&wl->lock);
spin_lock_init(&wl->isr_lock);

+ INIT_LIST_HEAD(&wl->timers);
+
/* common load-time initialization */
wl->wlc = brcms_c_attach((void *)wl, pdev, unit, false, &err);
if (!wl->wlc) {
@@ -1502,8 +1504,7 @@ struct brcms_timer *brcms_init_timer(struct brcms_info *wl,
t->wl = wl;
t->fn = fn;
t->arg = arg;
- t->next = wl->timers;
- wl->timers = t;
+ list_add(&t->list, &wl->timers);

#ifdef DEBUG
t->name = kstrdup(name, GFP_ATOMIC);
@@ -1561,35 +1562,14 @@ bool brcms_del_timer(struct brcms_timer *t)
*/
void brcms_free_timer(struct brcms_timer *t)
{
- struct brcms_info *wl = t->wl;
- struct brcms_timer *tmp;
-
/* delete the timer in case it is active */
brcms_del_timer(t);

- if (wl->timers == t) {
- wl->timers = wl->timers->next;
+ list_del(&t->list);
#ifdef DEBUG
- kfree(t->name);
+ kfree(t->name);
#endif
- kfree(t);
- return;
-
- }
-
- tmp = wl->timers;
- while (tmp) {
- if (tmp->next == t) {
- tmp->next = t->next;
-#ifdef DEBUG
- kfree(t->name);
-#endif
- kfree(t);
- return;
- }
- tmp = tmp->next;
- }
-
+ kfree(t);
}

/*
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.h b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.h
index eaf926a96a88..c2c3d90f4ed3 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.h
@@ -41,7 +41,7 @@ struct brcms_timer {
uint ms;
bool periodic;
bool set; /* indicates if timer is active */
- struct brcms_timer *next; /* for freeing on unload */
+ struct list_head list; /* for freeing on unload */
#ifdef DEBUG
char *name; /* Description of the timer */
#endif
@@ -75,7 +75,7 @@ struct brcms_info {

/* timer related fields */
atomic_t callbacks; /* # outstanding callback functions */
- struct brcms_timer *timers; /* timer cleanup queue */
+ struct list_head timers; /* timer cleanup queue */

struct tasklet_struct tasklet; /* dpc tasklet */
bool resched; /* dpc needs to be and is rescheduled */
--
2.41.0



2024-01-18 11:24:00

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] [v2] wifi: brcmsmac: use generic lists to manage timers

Dmitry Antipov <[email protected]> wrote:

> Prefer generic lists over ad-hoc quirks to manage
> timers, adjust related code.
>
> Signed-off-by: Dmitry Antipov <[email protected]>

This should be tested on a real device.

Patch set to Changes Requested.

--
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


2024-01-18 12:42:26

by Arend van Spriel

[permalink] [raw]
Subject: Re: [PATCH] [v2] wifi: brcmsmac: use generic lists to manage timers

On 7/3/2023 6:21 PM, Dmitry Antipov wrote:
> Prefer generic lists over ad-hoc quirks to manage
> timers, adjust related code.

The change looks good to me.

Reviewed-by: Arend van Spriel <[email protected]>
> Signed-off-by: Dmitry Antipov <[email protected]>
> ---
> v2: add missing list_del() in removal loop within brcms_free()
> ---
> .../broadcom/brcm80211/brcmsmac/mac80211_if.c | 36 +++++--------------
> .../broadcom/brcm80211/brcmsmac/mac80211_if.h | 4 +--
> 2 files changed, 10 insertions(+), 30 deletions(-)


Attachments:
smime.p7s (4.12 kB)
S/MIME Cryptographic Signature