From: Daniel Vetter <daniel@ffwll.ch> To: Keith Packard <keithp@keithp.com> Cc: linux-kernel@vger.kernel.org, Dave Airlie <airlied@redhat.com>, Daniel Vetter <daniel@ffwll.ch>, dri-devel@lists.freedesktop.org Subject: Re: [PATCH 1/3] drm: Widen vblank UAPI to 64 bits. Change vblank time to ktime_t [v2] Date: Wed, 2 Aug 2017 10:53:58 +0200 [thread overview] Message-ID: <20170802085358.cipsolpgxlb2e323@phenom.ffwll.local> (raw) In-Reply-To: <20170801050306.24423-2-keithp@keithp.com> On Mon, Jul 31, 2017 at 10:03:04PM -0700, Keith Packard wrote: > This modifies the datatypes used by the vblank code to provide both 64 > bits of vblank count and switch to using ktime_t for timestamps to > increase resolution from microseconds to nanoseconds. > > The driver interfaces have been left using 32 bits of vblank count; > all of the code necessary to widen that value for the user API was > already included to handle devices returning fewer than 32-bits. > > This will provide the necessary datatypes for the Vulkan API. > > v2: > > * Re-write wait_vblank ioctl to ABSOLUTE sequence > > When an application uses the WAIT_VBLANK ioctl with RELATIVE > or NEXTONMISS bits set, the target vblank interval is updated > within the kernel. We need to write that target back to the > ioctl buffer and update the flags bits so that if the wait is > interrupted by a signal, when it is re-started, it will target > precisely the same vblank count as before. > > * Leave driver API with 32-bit vblank count > > Suggested-by: Michel Dänzer <michel@daenzer.net> > Suggested-by: Daniel Vetter <daniel@ffwll.ch> > Signed-off-by: Keith Packard <keithp@keithp.com> Subject is a bit confusing since you say uapi, but this is just the internal prep work. Dropping UAPI fixes that. With that fixed: Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Two more optional comments below, feel free to adapt or ignore. I'll wait for Michel's r-b before merging either way. > static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe, > + u64 req_seq, > union drm_wait_vblank *vblwait, Minor bikeshed: Since you pass the requested vblank number explicit, mabye also pass the user_data explicit and remove the vblwait struct from the parameter list? Restricts the old uapi cruft a bit. > /* > + * Widen a 32-bit param to 64-bits. > + * > + * \param narrow 32-bit value (missing upper 32 bits) > + * \param near 64-bit value that should be 'close' to near > + * > + * This function returns a 64-bit value using the lower 32-bits from > + * 'narrow' and constructing the upper 32-bits so that the result is > + * as close as possible to 'near'. > + */ > + > +static u64 widen_32_to_64(u32 narrow, u64 near) > +{ > + u64 wide = narrow | (near & 0xffffffff00000000ULL); > + if ((int64_t) (wide - near) > 0x80000000LL) > + wide -= 0x100000000ULL; > + else if ((int64_t) (near - wide) > 0x80000000LL) > + wide += 0x100000000ULL; > + return wide; return near + (int32_s) ((uint32_t)wide - near) ? But then it took me way too long to think about this one, so maybe leave it at that. Cheers, Daniel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch
WARNING: multiple messages have this Message-ID (diff)
From: Daniel Vetter <daniel@ffwll.ch> To: Keith Packard <keithp@keithp.com> Cc: Dave Airlie <airlied@redhat.com>, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/3] drm: Widen vblank UAPI to 64 bits. Change vblank time to ktime_t [v2] Date: Wed, 2 Aug 2017 10:53:58 +0200 [thread overview] Message-ID: <20170802085358.cipsolpgxlb2e323@phenom.ffwll.local> (raw) In-Reply-To: <20170801050306.24423-2-keithp@keithp.com> On Mon, Jul 31, 2017 at 10:03:04PM -0700, Keith Packard wrote: > This modifies the datatypes used by the vblank code to provide both 64 > bits of vblank count and switch to using ktime_t for timestamps to > increase resolution from microseconds to nanoseconds. > > The driver interfaces have been left using 32 bits of vblank count; > all of the code necessary to widen that value for the user API was > already included to handle devices returning fewer than 32-bits. > > This will provide the necessary datatypes for the Vulkan API. > > v2: > > * Re-write wait_vblank ioctl to ABSOLUTE sequence > > When an application uses the WAIT_VBLANK ioctl with RELATIVE > or NEXTONMISS bits set, the target vblank interval is updated > within the kernel. We need to write that target back to the > ioctl buffer and update the flags bits so that if the wait is > interrupted by a signal, when it is re-started, it will target > precisely the same vblank count as before. > > * Leave driver API with 32-bit vblank count > > Suggested-by: Michel Dänzer <michel@daenzer.net> > Suggested-by: Daniel Vetter <daniel@ffwll.ch> > Signed-off-by: Keith Packard <keithp@keithp.com> Subject is a bit confusing since you say uapi, but this is just the internal prep work. Dropping UAPI fixes that. With that fixed: Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Two more optional comments below, feel free to adapt or ignore. I'll wait for Michel's r-b before merging either way. > static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe, > + u64 req_seq, > union drm_wait_vblank *vblwait, Minor bikeshed: Since you pass the requested vblank number explicit, mabye also pass the user_data explicit and remove the vblwait struct from the parameter list? Restricts the old uapi cruft a bit. > /* > + * Widen a 32-bit param to 64-bits. > + * > + * \param narrow 32-bit value (missing upper 32 bits) > + * \param near 64-bit value that should be 'close' to near > + * > + * This function returns a 64-bit value using the lower 32-bits from > + * 'narrow' and constructing the upper 32-bits so that the result is > + * as close as possible to 'near'. > + */ > + > +static u64 widen_32_to_64(u32 narrow, u64 near) > +{ > + u64 wide = narrow | (near & 0xffffffff00000000ULL); > + if ((int64_t) (wide - near) > 0x80000000LL) > + wide -= 0x100000000ULL; > + else if ((int64_t) (near - wide) > 0x80000000LL) > + wide += 0x100000000ULL; > + return wide; return near + (int32_s) ((uint32_t)wide - near) ? But then it took me way too long to think about this one, so maybe leave it at that. Cheers, Daniel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2017-08-02 8:54 UTC|newest] Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-07-05 22:10 [PATCH 0/3] drm: Add CRTC-id based ioctls for vblank query/event Keith Packard 2017-07-05 22:10 ` Keith Packard 2017-07-05 22:10 ` [PATCH 1/3] drm: Widen vblank count to 64 bits. Change vblank time precision to ns Keith Packard 2017-07-05 22:10 ` Keith Packard 2017-07-06 7:19 ` Daniel Vetter 2017-07-06 7:19 ` Daniel Vetter 2017-07-06 14:59 ` Keith Packard 2017-07-06 14:59 ` Keith Packard 2017-07-07 12:16 ` Daniel Vetter 2017-07-07 12:16 ` Daniel Vetter 2017-07-25 20:54 ` Keith Packard 2017-07-25 20:54 ` Keith Packard 2017-07-06 7:45 ` Michel Dänzer 2017-07-06 7:45 ` Michel Dänzer 2017-07-06 8:05 ` Michel Dänzer 2017-07-06 8:05 ` Michel Dänzer 2017-07-06 15:11 ` Keith Packard 2017-07-06 15:04 ` Keith Packard 2017-07-06 15:04 ` Keith Packard 2017-07-07 1:34 ` Michel Dänzer 2017-07-07 1:34 ` Michel Dänzer 2017-07-07 2:05 ` Michel Dänzer 2017-07-07 2:05 ` Michel Dänzer 2017-07-05 22:10 ` [PATCH 2/3] drm: Reorganize drm_pending_event to support future event types Keith Packard 2017-07-05 22:10 ` Keith Packard 2017-07-06 7:30 ` Daniel Vetter 2017-07-06 15:36 ` Keith Packard 2017-07-06 15:36 ` Keith Packard 2017-07-07 12:05 ` Daniel Vetter 2017-07-07 12:05 ` Daniel Vetter 2017-07-05 22:10 ` [PATCH 3/3] drm: Add CRTC_GET_SEQUENCE and CRTC_QUEUE_SEQUENCE ioctls Keith Packard 2017-07-05 22:10 ` Keith Packard 2017-07-06 7:53 ` Daniel Vetter 2017-07-06 10:16 ` Ville Syrjälä 2017-07-06 10:16 ` Ville Syrjälä 2017-07-06 11:04 ` Daniel Vetter 2017-07-06 14:08 ` Ville Syrjälä 2017-07-06 16:28 ` Keith Packard 2017-07-06 16:28 ` Keith Packard 2017-07-06 17:59 ` Ville Syrjälä 2017-07-06 17:59 ` Ville Syrjälä 2017-07-06 18:22 ` Keith Packard 2017-07-06 18:22 ` Keith Packard 2017-07-06 18:59 ` Ville Syrjälä 2017-07-06 18:59 ` Ville Syrjälä 2017-07-06 19:46 ` Keith Packard 2017-07-06 19:46 ` Keith Packard 2017-07-06 16:27 ` Keith Packard 2017-07-06 16:27 ` Keith Packard 2017-07-06 21:49 ` Daniel Vetter 2017-07-06 21:49 ` Daniel Vetter 2017-08-01 5:03 ` [PATCH 0/3] drm: Add CRTC-id based ioctls for vblank query/event Keith Packard 2017-08-01 5:03 ` Keith Packard 2017-08-01 5:03 ` [PATCH 1/3] drm: Widen vblank UAPI to 64 bits. Change vblank time to ktime_t [v2] Keith Packard 2017-08-01 5:03 ` Keith Packard 2017-08-02 8:53 ` Daniel Vetter [this message] 2017-08-02 8:53 ` Daniel Vetter 2017-08-02 9:41 ` Michel Dänzer 2017-08-02 9:41 ` Michel Dänzer 2017-08-06 17:35 ` Keith Packard 2017-08-06 17:35 ` Keith Packard 2017-08-01 5:03 ` [PATCH 2/3] drm: Reorganize drm_pending_event to support future event types [v2] Keith Packard 2017-08-02 9:05 ` Daniel Vetter 2017-08-01 5:03 ` [PATCH 3/3] drm: Add CRTC_GET_SEQUENCE and CRTC_QUEUE_SEQUENCE ioctls [v2] Keith Packard 2017-08-01 5:03 ` Keith Packard 2017-08-02 9:25 ` Daniel Vetter 2017-08-02 9:25 ` Daniel Vetter 2017-08-06 3:32 ` Keith Packard 2017-08-06 3:32 ` Keith Packard 2017-08-07 3:02 ` Michel Dänzer 2017-08-07 3:02 ` Michel Dänzer 2017-08-07 8:34 ` Daniel Vetter 2017-08-07 8:34 ` Daniel Vetter 2017-10-09 17:18 ` Keith Packard 2017-10-09 17:18 ` Keith Packard 2017-10-10 8:55 ` Daniel Vetter 2017-10-10 8:55 ` Daniel Vetter 2017-08-02 9:45 ` Michel Dänzer 2017-08-06 3:42 ` Keith Packard 2017-08-06 3:42 ` Keith Packard 2017-08-07 3:03 ` Michel Dänzer 2017-08-07 3:03 ` Michel Dänzer 2017-10-11 0:45 [PATCH 0/3] drm: add new vblank ioctls [v3] Keith Packard 2017-10-11 0:45 ` [PATCH 1/3] drm: Widen vblank UAPI to 64 bits. Change vblank time to ktime_t [v2] Keith Packard 2017-10-11 0:45 ` Keith Packard
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20170802085358.cipsolpgxlb2e323@phenom.ffwll.local \ --to=daniel@ffwll.ch \ --cc=airlied@redhat.com \ --cc=dri-devel@lists.freedesktop.org \ --cc=keithp@keithp.com \ --cc=linux-kernel@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.