From b075992a554b8172a59072dbe4a08aa75156ae48 Mon Sep 17 00:00:00 2001 From: Arend van Spriel Date: Wed, 17 Apr 2013 21:25:53 +0200 Subject: [PATCH] --- yaml --- r: 369629 b: refs/heads/master c: b75c1a301b7d4e55f2354d8a7210a17d8402a218 h: refs/heads/master i: 369627: fcdc6581fa755e438628d3168dadf2fbe62e7abe v: v3 --- [refs] | 2 +- .../net/wireless/brcm80211/brcmfmac/fwsignal.c | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index a96a092655d5..9fe326431d41 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 130e380b4470d5c704b492a2beb631d84c93bf09 +refs/heads/master: b75c1a301b7d4e55f2354d8a7210a17d8402a218 diff --git a/trunk/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c b/trunk/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c index 9dae8fcea2c5..0d2ff60e925d 100644 --- a/trunk/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c +++ b/trunk/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c @@ -714,11 +714,21 @@ brcmf_fws_find_mac_desc(struct brcmf_fws_info *fws, struct brcmf_if *ifp, return entry; } -static bool brcmf_fws_mac_desc_closed(struct brcmf_fws_mac_descriptor *entry, +static bool brcmf_fws_mac_desc_closed(struct brcmf_fws_info *fws, + struct brcmf_fws_mac_descriptor *entry, int fifo) { + struct brcmf_fws_mac_descriptor *if_entry; bool closed; + /* for unique destination entries the related interface + * may be closed. + */ + if (entry->mac_handle) { + if_entry = &fws->desc.iface[entry->interface_id]; + if (if_entry->state == BRCMF_FWS_STATE_CLOSE) + return true; + } /* an entry is closed when the state is closed and * the firmware did not request anything. */ @@ -1079,7 +1089,8 @@ static struct sk_buff *brcmf_fws_deq(struct brcmf_fws_info *fws, int fifo) for (i = 0; i < num_nodes; i++) { entry = &table[(node_pos + i) % num_nodes]; - if (!entry->occupied || brcmf_fws_mac_desc_closed(entry, fifo)) + if (!entry->occupied || + brcmf_fws_mac_desc_closed(fws, entry, fifo)) continue; if (entry->suppressed) @@ -1753,7 +1764,7 @@ int brcmf_fws_process_skb(struct brcmf_if *ifp, struct sk_buff *skb) brcmf_fws_lock(drvr, flags); if (skcb->mac->suppressed || - brcmf_fws_mac_desc_closed(skcb->mac, fifo) || + brcmf_fws_mac_desc_closed(drvr->fws, skcb->mac, fifo) || brcmu_pktq_mlen(&skcb->mac->psq, 3 << (fifo * 2)) || (!multicast && brcmf_fws_consume_credit(drvr->fws, fifo, skb) < 0)) {