Commit ab97d211 authored by Sebastian Ott's avatar Sebastian Ott Committed by Martin Schwidefsky

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: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
Reviewed-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 45bf4b96
...@@ -1312,6 +1312,19 @@ int cmf_reenable(struct ccw_device *cdev) ...@@ -1312,6 +1312,19 @@ int cmf_reenable(struct ccw_device *cdev)
return cmbops->set(cdev, 2); 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) static int __init init_cmbe(void)
{ {
cmbe_cache = kmem_cache_create("cmbe_cache", sizeof(struct cmbe), cmbe_cache = kmem_cache_create("cmbe_cache", sizeof(struct cmbe),
......
...@@ -1089,6 +1089,7 @@ void channel_subsystem_reinit(void) ...@@ -1089,6 +1089,7 @@ void channel_subsystem_reinit(void)
if (chp) if (chp)
chp_update_desc(chp); chp_update_desc(chp);
} }
cmf_reactivate();
} }
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
......
...@@ -145,6 +145,7 @@ void ccw_device_set_timeout(struct ccw_device *, int); ...@@ -145,6 +145,7 @@ void ccw_device_set_timeout(struct ccw_device *, int);
void retry_set_schib(struct ccw_device *cdev); void retry_set_schib(struct ccw_device *cdev);
void cmf_retry_copy_block(struct ccw_device *); void cmf_retry_copy_block(struct ccw_device *);
int cmf_reenable(struct ccw_device *); int cmf_reenable(struct ccw_device *);
void cmf_reactivate(void);
int ccw_set_cmf(struct ccw_device *cdev, int enable); int ccw_set_cmf(struct ccw_device *cdev, int enable);
extern struct device_attribute dev_attr_cmb_enable; extern struct device_attribute dev_attr_cmb_enable;
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment