Commit 35e92a8e authored by Alexander Aring's avatar Alexander Aring Committed by Marcel Holtmann

at86rf230: fix race condition

When the driver waits for a tx completion currently the driver direct
enables the irq. When we switching to RX_AACK_ON some steps afterwards
the driver could receive a new frame and request resources which are
already in use, for example irq state change resource.

To be sure there are no new interrupts when we switching to RX_AACK_ON,
we enable the irq when state change to RX_AACK_ON was completed.
Signed-off-by: default avatarAlexander Aring <alex.aring@gmail.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent e9310211
...@@ -705,6 +705,7 @@ at86rf230_tx_complete(void *context) ...@@ -705,6 +705,7 @@ at86rf230_tx_complete(void *context)
struct at86rf230_state_change *ctx = context; struct at86rf230_state_change *ctx = context;
struct at86rf230_local *lp = ctx->lp; struct at86rf230_local *lp = ctx->lp;
enable_irq(lp->spi->irq);
complete(&lp->tx_complete); complete(&lp->tx_complete);
} }
...@@ -860,7 +861,6 @@ at86rf230_irq_trx_end(struct at86rf230_local *lp) ...@@ -860,7 +861,6 @@ at86rf230_irq_trx_end(struct at86rf230_local *lp)
if (lp->is_tx) { if (lp->is_tx) {
lp->is_tx = 0; lp->is_tx = 0;
spin_unlock(&lp->lock); spin_unlock(&lp->lock);
enable_irq(lp->spi->irq);
if (lp->tx_aret) if (lp->tx_aret)
return at86rf230_async_state_change(lp, &lp->irq, return at86rf230_async_state_change(lp, &lp->irq,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment