]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.39/patches.arch/s390-15-11-cio-vary-unregister.patch
Imported linux-2.6.27.39 suse/xen patches.
[ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.arch / s390-15-11-cio-vary-unregister.patch
diff --git a/src/patches/suse-2.6.27.39/patches.arch/s390-15-11-cio-vary-unregister.patch b/src/patches/suse-2.6.27.39/patches.arch/s390-15-11-cio-vary-unregister.patch
new file mode 100644 (file)
index 0000000..3cf07f3
--- /dev/null
@@ -0,0 +1,48 @@
+From: Gerald Schaefer <geraldsc@de.ibm.com>
+Subject: cio: ccw devices are not removed when last path is varied offline
+References: bnc#518291,LTC#54951
+
+Symptom:     When the last CHPID to an offline CCW device is varied offline,
+             that device remains registered even though it is no longer
+             accessible.
+Problem:     The vary command triggers an internal path verification event
+             which is not handled for devices in the offline state.
+Solution:    Install a handler for the path verification event in offline state
+             which will remove the device if it is no longer accessible.
+
+Acked-by: John Jolly <jjolly@suse.de>
+---
+ drivers/s390/cio/device_fsm.c |   13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+Index: linux-sles11/drivers/s390/cio/device_fsm.c
+===================================================================
+--- linux-sles11.orig/drivers/s390/cio/device_fsm.c
++++ linux-sles11/drivers/s390/cio/device_fsm.c
+@@ -739,6 +739,17 @@ static void ccw_device_generic_notoper(s
+ }
+ /*
++ * Handle path verification event in offline state.
++ */
++static void ccw_device_offline_verify(struct ccw_device *cdev,
++                                    enum dev_event dev_event)
++{
++      struct subchannel *sch = to_subchannel(cdev->dev.parent);
++
++      css_schedule_eval(sch->schid);
++}
++
++/*
+  * Handle path verification event.
+  */
+ static void
+@@ -1155,7 +1166,7 @@ fsm_func_t *dev_jumptable[NR_DEV_STATES]
+               [DEV_EVENT_NOTOPER]     = ccw_device_generic_notoper,
+               [DEV_EVENT_INTERRUPT]   = ccw_device_offline_irq,
+               [DEV_EVENT_TIMEOUT]     = ccw_device_nop,
+-              [DEV_EVENT_VERIFY]      = ccw_device_nop,
++              [DEV_EVENT_VERIFY]      = ccw_device_offline_verify,
+       },
+       [DEV_STATE_VERIFY] = {
+               [DEV_EVENT_NOTOPER]     = ccw_device_generic_notoper,