sppp_cp_timeout() ends up calling local_bh_enable(), which enables
interrupts.  So it doesn't make sense to run sppp_lcp_open() under
spin_unlock_irqrestore(&spppq_lock).

This driver calls sppp_lcp_open() from other paces without that lock held, so
fingers crossed, and drop the lock in sppp_cp_timeout().



 25-akpm/drivers/net/wan/syncppp.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff -puN drivers/net/wan/syncppp.c~syncppp-locking-fix drivers/net/wan/syncppp.c
--- 25/drivers/net/wan/syncppp.c~syncppp-locking-fix	Fri May 23 14:28:50 2003
+++ 25-akpm/drivers/net/wan/syncppp.c	Fri May 23 14:29:24 2003
@@ -1297,6 +1297,7 @@ static void sppp_cp_timeout (unsigned lo
 		spin_unlock_irqrestore(&spppq_lock, flags);
 		return;
 	}
+	spin_unlock_irqrestore(&spppq_lock, flags);
 	switch (sp->lcp.state) {
 	case LCP_STATE_CLOSED:
 		/* No ACK for Configure-Request, retry. */
@@ -1333,7 +1334,6 @@ static void sppp_cp_timeout (unsigned lo
 		}
 		break;
 	}
-	spin_unlock_irqrestore(&spppq_lock, flags);
 }
 
 static char *sppp_lcp_type_name (u8 type)

_