Do not lock the register structure in IRQ context. It is not
necessary and leads to lockups under SMP load.
Signed-off-by: Birger Koblitz <git@birger-koblitz.de>
/*
* Discard the RX ring-buffers, called as part of the net-ISR
* when the buffer runs over
/*
* Discard the RX ring-buffers, called as part of the net-ISR
* when the buffer runs over
- * Caller needs to hold priv->lock
*/
static void rtl838x_rb_cleanup(struct rtl838x_eth_priv *priv, int status)
{
*/
static void rtl838x_rb_cleanup(struct rtl838x_eth_priv *priv, int status)
{
pr_debug("IRQ: %08x\n", status);
pr_debug("IRQ: %08x\n", status);
- spin_lock(&priv->lock);
/* Ignore TX interrupt */
if ((status & 0xf0000)) {
/* Clear ISR */
/* Ignore TX interrupt */
if ((status & 0xf0000)) {
/* Clear ISR */
rtl839x_l2_notification_handler(priv);
}
rtl839x_l2_notification_handler(priv);
}
- spin_unlock(&priv->lock);
pr_debug("In %s, status_tx: %08x, status_rx: %08x, status_rx_r: %08x\n",
__func__, status_tx, status_rx, status_rx_r);
pr_debug("In %s, status_tx: %08x, status_rx: %08x, status_rx_r: %08x\n",
__func__, status_tx, status_rx, status_rx_r);
- spin_lock(&priv->lock);
/* Ignore TX interrupt */
if (status_tx) {
/* Ignore TX interrupt */
if (status_tx) {
rtl838x_rb_cleanup(priv, status_rx_r);
}
rtl838x_rb_cleanup(priv, status_rx_r);
}
- spin_unlock(&priv->lock);