commit 84067de664ee6adba8c373e4298d755abd783b24 upstream, titled 'fix cast to pointer from integer' from Clemens Noss.
A kernel panic occurs under STA disconnect or roaming conditions. >From Documentation/stable_kernel_rules.txt, I conclude that this qualifies as a fix that should get merged into the (2.6.39) stable tree. - The bug is actually bothering users. See: https://bugzilla.kernel.org/show_bug.cgi?id=38962 - The bug results in something severe (a kernel panic) Signed-off by: Roland Vossen <rvos...@broadcom.com> Reviewed-by: Arend van Spriel <ar...@broadcom.com> Reported-by: Clemens Noss <cn...@gmx.de> Reported-by: Tjbp <kernel....@tjbp.net> Signed-off-by: Roland Vossen <rvos...@broadcom.com> --- drivers/staging/brcm80211/brcmsmac/wlc_ampdu.c | 4 ++-- drivers/staging/brcm80211/brcmsmac/wlc_main.c | 2 +- drivers/staging/brcm80211/include/bcmutils.h | 6 +++--- drivers/staging/brcm80211/util/bcmutils.c | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/staging/brcm80211/brcmsmac/wlc_ampdu.c b/drivers/staging/brcm80211/brcmsmac/wlc_ampdu.c index f7bff4e..ca16c64 100644 --- a/drivers/staging/brcm80211/brcmsmac/wlc_ampdu.c +++ b/drivers/staging/brcm80211/brcmsmac/wlc_ampdu.c @@ -1364,7 +1364,7 @@ struct cb_del_ampdu_pars { /* * callback function that helps flushing ampdu packets from a priority queue */ -static bool cb_del_ampdu_pkt(void *p, int arg_a) +static bool cb_del_ampdu_pkt(void *p, void *arg_a) { struct sk_buff *mpdu = (struct sk_buff *)p; struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(mpdu); @@ -1408,7 +1408,7 @@ void wlc_ampdu_flush(struct wlc_info *wlc, ampdu_pars.tid = tid; for (prec = 0; prec < pq->num_prec; prec++) { pktq_pflush(pq, prec, true, cb_del_ampdu_pkt, - (int)&du_pars); + (void *)&du_pars); } wlc_inval_dma_pkts(wlc->hw, sta, dma_cb_fn_ampdu); } diff --git a/drivers/staging/brcm80211/brcmsmac/wlc_main.c b/drivers/staging/brcm80211/brcmsmac/wlc_main.c index ab7ab85..3c04850b 100644 --- a/drivers/staging/brcm80211/brcmsmac/wlc_main.c +++ b/drivers/staging/brcm80211/brcmsmac/wlc_main.c @@ -2719,7 +2719,7 @@ uint wlc_down(struct wlc_info *wlc) /* flush tx queues */ for (qi = wlc->tx_queues; qi != NULL; qi = qi->next) { - pktq_flush(&qi->q, true, NULL, 0); + pktq_flush(&qi->q, true, NULL, NULL); ASSERT(pktq_empty(&qi->q)); } diff --git a/drivers/staging/brcm80211/include/bcmutils.h b/drivers/staging/brcm80211/include/bcmutils.h index fc2a2a9..42061fe 100644 --- a/drivers/staging/brcm80211/include/bcmutils.h +++ b/drivers/staging/brcm80211/include/bcmutils.h @@ -74,7 +74,7 @@ #define PKTQ_PREC_ITER(pq, prec) for (prec = (pq)->num_prec - 1; prec >= 0; prec--) /* fn(pkt, arg). return true if pkt belongs to if */ - typedef bool(*ifpkt_cb_t) (void *, int); + typedef bool(*ifpkt_cb_t) (void *, void *); /* operations on a specific precedence in packet queue */ @@ -104,7 +104,7 @@ extern void pkt_buf_free_skb(struct sk_buff *skb); bool dir); #else extern void pktq_pflush(struct pktq *pq, int prec, - bool dir, ifpkt_cb_t fn, int arg); + bool dir, ifpkt_cb_t fn, void *arg); #endif /* BRCM_FULLMAC */ /* operations on a set of precedences in packet queue */ @@ -134,7 +134,7 @@ extern struct sk_buff *pktq_mdeq(struct pktq *pq, uint prec_bmp, int *prec_out); extern void pktq_flush(struct pktq *pq, bool dir); #else extern void pktq_flush(struct pktq *pq, bool dir, - ifpkt_cb_t fn, int arg); + ifpkt_cb_t fn, void *arg); #endif /* externs */ diff --git a/drivers/staging/brcm80211/util/bcmutils.c b/drivers/staging/brcm80211/util/bcmutils.c index fb0bccc..0282eb8 100644 --- a/drivers/staging/brcm80211/util/bcmutils.c +++ b/drivers/staging/brcm80211/util/bcmutils.c @@ -259,7 +259,7 @@ void pktq_flush(struct pktq *pq, bool dir) #else /* !BRCM_FULLMAC */ void pktq_pflush(struct pktq *pq, int prec, bool dir, - ifpkt_cb_t fn, int arg) + ifpkt_cb_t fn, void *arg) { struct pktq_prec *q; struct sk_buff *p, *prev = NULL; @@ -291,7 +291,7 @@ pktq_pflush(struct pktq *pq, int prec, bool dir, } void pktq_flush(struct pktq *pq, bool dir, - ifpkt_cb_t fn, int arg) + ifpkt_cb_t fn, void *arg) { int prec; for (prec = 0; prec < pq->num_prec; prec++) -- 1.7.4.1 _______________________________________________ stable mailing list stable@linux.kernel.org http://linux.kernel.org/mailman/listinfo/stable