Skip to content

Commit

Permalink
[S390] cio: Disable channel path measurements on shutdown/reboot.
Browse files Browse the repository at this point in the history
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 <cornelia.huck@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
  • Loading branch information
Cornelia Huck authored and Martin Schwidefsky committed Oct 12, 2007
1 parent a0ea22c commit a55360d
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions drivers/s390/cio/css.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit a55360d

Please sign in to comment.