Skip to contentSkip to conversation

firewire problems with suspend

PATCH Applied Pavel Machek 2 participants 2 messages Jun 6, 2004

lore
Share & tools
lore
#0 lore raw

Hi!

There are some bad problems with firewire & swsusp. This fixes some, but other remain. If ohci1394 is removed before suspend, then reinserted, then rmmod hangs.

This is certainly better better than what was there, what about applying?

Pavel

drivers/ieee1394/ieee1394_core.c +6 -0
@@ -32,6 +32,7 @@
 #include <linux/bitops.h>
 #include <linux/kdev_t.h>
 #include <linux/skbuff.h>
+#include <linux/suspend.h>
 
 #include <asm/byteorder.h>
 #include <asm/semaphore.h>
@@ -1024,6 +1025,11 @@
 		if (khpsbpkt_kill)
 			break;
 
+		if (current->flags & PF_FREEZE) {
+			refrigerator(0);
+			continue;
+		}
+
 		while ((skb = skb_dequeue(&hpsbpkt_queue)) != NULL) {
 			packet = (struct hpsb_packet *)skb->data;
 
drivers/ieee1394/nodemgr.c +13 -2
@@ -19,6 +19,7 @@
 #include <linux/delay.h>
 #include <linux/pci.h>
 #include <linux/moduleparam.h>
+#include <linux/suspend.h>
 #include <asm/atomic.h>
 
 #include "ieee1394_types.h"
@@ -1474,11 +1475,20 @@
 
 	/* Sit and wait for a signal to probe the nodes on the bus. This
 	 * happens when we get a bus reset. */
-	while (!down_interruptible(&hi->reset_sem) &&
-	       !down_interruptible(&nodemgr_serialize)) {
+	while (1) {
 		unsigned int generation = 0;
 		int i;
 
+		if (down_interruptible(&hi->reset_sem) ||
+		    down_interruptible(&nodemgr_serialize)) {
+			if (current->flags & PF_FREEZE) {
+				refrigerator(0);
+				continue;
+			}
+			printk("nodemgr: received unexpected signal?!\n" );
+			break;
+		}
+
 		if (hi->kill_me)
 			break;
 
@@ -1532,6 +1542,7 @@
 
 		up(&nodemgr_serialize);
 	}
+	printk("nodemgr: Exiting due to no down\n");
 
 caught_signal:
 	HPSB_VERBOSE("NodeMgr: Exiting thread");
Signature · 1 line
934a471f20d6580d5aad759bf0d97ddc
Applied
#1 lore raw
Quoted 8 lines · Pavel Machek

Hi!

There are some bad problems with firewire & swsusp. This fixes some, but other remain. If ohci1394 is removed before suspend, then reinserted, then rmmod hangs.

This is certainly better better than what was there, what about applying?

Applied, thanks.

Signature · 4 lines
Debian     - http://www.debian.org/
Linux 1394 - http://www.linux1394.org/
Subversion - http://subversion.tigris.org/
WatchGuard - http://www.watchguard.com/