Don't hold the lock across pci_set_power_state() - it can sleep


 drivers/net/8139too.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletion(-)

diff -puN drivers/net/8139too.c~8139too-locking-fix drivers/net/8139too.c
--- 25/drivers/net/8139too.c~8139too-locking-fix	2003-11-03 18:28:56.000000000 -0800
+++ 25-akpm/drivers/net/8139too.c	2003-11-03 18:28:56.000000000 -0800
@@ -2492,10 +2492,11 @@ static int rtl8139_suspend (struct pci_d
 	tp->stats.rx_missed_errors += RTL_R32 (RxMissed);
 	RTL_W32 (RxMissed, 0);
 
+	spin_unlock_irqrestore (&tp->lock, flags);
+
 	pci_set_power_state (pdev, 3);
 	pci_save_state (pdev, tp->pci_state);
 
-	spin_unlock_irqrestore (&tp->lock, flags);
 	return 0;
 }
 

_