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
