On Wed, 19 Dec 2018 at 11:43, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > > On Wed, 19 Dec 2018 at 11:34, Vincent Guittot > <vincent.guittot@xxxxxxxxxx> wrote: > > > > On Wed, 19 Dec 2018 at 11:21, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > > > > > > On Wed, 19 Dec 2018 at 11:11, Vincent Guittot > > > <vincent.guittot@xxxxxxxxxx> wrote: > > > > > > > > On Wed, 19 Dec 2018 at 10:58, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > > > > > > > > > > On Tue, 18 Dec 2018 at 15:55, Vincent Guittot > > > > > <vincent.guittot@xxxxxxxxxx> wrote: > > > > > > > > > > > > Some drivers (like i915/drm) need to get the accounted suspended time. > > > > > > pm_runtime_accounted_time_get() will return the suspended or active > > > > > > accounted time until now. > > > > > > > > > > I suggest to leave the active accounted time out for now. At least > > > > > until we have some users. > > > > > > > > This is needed to keep same feature level for i915/drm > > > > > > I don't follow. According to the changes in the drm driver in patch2, > > > we are only calling the new pm_runtime interface with RPM_SUSPENDED? > > > > sorry I mix your question above and the one about accounting_timestamp. > > > > So I agree that only RPM_SUSPENDED is used for now > > > > > > > > > > > > > > > > > > > That said, perhaps rename the function to something along the lines > > > > > of, pm_runtime_last_suspended_time(), to make it more clear. > > > > > > > > > > > > > > > > > Signed-off-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx> > > > > > > --- > > > > > > drivers/base/power/runtime.c | 26 ++++++++++++++++++++++++++ > > > > > > include/linux/pm_runtime.h | 2 ++ > > > > > > 2 files changed, 28 insertions(+) > > > > > > > > > > > > diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c > > > > > > index 7062469..6461469 100644 > > > > > > --- a/drivers/base/power/runtime.c > > > > > > +++ b/drivers/base/power/runtime.c > > > > > > @@ -88,6 +88,32 @@ static void __update_runtime_status(struct device *dev, enum rpm_status status) > > > > > > dev->power.runtime_status = status; > > > > > > } > > > > > > > > > > > > +u64 pm_runtime_accounted_time_get(struct device *dev, enum rpm_status status, bool update) > > > > > > +{ > > > > > > + u64 now = ktime_to_ns(ktime_get()); > > > > > > > > > > I think you should stay on jiffies here - and then switch to ktime in patch 3. > > > > > > > > > > > + u64 delta = 0, time = 0; > > > > > > + unsigned long flags; > > > > > > + > > > > > > + spin_lock_irqsave(&dev->power.lock, flags); > > > > > > + > > > > > > + if (dev->power.disable_depth > 0) > > > > > > + goto unlock; > > > > > > + > > > > > > + /* Add ongoing state if requested */ > > > > > > + if (update && dev->power.runtime_status == status) > > > > > > + delta = now - dev->power.accounting_timestamp; > > > > > > + > > > > > > > > > > Hmm. Do we really need to update the accounting timestamp? I would > > > > > rather avoid it if possible. > > > > > > > > i915/drm uses this to track ongoing suspended state. In fact they are > > > > mainly interested by this part > > > > > > Again, sorry I don't follow. > > > > In fact we don't update dev->power.accounting_timestamp but only use > > it to get how much time has elapsed in the current state. > > > > > > > > My suggested changes below, would do exactly that; track the ongoing > > > suspended state. > > > > > > The user can call the function several times while the device remains > > > RPM_SUSPENDED, and if needed the user could then compute the delta > > > in-between the calls, for whatever reason that may be needed. > > > > So I'm not sure to catch your question: > > Is your problem linked to status != RPM_SUSPENDED or the update > > parameter that compute delta ? > > My intent was to keep things simple. > > 1. Only expose last suspended time, which means tracking the ongoing > suspended state. In other words, you can also remove "enum rpm_status > status" as the in-parameter to pm_runtime_accounted_time_get(). > 2. Don't allow the user of pm_runtime_accounted_time_get() to update > the current timestamp, in "dev->power.accounting_timestamp". > > Is that okay for the drm driver, to do what it does today? Hold on. I am wondering if the drm driver could use the existing pm_runtime_autosuspend_expiration() function instead. Isn't that really that what is needed? [...] Kind regards Uffe _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel