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

Commit 227bc24d authored by Francois Romieu's avatar Francois Romieu
Browse files

ipg: balance locking in irq handler



Spotted-by: default avatar <linux@horizon.com>
Signed-off-by: default avatarFrancois Romieu <romieu@fr.zoreil.com>
parent d8c89eb3
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -1630,6 +1630,8 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst)
#ifdef JUMBO_FRAME
	ipg_nic_rxrestore(dev);
#endif
	spin_lock(&sp->lock);

	/* Get interrupt source information, and acknowledge
	 * some (i.e. TxDMAComplete, RxDMAComplete, RxEarly,
	 * IntRequested, MacControlFrame, LinkEvent) interrupts
@@ -1647,9 +1649,7 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst)
	handled = 1;

	if (unlikely(!netif_running(dev)))
		goto out;

	spin_lock(&sp->lock);
		goto out_unlock;

	/* If RFDListEnd interrupt, restore all used RFDs. */
	if (status & IPG_IS_RFD_LIST_END) {
@@ -1733,9 +1733,9 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst)
	ipg_w16(IPG_IE_TX_DMA_COMPLETE | IPG_IE_RX_DMA_COMPLETE |
		IPG_IE_HOST_ERROR | IPG_IE_INT_REQUESTED | IPG_IE_TX_COMPLETE |
		IPG_IE_LINK_EVENT | IPG_IE_UPDATE_STATS, INT_ENABLE);

out_unlock:
	spin_unlock(&sp->lock);
out:

	return IRQ_RETVAL(handled);
}