Return true/false from drm_crtc_vblank_get_vblank_timeout(), depending
on the success of the calculation. Let caller handle failure by itself.

Until now the helper tried to return a vblank time even in the case of
an error. Letting the caller handle the failure is the preferred behavior.

Signed-off-by: Thomas Zimmermann <[email protected]>
---
 drivers/gpu/drm/drm_vblank.c        | 15 +++++++++------
 drivers/gpu/drm/drm_vblank_helper.c |  4 +---
 include/drm/drm_vblank.h            |  2 +-
 3 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index f90fb2d13e42..96d70c3d4522 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -2287,18 +2287,19 @@ EXPORT_SYMBOL(drm_crtc_vblank_cancel_timer);
  * The helper drm_crtc_vblank_get_vblank_timeout() returns the next vblank
  * timestamp of the CRTC's vblank timer according to the timer's expiry
  * time.
+ *
+ * Returns:
+ * True on success, or false otherwise.
  */
-void drm_crtc_vblank_get_vblank_timeout(struct drm_crtc *crtc, ktime_t 
*vblank_time)
+bool drm_crtc_vblank_get_vblank_timeout(struct drm_crtc *crtc, ktime_t 
*vblank_time)
 {
        struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
        struct drm_vblank_crtc_timer *vtimer = &vblank->vblank_timer;
        u64 cur_count;
        ktime_t cur_time;
 
-       if (!READ_ONCE(vblank->enabled)) {
-               *vblank_time = ktime_get();
-               return;
-       }
+       if (!READ_ONCE(vblank->enabled))
+               return false;
 
        /*
         * A concurrent vblank timeout could update the expires field before
@@ -2312,7 +2313,7 @@ void drm_crtc_vblank_get_vblank_timeout(struct drm_crtc 
*crtc, ktime_t *vblank_t
        } while (cur_count != drm_crtc_vblank_count_and_time(crtc, &cur_time));
 
        if (drm_WARN_ON(crtc->dev, !ktime_compare(*vblank_time, cur_time)))
-               return; /* Already expired */
+               return false; /* Already expired */
 
        /*
         * To prevent races we roll the hrtimer forward before we do any
@@ -2322,5 +2323,7 @@ void drm_crtc_vblank_get_vblank_timeout(struct drm_crtc 
*crtc, ktime_t *vblank_t
         * correct the timestamp by one frame.
         */
        *vblank_time = ktime_sub(*vblank_time, vtimer->interval);
+
+       return true;
 }
 EXPORT_SYMBOL(drm_crtc_vblank_get_vblank_timeout);
diff --git a/drivers/gpu/drm/drm_vblank_helper.c 
b/drivers/gpu/drm/drm_vblank_helper.c
index d3f8147ecdc1..aa8df047b2aa 100644
--- a/drivers/gpu/drm/drm_vblank_helper.c
+++ b/drivers/gpu/drm/drm_vblank_helper.c
@@ -169,8 +169,6 @@ bool 
drm_crtc_vblank_helper_get_vblank_timestamp_from_timer(struct drm_crtc *crt
                                                            ktime_t 
*vblank_time,
                                                            bool in_vblank_irq)
 {
-       drm_crtc_vblank_get_vblank_timeout(crtc, vblank_time);
-
-       return true;
+       return drm_crtc_vblank_get_vblank_timeout(crtc, vblank_time);
 }
 EXPORT_SYMBOL(drm_crtc_vblank_helper_get_vblank_timestamp_from_timer);
diff --git a/include/drm/drm_vblank.h b/include/drm/drm_vblank.h
index 2fcef9c0f5b1..1c06e4499dae 100644
--- a/include/drm/drm_vblank.h
+++ b/include/drm/drm_vblank.h
@@ -319,7 +319,7 @@ void drm_crtc_set_max_vblank_count(struct drm_crtc *crtc,
 
 int drm_crtc_vblank_start_timer(struct drm_crtc *crtc);
 void drm_crtc_vblank_cancel_timer(struct drm_crtc *crtc);
-void drm_crtc_vblank_get_vblank_timeout(struct drm_crtc *crtc, ktime_t 
*vblank_time);
+bool drm_crtc_vblank_get_vblank_timeout(struct drm_crtc *crtc, ktime_t 
*vblank_time);
 
 /*
  * Helpers for struct drm_crtc_funcs
-- 
2.54.0

Reply via email to