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>
This commit is contained in:
parent
45bf4b96e6
commit
ab97d211ef
@ -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)
|
|||||||
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);
|
|||||||
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
|
||||||
|
Loading…
Reference in New Issue
Block a user