Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -705,6 +705,7 @@ at86rf230_tx_complete(void *context)
	struct at86rf230_state_change *ctx = context;
	struct at86rf230_local *lp = ctx->lp;

	enable_irq(lp->spi->irq);
	complete(&lp->tx_complete);
}

@@ -860,7 +861,6 @@ at86rf230_irq_trx_end(struct at86rf230_local *lp)
	if (lp->is_tx) {
		lp->is_tx = 0;
		spin_unlock(&lp->lock);
		enable_irq(lp->spi->irq);

		if (lp->tx_aret)
			return at86rf230_async_state_change(lp, &lp->irq,