Skip to content

Commit

Permalink
Merge branch 'net-use-netdev-lock-to-protect-napi'
Browse files Browse the repository at this point in the history
Jakub Kicinski says:

====================
net: use netdev->lock to protect NAPI

We recently added a lock member to struct net_device, with a vague
plan to start using it to protect netdev-local state, removing
the need to take rtnl_lock for new configuration APIs.

Lay some groundwork and use this lock for protecting NAPI APIs.

v1: https://lore.kernel.org/20250114035118.110297-1-kuba@kernel.org
====================

Link: https://patch.msgid.link/20250115035319.559603-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Jakub Kicinski committed Jan 16, 2025
2 parents 0b6f659 + 062e789 commit bc1e64d
Show file tree
Hide file tree
Showing 11 changed files with 420 additions and 121 deletions.
11 changes: 9 additions & 2 deletions drivers/net/ethernet/amd/pcnet32.c
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,7 @@ static void pcnet32_netif_start(struct net_device *dev)
val = lp->a->read_csr(ioaddr, CSR3);
val &= 0x00ff;
lp->a->write_csr(ioaddr, CSR3, val);
napi_enable(&lp->napi);
napi_enable_locked(&lp->napi);
}

/*
Expand Down Expand Up @@ -889,6 +889,7 @@ static int pcnet32_set_ringparam(struct net_device *dev,
if (netif_running(dev))
pcnet32_netif_stop(dev);

netdev_lock(dev);
spin_lock_irqsave(&lp->lock, flags);
lp->a->write_csr(ioaddr, CSR0, CSR0_STOP); /* stop the chip */

Expand Down Expand Up @@ -920,6 +921,7 @@ static int pcnet32_set_ringparam(struct net_device *dev,
}

spin_unlock_irqrestore(&lp->lock, flags);
netdev_unlock(dev);

netif_info(lp, drv, dev, "Ring Param Settings: RX: %d, TX: %d\n",
lp->rx_ring_size, lp->tx_ring_size);
Expand Down Expand Up @@ -985,6 +987,7 @@ static int pcnet32_loopback_test(struct net_device *dev, uint64_t * data1)
if (netif_running(dev))
pcnet32_netif_stop(dev);

netdev_lock(dev);
spin_lock_irqsave(&lp->lock, flags);
lp->a->write_csr(ioaddr, CSR0, CSR0_STOP); /* stop the chip */

Expand Down Expand Up @@ -1122,6 +1125,7 @@ static int pcnet32_loopback_test(struct net_device *dev, uint64_t * data1)
lp->a->write_bcr(ioaddr, 20, 4); /* return to 16bit mode */
}
spin_unlock_irqrestore(&lp->lock, flags);
netdev_unlock(dev);

return rc;
} /* end pcnet32_loopback_test */
Expand Down Expand Up @@ -2101,6 +2105,7 @@ static int pcnet32_open(struct net_device *dev)
return -EAGAIN;
}

netdev_lock(dev);
spin_lock_irqsave(&lp->lock, flags);
/* Check for a valid station address */
if (!is_valid_ether_addr(dev->dev_addr)) {
Expand Down Expand Up @@ -2266,7 +2271,7 @@ static int pcnet32_open(struct net_device *dev)
goto err_free_ring;
}

napi_enable(&lp->napi);
napi_enable_locked(&lp->napi);

/* Re-initialize the PCNET32, and start it when done. */
lp->a->write_csr(ioaddr, 1, (lp->init_dma_addr & 0xffff));
Expand Down Expand Up @@ -2300,6 +2305,7 @@ static int pcnet32_open(struct net_device *dev)
lp->a->read_csr(ioaddr, CSR0));

spin_unlock_irqrestore(&lp->lock, flags);
netdev_unlock(dev);

return 0; /* Always succeed */

Expand All @@ -2315,6 +2321,7 @@ static int pcnet32_open(struct net_device *dev)

err_free_irq:
spin_unlock_irqrestore(&lp->lock, flags);
netdev_unlock(dev);
free_irq(dev->irq, dev);
return rc;
}
Expand Down
Loading

0 comments on commit bc1e64d

Please sign in to comment.