Loading drivers/s390/char/vmlogrdr.c +26 −1 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ * character device driver for reading z/VM system service records * * * Copyright 2004 IBM Corporation * Copyright IBM Corp. 2004, 2009 * character device driver for reading z/VM system service records, * Version 1.0 * Author(s): Xenia Tkatschow <xenia@us.ibm.com> Loading Loading @@ -660,6 +660,29 @@ static struct attribute *vmlogrdr_attrs[] = { NULL, }; static int vmlogrdr_pm_prepare(struct device *dev) { int rc; struct vmlogrdr_priv_t *priv = dev->driver_data; rc = 0; if (priv) { spin_lock_bh(&priv->priv_lock); if (priv->dev_in_use) rc = -EBUSY; spin_unlock_bh(&priv->priv_lock); } if (rc) pr_err("vmlogrdr: device %s is busy. Refuse to suspend.\n", dev_name(dev)); return rc; } static struct dev_pm_ops vmlogrdr_pm_ops = { .prepare = vmlogrdr_pm_prepare, }; static struct attribute_group vmlogrdr_attr_group = { .attrs = vmlogrdr_attrs, }; Loading @@ -668,6 +691,7 @@ static struct class *vmlogrdr_class; static struct device_driver vmlogrdr_driver = { .name = "vmlogrdr", .bus = &iucv_bus, .pm = &vmlogrdr_pm_ops, }; Loading Loading @@ -729,6 +753,7 @@ static int vmlogrdr_register_device(struct vmlogrdr_priv_t *priv) dev->bus = &iucv_bus; dev->parent = iucv_root; dev->driver = &vmlogrdr_driver; dev->driver_data = priv; /* * The release function could be called after the * module has been unloaded. It's _only_ task is to Loading Loading
drivers/s390/char/vmlogrdr.c +26 −1 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ * character device driver for reading z/VM system service records * * * Copyright 2004 IBM Corporation * Copyright IBM Corp. 2004, 2009 * character device driver for reading z/VM system service records, * Version 1.0 * Author(s): Xenia Tkatschow <xenia@us.ibm.com> Loading Loading @@ -660,6 +660,29 @@ static struct attribute *vmlogrdr_attrs[] = { NULL, }; static int vmlogrdr_pm_prepare(struct device *dev) { int rc; struct vmlogrdr_priv_t *priv = dev->driver_data; rc = 0; if (priv) { spin_lock_bh(&priv->priv_lock); if (priv->dev_in_use) rc = -EBUSY; spin_unlock_bh(&priv->priv_lock); } if (rc) pr_err("vmlogrdr: device %s is busy. Refuse to suspend.\n", dev_name(dev)); return rc; } static struct dev_pm_ops vmlogrdr_pm_ops = { .prepare = vmlogrdr_pm_prepare, }; static struct attribute_group vmlogrdr_attr_group = { .attrs = vmlogrdr_attrs, }; Loading @@ -668,6 +691,7 @@ static struct class *vmlogrdr_class; static struct device_driver vmlogrdr_driver = { .name = "vmlogrdr", .bus = &iucv_bus, .pm = &vmlogrdr_pm_ops, }; Loading Loading @@ -729,6 +753,7 @@ static int vmlogrdr_register_device(struct vmlogrdr_priv_t *priv) dev->bus = &iucv_bus; dev->parent = iucv_root; dev->driver = &vmlogrdr_driver; dev->driver_data = priv; /* * The release function could be called after the * module has been unloaded. It's _only_ task is to Loading