lkml.org 
[lkml]   [2020]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.5 269/542] PM / devfreq: Change time stats to 64-bit
    Date
    From: Kamil Konieczny <k.konieczny@samsung.com>

    [ Upstream commit b76b3479dab948bea0a98b6d263eb56d8f358528 ]

    Change time stats counting to bigger type by using 64-bit jiffies.
    This will make devfreq stats code look similar to cpufreq stats and
    prevents overflow (for HZ = 1000 after 49.7 days).

    Signed-off-by: Kamil Konieczny <k.konieczny@samsung.com>
    Acked-by: Chanwoo Choi <cw00.choi@samsung.com>
    Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/devfreq/devfreq.c | 14 +++++++-------
    include/linux/devfreq.h | 4 ++--
    2 files changed, 9 insertions(+), 9 deletions(-)

    diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
    index 07602083c743e..554d155106a5f 100644
    --- a/drivers/devfreq/devfreq.c
    +++ b/drivers/devfreq/devfreq.c
    @@ -209,10 +209,10 @@ static int set_freq_table(struct devfreq *devfreq)
    int devfreq_update_status(struct devfreq *devfreq, unsigned long freq)
    {
    int lev, prev_lev, ret = 0;
    - unsigned long cur_time;
    + u64 cur_time;

    lockdep_assert_held(&devfreq->lock);
    - cur_time = jiffies;
    + cur_time = get_jiffies_64();

    /* Immediately exit if previous_freq is not initialized yet. */
    if (!devfreq->previous_freq)
    @@ -535,7 +535,7 @@ void devfreq_monitor_resume(struct devfreq *devfreq)
    msecs_to_jiffies(devfreq->profile->polling_ms));

    out_update:
    - devfreq->last_stat_updated = jiffies;
    + devfreq->last_stat_updated = get_jiffies_64();
    devfreq->stop_polling = false;

    if (devfreq->profile->get_cur_freq &&
    @@ -820,7 +820,7 @@ struct devfreq *devfreq_add_device(struct device *dev,

    devfreq->time_in_state = devm_kcalloc(&devfreq->dev,
    devfreq->profile->max_state,
    - sizeof(unsigned long),
    + sizeof(*devfreq->time_in_state),
    GFP_KERNEL);
    if (!devfreq->time_in_state) {
    mutex_unlock(&devfreq->lock);
    @@ -828,7 +828,7 @@ struct devfreq *devfreq_add_device(struct device *dev,
    goto err_devfreq;
    }

    - devfreq->last_stat_updated = jiffies;
    + devfreq->last_stat_updated = get_jiffies_64();

    srcu_init_notifier_head(&devfreq->transition_notifier_list);

    @@ -1589,8 +1589,8 @@ static ssize_t trans_stat_show(struct device *dev,
    for (j = 0; j < max_state; j++)
    len += sprintf(buf + len, "%10u",
    devfreq->trans_table[(i * max_state) + j]);
    - len += sprintf(buf + len, "%10u\n",
    - jiffies_to_msecs(devfreq->time_in_state[i]));
    + len += sprintf(buf + len, "%10llu\n", (u64)
    + jiffies64_to_msecs(devfreq->time_in_state[i]));
    }

    len += sprintf(buf + len, "Total transition : %u\n",
    diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h
    index fb376b5b72819..95816a8e3d266 100644
    --- a/include/linux/devfreq.h
    +++ b/include/linux/devfreq.h
    @@ -177,8 +177,8 @@ struct devfreq {
    /* information for device frequency transition */
    unsigned int total_trans;
    unsigned int *trans_table;
    - unsigned long *time_in_state;
    - unsigned long last_stat_updated;
    + u64 *time_in_state;
    + u64 last_stat_updated;

    struct srcu_notifier_head transition_notifier_list;

    --
    2.20.1
    \
     
     \ /
      Last update: 2020-02-14 19:09    [W:4.033 / U:0.232 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site