Using the wall clock time for delta time calculations is wrong to
begin with because wall clock time can be set from userspace and NTP.
Such data wants to be based on clock monotonic.

The calcuations also are done on a nanosecond basis. Use the
nanoseconds based interface right away.

Signed-off-by: Thomas Gleixner <[email protected]>
Cc: Jean Delvare <[email protected]>
---
 drivers/hwmon/ibmaem.c |    6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

Index: tip/drivers/hwmon/ibmaem.c
===================================================================
--- tip.orig/drivers/hwmon/ibmaem.c
+++ tip/drivers/hwmon/ibmaem.c
@@ -842,11 +842,10 @@ static ssize_t aem_show_power(struct dev
        struct aem_data *data = dev_get_drvdata(dev);
        u64 before, after, delta, time;
        signed long leftover;
-       struct timespec b, a;
 
        mutex_lock(&data->lock);
        update_aem_energy_one(data, attr->index);
-       getnstimeofday(&b);
+       time = ktime_get_ns();
        before = data->energy[attr->index];
 
        leftover = schedule_timeout_interruptible(
@@ -858,11 +857,10 @@ static ssize_t aem_show_power(struct dev
        }
 
        update_aem_energy_one(data, attr->index);
-       getnstimeofday(&a);
+       time = ktime_get_ns() - time;
        after = data->energy[attr->index];
        mutex_unlock(&data->lock);
 
-       time = timespec_to_ns(&a) - timespec_to_ns(&b);
        delta = (after - before) * UJ_PER_MJ;
 
        return sprintf(buf, "%llu\n",


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to