mrf24j40: Move INIT_COMPLETION() to before packet transmission
This avoids a race condition where complete(tx_complete) could be called before tx_complete is initialized. Signed-off-by: Alan Ott <alan@signal11.us> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
8cc27d174b
commit
9757f1d2e0
@@ -344,6 +344,8 @@ static int mrf24j40_tx(struct ieee802154_dev *dev, struct sk_buff *skb)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
INIT_COMPLETION(devrec->tx_complete);
|
||||||
|
|
||||||
/* Set TXNTRIG bit of TXNCON to send packet */
|
/* Set TXNTRIG bit of TXNCON to send packet */
|
||||||
ret = read_short_reg(devrec, REG_TXNCON, &val);
|
ret = read_short_reg(devrec, REG_TXNCON, &val);
|
||||||
if (ret)
|
if (ret)
|
||||||
@@ -354,8 +356,6 @@ static int mrf24j40_tx(struct ieee802154_dev *dev, struct sk_buff *skb)
|
|||||||
val |= 0x4;
|
val |= 0x4;
|
||||||
write_short_reg(devrec, REG_TXNCON, val);
|
write_short_reg(devrec, REG_TXNCON, val);
|
||||||
|
|
||||||
INIT_COMPLETION(devrec->tx_complete);
|
|
||||||
|
|
||||||
/* Wait for the device to send the TX complete interrupt. */
|
/* Wait for the device to send the TX complete interrupt. */
|
||||||
ret = wait_for_completion_interruptible_timeout(
|
ret = wait_for_completion_interruptible_timeout(
|
||||||
&devrec->tx_complete,
|
&devrec->tx_complete,
|
||||||
|
Reference in New Issue
Block a user