mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 05:34:13 +08:00
brcmfmac: destination mac closed when interface is closed
Firmware signals a destination is closed as well as an interface. A destination is associated with an interface. When an interface is closed consequently the destination should be considered closed as well. Reviewed-by: Hante Meuleman <meuleman@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Signed-off-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
130e380b44
commit
b75c1a301b
@ -714,11 +714,21 @@ done:
|
||||
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)) {
|
||||
|
Loading…
Reference in New Issue
Block a user