mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 09:44:18 +08:00
[S390] pm: vmur driver power management callbacks
Signed-off-by: Frank Munzert <munzert@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
524dbcdad7
commit
b241f7bcc6
@ -2,7 +2,7 @@
|
||||
* Linux driver for System z and s390 unit record devices
|
||||
* (z/VM virtual punch, reader, printer)
|
||||
*
|
||||
* Copyright IBM Corp. 2001, 2007
|
||||
* Copyright IBM Corp. 2001, 2009
|
||||
* Authors: Malcolm Beattie <beattiem@uk.ibm.com>
|
||||
* Michael Holzheu <holzheu@de.ibm.com>
|
||||
* Frank Munzert <munzert@de.ibm.com>
|
||||
@ -60,6 +60,7 @@ static int ur_probe(struct ccw_device *cdev);
|
||||
static void ur_remove(struct ccw_device *cdev);
|
||||
static int ur_set_online(struct ccw_device *cdev);
|
||||
static int ur_set_offline(struct ccw_device *cdev);
|
||||
static int ur_pm_suspend(struct ccw_device *cdev);
|
||||
|
||||
static struct ccw_driver ur_driver = {
|
||||
.name = "vmur",
|
||||
@ -69,6 +70,7 @@ static struct ccw_driver ur_driver = {
|
||||
.remove = ur_remove,
|
||||
.set_online = ur_set_online,
|
||||
.set_offline = ur_set_offline,
|
||||
.freeze = ur_pm_suspend,
|
||||
};
|
||||
|
||||
static DEFINE_MUTEX(vmur_mutex);
|
||||
@ -157,6 +159,28 @@ static void urdev_put(struct urdev *urd)
|
||||
urdev_free(urd);
|
||||
}
|
||||
|
||||
/*
|
||||
* State and contents of ur devices can be changed by class D users issuing
|
||||
* CP commands such as PURGE or TRANSFER, while the Linux guest is suspended.
|
||||
* Also the Linux guest might be logged off, which causes all active spool
|
||||
* files to be closed.
|
||||
* So we cannot guarantee that spool files are still the same when the Linux
|
||||
* guest is resumed. In order to avoid unpredictable results at resume time
|
||||
* we simply refuse to suspend if a ur device node is open.
|
||||
*/
|
||||
static int ur_pm_suspend(struct ccw_device *cdev)
|
||||
{
|
||||
struct urdev *urd = cdev->dev.driver_data;
|
||||
|
||||
TRACE("ur_pm_suspend: cdev=%p\n", cdev);
|
||||
if (urd->open_flag) {
|
||||
pr_err("Unit record device %s is busy, %s refusing to "
|
||||
"suspend.\n", dev_name(&cdev->dev), ur_banner);
|
||||
return -EBUSY;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Low-level functions to do I/O to a ur device.
|
||||
* alloc_chan_prog
|
||||
|
Loading…
Reference in New Issue
Block a user