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

Commit 1df726ef authored by Russell King's avatar Russell King
Browse files

NET: am79c961: fix race in link status code



The link status code operates from a timer, and writes the index
register without first taking a lock.  A well-placed interrupt
between writing the index register and reading the data register
could change the index register on us, which will return wrong data.
Add the necessary lock.

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent fb492c91
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -308,8 +308,11 @@ static void am79c961_timer(unsigned long data)
	struct net_device *dev = (struct net_device *)data;
	struct dev_priv *priv = netdev_priv(dev);
	unsigned int lnkstat, carrier;
	unsigned long flags;

	spin_lock_irqsave(&priv->chip_lock, flags);
	lnkstat = read_ireg(dev->base_addr, ISALED0) & ISALED0_LNKST;
	spin_unlock_irqrestore(&priv->chip_lock, flags);
	carrier = netif_carrier_ok(dev);

	if (lnkstat && !carrier) {