diff options
author | Sebastian Ott <sebott@linux.vnet.ibm.com> | 2015-09-09 10:29:59 +0200 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2015-10-14 14:32:04 +0200 |
commit | ab97d211ef1863942a90d7c93dfd563f0381ca87 (patch) | |
tree | 99e9a2ef567728b7fdf378e681601501ce4a4f86 /drivers/s390 | |
parent | 45bf4b96e6aea81594e510fe5cd10190ff4e6cb1 (diff) | |
download | op-kernel-dev-ab97d211ef1863942a90d7c93dfd563f0381ca87.zip op-kernel-dev-ab97d211ef1863942a90d7c93dfd563f0381ca87.tar.gz |
s390/cio: reactivate cmf after hibernate
During resume from hibernate we already reenable measurement block
updates on a per device basis. In addition to that we also need to
activate channel measurement globally using the set channel monitor
instruction.
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/cio/cmf.c | 13 | ||||
-rw-r--r-- | drivers/s390/cio/css.c | 1 | ||||
-rw-r--r-- | drivers/s390/cio/device.h | 1 |
3 files changed, 15 insertions, 0 deletions
diff --git a/drivers/s390/cio/cmf.c b/drivers/s390/cio/cmf.c index de7074f..b2afad5 100644 --- a/drivers/s390/cio/cmf.c +++ b/drivers/s390/cio/cmf.c @@ -1312,6 +1312,19 @@ int cmf_reenable(struct ccw_device *cdev) return cmbops->set(cdev, 2); } +/** + * cmf_reactivate() - reactivate measurement block updates + * + * Use this during resume from hibernate. + */ +void cmf_reactivate(void) +{ + spin_lock(&cmb_area.lock); + if (!list_empty(&cmb_area.list)) + cmf_activate(cmb_area.mem, 1); + spin_unlock(&cmb_area.lock); +} + static int __init init_cmbe(void) { cmbe_cache = kmem_cache_create("cmbe_cache", sizeof(struct cmbe), diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c index 0268e5f..25b4ee1 100644 --- a/drivers/s390/cio/css.c +++ b/drivers/s390/cio/css.c @@ -1089,6 +1089,7 @@ void channel_subsystem_reinit(void) if (chp) chp_update_desc(chp); } + cmf_reactivate(); } #ifdef CONFIG_PROC_FS diff --git a/drivers/s390/cio/device.h b/drivers/s390/cio/device.h index 8d1d298..6b17119 100644 --- a/drivers/s390/cio/device.h +++ b/drivers/s390/cio/device.h @@ -145,6 +145,7 @@ void ccw_device_set_timeout(struct ccw_device *, int); void retry_set_schib(struct ccw_device *cdev); void cmf_retry_copy_block(struct ccw_device *); int cmf_reenable(struct ccw_device *); +void cmf_reactivate(void); int ccw_set_cmf(struct ccw_device *cdev, int enable); extern struct device_attribute dev_attr_cmb_enable; #endif |