Am 10.11.25 um 17:17 schrieb Jani Nikula:
Use the vblank pointer instead of a dev, pipe pair to simplify code.

Drop the pipe check warning, as we can be sure vblank->pipe is within
limits.

Signed-off-by: Jani Nikula <[email protected]>

Reviewed-by: Thomas Zimmermann <[email protected]>

OK, this is what I was looking for in the previous patch. Would it make sense to change order of the patches?

---
  drivers/gpu/drm/drm_vblank.c | 28 +++++++++++-----------------
  1 file changed, 11 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index e33b7fa6f19a..0a2e372dd549 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -950,18 +950,12 @@ EXPORT_SYMBOL(drm_crtc_vblank_count);
   *
   * This is the legacy version of drm_crtc_vblank_count_and_time().
   */
-static u64 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe,
+static u64 drm_vblank_count_and_time(struct drm_vblank_crtc *vblank,
                                     ktime_t *vblanktime)
  {
-       struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
        u64 vblank_count;
        unsigned int seq;
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs)) {
-               *vblanktime = 0;
-               return 0;
-       }
-
        do {
                seq = read_seqbegin(&vblank->seqlock);
                vblank_count = atomic64_read(&vblank->count);
@@ -993,7 +987,7 @@ static u64 drm_vblank_count_and_time(struct drm_device 
*dev, unsigned int pipe,
  u64 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc,
                                   ktime_t *vblanktime)
  {
-       return drm_vblank_count_and_time(crtc->dev, drm_crtc_index(crtc),
+       return drm_vblank_count_and_time(drm_crtc_vblank_crtc(crtc),
                                         vblanktime);
  }
  EXPORT_SYMBOL(drm_crtc_vblank_count_and_time);
@@ -1136,18 +1130,18 @@ void drm_crtc_send_vblank_event(struct drm_crtc *crtc,
                                struct drm_pending_vblank_event *e)
  {
        struct drm_device *dev = crtc->dev;
+       struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
        u64 seq;
-       unsigned int pipe = drm_crtc_index(crtc);
        ktime_t now;
if (drm_dev_has_vblank(dev)) {
-               seq = drm_vblank_count_and_time(dev, pipe, &now);
+               seq = drm_vblank_count_and_time(vblank, &now);
        } else {
                seq = 0;
now = ktime_get();
        }
-       e->pipe = pipe;
+       e->pipe = vblank->pipe;
        send_vblank_event(dev, e, seq, now);
  }
  EXPORT_SYMBOL(drm_crtc_send_vblank_event);
@@ -1368,7 +1362,7 @@ void drm_crtc_vblank_off(struct drm_crtc *crtc)
        spin_unlock(&dev->vbl_lock);
/* Send any queued vblank events, lest the natives grow disquiet */
-       seq = drm_vblank_count_and_time(dev, pipe, &now);
+       seq = drm_vblank_count_and_time(vblank, &now);
list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
                if (e->pipe != pipe)
@@ -1645,7 +1639,7 @@ static int drm_queue_vblank_event(struct drm_vblank_crtc 
*vblank,
        if (ret)
                goto err_unlock;
- seq = drm_vblank_count_and_time(dev, pipe, &now);
+       seq = drm_vblank_count_and_time(vblank, &now);
drm_dbg_core(dev, "event on vblank count %llu, current %llu, crtc %u\n",
                     req_seq, seq, pipe);
@@ -1713,7 +1707,7 @@ static void drm_wait_vblank_reply(struct drm_vblank_crtc 
*vblank,
         * to store the seconds. This is safe as we always use monotonic
         * timestamps since linux-4.15.
         */
-       reply->sequence = drm_vblank_count_and_time(vblank->dev, vblank->pipe, 
&now);
+       reply->sequence = drm_vblank_count_and_time(vblank, &now);
        ts = ktime_to_timespec64(now);
        reply->tval_sec = (u32)ts.tv_sec;
        reply->tval_usec = ts.tv_nsec / 1000;
@@ -1878,7 +1872,7 @@ static void drm_handle_vblank_events(struct 
drm_vblank_crtc *vblank)
assert_spin_locked(&dev->event_lock); - seq = drm_vblank_count_and_time(dev, pipe, &now);
+       seq = drm_vblank_count_and_time(vblank, &now);
list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
                if (e->pipe != pipe)
@@ -2040,7 +2034,7 @@ int drm_crtc_get_sequence_ioctl(struct drm_device *dev, 
void *data,
        else
                get_seq->active = crtc->enabled;
        drm_modeset_unlock(&crtc->mutex);
-       get_seq->sequence = drm_vblank_count_and_time(dev, pipe, &now);
+       get_seq->sequence = drm_vblank_count_and_time(vblank, &now);
        get_seq->sequence_ns = ktime_to_ns(now);
        if (!vblank_enabled)
                drm_crtc_vblank_put(crtc);
@@ -2101,7 +2095,7 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, 
void *data,
                goto err_free;
        }
- seq = drm_vblank_count_and_time(dev, pipe, &now);
+       seq = drm_vblank_count_and_time(vblank, &now);
        req_seq = queue_seq->sequence;
if (flags & DRM_CRTC_SEQUENCE_RELATIVE)

--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)


Reply via email to