|
@@ -47,6 +47,7 @@ static struct device *smsg_dev;
|
|
|
|
|
|
static DEFINE_SPINLOCK(smsg_list_lock);
|
|
|
static LIST_HEAD(smsg_list);
|
|
|
+static int iucv_path_connected;
|
|
|
|
|
|
static int smsg_path_pending(struct iucv_path *, u8 ipvmid[8], u8 ipuser[16]);
|
|
|
static void smsg_message_pending(struct iucv_path *, struct iucv_message *);
|
|
@@ -142,8 +143,10 @@ static int smsg_pm_freeze(struct device *dev)
|
|
|
#ifdef CONFIG_PM_DEBUG
|
|
|
printk(KERN_WARNING "smsg_pm_freeze\n");
|
|
|
#endif
|
|
|
- if (smsg_path)
|
|
|
+ if (smsg_path && iucv_path_connected) {
|
|
|
iucv_path_sever(smsg_path, NULL);
|
|
|
+ iucv_path_connected = 0;
|
|
|
+ }
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -154,7 +157,7 @@ static int smsg_pm_restore_thaw(struct device *dev)
|
|
|
#ifdef CONFIG_PM_DEBUG
|
|
|
printk(KERN_WARNING "smsg_pm_restore_thaw\n");
|
|
|
#endif
|
|
|
- if (smsg_path) {
|
|
|
+ if (smsg_path && iucv_path_connected) {
|
|
|
memset(smsg_path, 0, sizeof(*smsg_path));
|
|
|
smsg_path->msglim = 255;
|
|
|
smsg_path->flags = 0;
|
|
@@ -165,6 +168,8 @@ static int smsg_pm_restore_thaw(struct device *dev)
|
|
|
printk(KERN_ERR
|
|
|
"iucv_path_connect returned with rc %i\n", rc);
|
|
|
#endif
|
|
|
+ if (!rc)
|
|
|
+ iucv_path_connected = 1;
|
|
|
cpcmd("SET SMSG IUCV", NULL, 0, NULL);
|
|
|
}
|
|
|
return 0;
|
|
@@ -214,6 +219,8 @@ static int __init smsg_init(void)
|
|
|
NULL, NULL, NULL);
|
|
|
if (rc)
|
|
|
goto out_free_path;
|
|
|
+ else
|
|
|
+ iucv_path_connected = 1;
|
|
|
smsg_dev = kzalloc(sizeof(struct device), GFP_KERNEL);
|
|
|
if (!smsg_dev) {
|
|
|
rc = -ENOMEM;
|