|
@@ -194,11 +194,15 @@ static void brcmf_flowring_block(struct brcmf_flowring *flow, u8 flowid,
|
|
|
spin_lock_irqsave(&flow->block_lock, flags);
|
|
|
|
|
|
ring = flow->rings[flowid];
|
|
|
+ if (ring->blocked == blocked) {
|
|
|
+ spin_unlock_irqrestore(&flow->block_lock, flags);
|
|
|
+ return;
|
|
|
+ }
|
|
|
ifidx = brcmf_flowring_ifidx_get(flow, flowid);
|
|
|
|
|
|
currently_blocked = false;
|
|
|
for (i = 0; i < flow->nrofrings; i++) {
|
|
|
- if (flow->rings[i]) {
|
|
|
+ if ((flow->rings[i]) && (i != flowid)) {
|
|
|
ring = flow->rings[i];
|
|
|
if ((ring->status == RING_OPEN) &&
|
|
|
(brcmf_flowring_ifidx_get(flow, i) == ifidx)) {
|
|
@@ -209,8 +213,8 @@ static void brcmf_flowring_block(struct brcmf_flowring *flow, u8 flowid,
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- ring->blocked = blocked;
|
|
|
- if (currently_blocked == blocked) {
|
|
|
+ flow->rings[flowid]->blocked = blocked;
|
|
|
+ if (currently_blocked) {
|
|
|
spin_unlock_irqrestore(&flow->block_lock, flags);
|
|
|
return;
|
|
|
}
|