Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a55360df406cca797ac07d722688dd7ec29bf46e
Commit:     a55360df406cca797ac07d722688dd7ec29bf46e
Parent:     a0ea22c3d912de6044f83b07dcc26ee006106139
Author:     Cornelia Huck <[EMAIL PROTECTED]>
AuthorDate: Fri Oct 12 16:11:20 2007 +0200
Committer:  Martin Schwidefsky <[EMAIL PROTECTED]>
CommitDate: Fri Oct 12 16:13:00 2007 +0200

    [S390] cio: Disable channel path measurements on shutdown/reboot.
    
    Make sure channel path measurements are disabled via a reboot notifier
    since we cannot rely on userspace to disable it again after enabling
    it. This is 1. clean and 2. makes sure that channel path measurements
    do not stay enabled after a reboot not involving a subsystem reset
    (which would lead to the channel subsystem scribbling onto random
    memory).
    
    Signed-off-by: Cornelia Huck <[EMAIL PROTECTED]>
    Signed-off-by: Martin Schwidefsky <[EMAIL PROTECTED]>
---
 drivers/s390/cio/css.c |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
index 08f6e7b..5d83dd4 100644
--- a/drivers/s390/cio/css.c
+++ b/drivers/s390/cio/css.c
@@ -13,6 +13,7 @@
 #include <linux/slab.h>
 #include <linux/errno.h>
 #include <linux/list.h>
+#include <linux/reboot.h>
 
 #include "css.h"
 #include "cio.h"
@@ -632,6 +633,29 @@ static int __init setup_css(int nr)
        return 0;
 }
 
+static int css_reboot_event(struct notifier_block *this,
+                           unsigned long event,
+                           void *ptr)
+{
+       int ret, i;
+
+       ret = NOTIFY_DONE;
+       for (i = 0; i <= __MAX_CSSID; i++) {
+               struct channel_subsystem *css;
+
+               css = channel_subsystems[i];
+               if (css->cm_enabled)
+                       if (chsc_secm(css, 0))
+                               ret = NOTIFY_BAD;
+       }
+
+       return ret;
+}
+
+static struct notifier_block css_reboot_notifier = {
+       .notifier_call = css_reboot_event,
+};
+
 /*
  * Now that the driver core is running, we can setup our channel subsystem.
  * The struct subchannel's are created during probing (except for the
@@ -697,12 +721,17 @@ init_channel_subsystem (void)
                if (ret)
                        goto out_file;
        }
+       ret = register_reboot_notifier(&css_reboot_notifier);
+       if (ret)
+               goto out_pseudo;
        css_init_done = 1;
 
        ctl_set_bit(6, 28);
 
        for_each_subchannel(__init_channel_subsystem, NULL);
        return 0;
+out_pseudo:
+       device_unregister(&channel_subsystems[i]->pseudo_subchannel->dev);
 out_file:
        device_remove_file(&channel_subsystems[i]->device,
                           &dev_attr_cm_enable);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to