OSDN Git Service

PM: QoS: Clean up misc device file operations
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 11 Feb 2020 23:00:12 +0000 (00:00 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 13 Feb 2020 10:26:13 +0000 (11:26 +0100)
Reorder the code to avoid using extra function header declarations
for the pm_qos_power_*() family of functions and drop those
declarations.

Also clean up the internals of those functions to consolidate checks,
avoid using redundant local variables and similar.

No intentional functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Reviewed-by: Amit Kucheria <amit.kucheria@linaro.org>
Tested-by: Amit Kucheria <amit.kucheria@linaro.org>
kernel/power/qos.c

index 57ff542..9f67584 100644 (file)
@@ -83,21 +83,6 @@ static struct pm_qos_object *pm_qos_array[] = {
        &cpu_dma_pm_qos,
 };
 
-static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf,
-               size_t count, loff_t *f_pos);
-static ssize_t pm_qos_power_read(struct file *filp, char __user *buf,
-               size_t count, loff_t *f_pos);
-static int pm_qos_power_open(struct inode *inode, struct file *filp);
-static int pm_qos_power_release(struct inode *inode, struct file *filp);
-
-static const struct file_operations pm_qos_power_fops = {
-       .write = pm_qos_power_write,
-       .read = pm_qos_power_read,
-       .open = pm_qos_power_open,
-       .release = pm_qos_power_release,
-       .llseek = noop_llseek,
-};
-
 /**
  * pm_qos_read_value - Return the current effective constraint value.
  * @c: List of PM QoS constraint requests.
@@ -414,15 +399,6 @@ EXPORT_SYMBOL_GPL(pm_qos_remove_notifier);
 
 /* User space interface to global PM QoS via misc device. */
 
-static int register_pm_qos_misc(struct pm_qos_object *qos)
-{
-       qos->pm_qos_power_miscdev.minor = MISC_DYNAMIC_MINOR;
-       qos->pm_qos_power_miscdev.name = qos->name;
-       qos->pm_qos_power_miscdev.fops = &pm_qos_power_fops;
-
-       return misc_register(&qos->pm_qos_power_miscdev);
-}
-
 static int pm_qos_power_open(struct inode *inode, struct file *filp)
 {
        struct pm_qos_request *req;
@@ -439,9 +415,10 @@ static int pm_qos_power_open(struct inode *inode, struct file *filp)
 
 static int pm_qos_power_release(struct inode *inode, struct file *filp)
 {
-       struct pm_qos_request *req;
+       struct pm_qos_request *req = filp->private_data;
+
+       filp->private_data = NULL;
 
-       req = filp->private_data;
        pm_qos_remove_request(req);
        kfree(req);
 
@@ -449,15 +426,13 @@ static int pm_qos_power_release(struct inode *inode, struct file *filp)
 }
 
 static ssize_t pm_qos_power_read(struct file *filp, char __user *buf,
-               size_t count, loff_t *f_pos)
+                                size_t count, loff_t *f_pos)
 {
-       s32 value;
-       unsigned long flags;
        struct pm_qos_request *req = filp->private_data;
+       unsigned long flags;
+       s32 value;
 
-       if (!req)
-               return -EINVAL;
-       if (!pm_qos_request_active(req))
+       if (!req || !pm_qos_request_active(req))
                return -EINVAL;
 
        spin_lock_irqsave(&pm_qos_lock, flags);
@@ -468,10 +443,9 @@ static ssize_t pm_qos_power_read(struct file *filp, char __user *buf,
 }
 
 static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf,
-               size_t count, loff_t *f_pos)
+                                 size_t count, loff_t *f_pos)
 {
        s32 value;
-       struct pm_qos_request *req;
 
        if (count == sizeof(s32)) {
                if (copy_from_user(&value, buf, sizeof(s32)))
@@ -484,12 +458,28 @@ static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf,
                        return ret;
        }
 
-       req = filp->private_data;
-       pm_qos_update_request(req, value);
+       pm_qos_update_request(filp->private_data, value);
 
        return count;
 }
 
+static const struct file_operations pm_qos_power_fops = {
+       .write = pm_qos_power_write,
+       .read = pm_qos_power_read,
+       .open = pm_qos_power_open,
+       .release = pm_qos_power_release,
+       .llseek = noop_llseek,
+};
+
+static int register_pm_qos_misc(struct pm_qos_object *qos)
+{
+       qos->pm_qos_power_miscdev.minor = MISC_DYNAMIC_MINOR;
+       qos->pm_qos_power_miscdev.name = qos->name;
+       qos->pm_qos_power_miscdev.fops = &pm_qos_power_fops;
+
+       return misc_register(&qos->pm_qos_power_miscdev);
+}
+
 static int __init pm_qos_power_init(void)
 {
        int ret;