From: Mario Kleiner <mario.kleiner@tuebingen.mpg.de>
To: Jesse Barnes <jbarnes@virtuousgeek.org>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 1/2] drm: add flags argument to crtc page_flip callback
Date: Fri, 02 Nov 2012 05:29:10 +0100 [thread overview]
Message-ID: <50934C16.6080800@tuebingen.mpg.de> (raw)
In-Reply-To: <1351622029-2276-2-git-send-email-jbarnes@virtuousgeek.org>
On 30.10.12 19:33, Jesse Barnes wrote:
> This lets us pass down flags the drivers might be interested in, e.g. async.
>
> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Hi Jesse
I like it :) -- Anything that helps to get rid of the troublesome
'SwapBuffersWait' madness in the ddx at some point makes me happy.
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index ef1b221..b4964ac 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -3627,7 +3627,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
> (void (*) (struct drm_pending_event *)) kfree;
> }
>
> - ret = crtc->funcs->page_flip(crtc, fb, e);
> + ret = crtc->funcs->page_flip(crtc, fb, e, flags);
I think this should be page_flip->flags, ie.
+ ret = crtc->funcs->page_flip(crtc, fb, e, page_flip->flags);
because flags is used here:
> if (ret) {
> if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) {
> spin_lock_irqsave(&dev->event_lock, flags);
to spin_lock_irqsave.
As a tiny nit-pick, you sometimes name the variable 'flags', sometimes
'flip_flags' in the different kms implementations below, which could be
made consistent.
Reviewed-by: mario.kleiner@tuebingen.mpg.de
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> index fce245f..90dc116 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> @@ -202,8 +202,9 @@ static struct drm_crtc_helper_funcs exynos_crtc_helper_funcs = {
> };
>
> static int exynos_drm_crtc_page_flip(struct drm_crtc *crtc,
> - struct drm_framebuffer *fb,
> - struct drm_pending_vblank_event *event)
> + struct drm_framebuffer *fb,
> + struct drm_pending_vblank_event *event,
> + u32 flags)
> {
> struct drm_device *dev = crtc->dev;
> struct exynos_drm_private *dev_priv = dev->dev_private;
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 31d9fb8..2c0c174 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -7109,7 +7109,8 @@ static int intel_default_queue_flip(struct drm_device *dev,
>
> static int intel_crtc_page_flip(struct drm_crtc *crtc,
> struct drm_framebuffer *fb,
> - struct drm_pending_vblank_event *event)
> + struct drm_pending_vblank_event *event,
> + u32 flip_flags)
> {
> struct drm_device *dev = crtc->dev;
> struct drm_i915_private *dev_priv = dev->dev_private;
> diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
> index 8f98e5a..dc89496 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_display.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_display.c
> @@ -610,7 +610,7 @@ fail:
>
> int
> nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
> - struct drm_pending_vblank_event *event)
> + struct drm_pending_vblank_event *event, u32 flip_flags)
> {
> struct drm_device *dev = crtc->dev;
> struct nouveau_drm *drm = nouveau_drm(dev);
> diff --git a/drivers/gpu/drm/nouveau/nouveau_display.h b/drivers/gpu/drm/nouveau/nouveau_display.h
> index 722548b..bb2f63d 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_display.h
> +++ b/drivers/gpu/drm/nouveau/nouveau_display.h
> @@ -63,7 +63,7 @@ int nouveau_vblank_enable(struct drm_device *dev, int crtc);
> void nouveau_vblank_disable(struct drm_device *dev, int crtc);
>
> int nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
> - struct drm_pending_vblank_event *event);
> + struct drm_pending_vblank_event *event, u32 flags);
> int nouveau_finish_page_flip(struct nouveau_channel *,
> struct nouveau_page_flip_state *);
>
> diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
> index bfa2a60..4c32552 100644
> --- a/drivers/gpu/drm/radeon/radeon_display.c
> +++ b/drivers/gpu/drm/radeon/radeon_display.c
> @@ -346,7 +346,8 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id)
>
> static int radeon_crtc_page_flip(struct drm_crtc *crtc,
> struct drm_framebuffer *fb,
> - struct drm_pending_vblank_event *event)
> + struct drm_pending_vblank_event *event,
> + u32 flip_flags)
> {
> struct drm_device *dev = crtc->dev;
> struct radeon_device *rdev = dev->dev_private;
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
> index 0e7a930..4878fa6 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
> @@ -476,7 +476,8 @@ void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc)
>
> static int shmob_drm_crtc_page_flip(struct drm_crtc *crtc,
> struct drm_framebuffer *fb,
> - struct drm_pending_vblank_event *event)
> + struct drm_pending_vblank_event *event,
> + u32 flags)
> {
> struct shmob_drm_crtc *scrtc = to_shmob_crtc(crtc);
> struct drm_device *dev = scrtc->crtc.dev;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index 5474394..3cb86fe 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -1682,7 +1682,8 @@ int vmw_du_update_layout(struct vmw_private *dev_priv, unsigned num,
>
> int vmw_du_page_flip(struct drm_crtc *crtc,
> struct drm_framebuffer *fb,
> - struct drm_pending_vblank_event *event)
> + struct drm_pending_vblank_event *event,
> + u32 flags)
> {
> struct vmw_private *dev_priv = vmw_priv(crtc->dev);
> struct drm_framebuffer *old_fb = crtc->fb;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> index 6fa89c9..088a8c9 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> @@ -123,7 +123,8 @@ struct vmw_display_unit {
> void vmw_display_unit_cleanup(struct vmw_display_unit *du);
> int vmw_du_page_flip(struct drm_crtc *crtc,
> struct drm_framebuffer *fb,
> - struct drm_pending_vblank_event *event);
> + struct drm_pending_vblank_event *event,
> + u32 flags);
> void vmw_du_crtc_save(struct drm_crtc *crtc);
> void vmw_du_crtc_restore(struct drm_crtc *crtc);
> void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> diff --git a/drivers/staging/imx-drm/ipuv3-crtc.c b/drivers/staging/imx-drm/ipuv3-crtc.c
> index 78d3eda..8c93b57 100644
> --- a/drivers/staging/imx-drm/ipuv3-crtc.c
> +++ b/drivers/staging/imx-drm/ipuv3-crtc.c
> @@ -132,7 +132,8 @@ static void ipu_crtc_dpms(struct drm_crtc *crtc, int mode)
>
> static int ipu_page_flip(struct drm_crtc *crtc,
> struct drm_framebuffer *fb,
> - struct drm_pending_vblank_event *event)
> + struct drm_pending_vblank_event *event,
> + u32 flags)
> {
> struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc);
> int ret;
> diff --git a/drivers/staging/omapdrm/omap_crtc.c b/drivers/staging/omapdrm/omap_crtc.c
> index 732f2ad..51daf5d 100644
> --- a/drivers/staging/omapdrm/omap_crtc.c
> +++ b/drivers/staging/omapdrm/omap_crtc.c
> @@ -173,7 +173,8 @@ static void page_flip_cb(void *arg)
>
> static int omap_crtc_page_flip_locked(struct drm_crtc *crtc,
> struct drm_framebuffer *fb,
> - struct drm_pending_vblank_event *event)
> + struct drm_pending_vblank_event *event,
> + u32 flags)
> {
> struct drm_device *dev = crtc->dev;
> struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index 3fa18b7..79f1d9b 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -355,7 +355,8 @@ struct drm_crtc_funcs {
> */
> int (*page_flip)(struct drm_crtc *crtc,
> struct drm_framebuffer *fb,
> - struct drm_pending_vblank_event *event);
> + struct drm_pending_vblank_event *event,
> + u32 flags);
>
> int (*set_property)(struct drm_crtc *crtc,
> struct drm_property *property, uint64_t val);
> diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> index 3d6301b..6e927bb 100644
> --- a/include/uapi/drm/drm_mode.h
> +++ b/include/uapi/drm/drm_mode.h
> @@ -399,7 +399,9 @@ struct drm_mode_crtc_lut {
> };
>
> #define DRM_MODE_PAGE_FLIP_EVENT 0x01
> -#define DRM_MODE_PAGE_FLIP_FLAGS DRM_MODE_PAGE_FLIP_EVENT
> +#define DRM_MODE_PAGE_FLIP_ASYNC 0x02
> +#define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT | \
> + DRM_MODE_PAGE_FLIP_ASYNC)
>
> /*
> * Request a page flip on the specified crtc.
>
next prev parent reply other threads:[~2012-11-02 4:29 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-30 18:33 [RFC] Async flips Jesse Barnes
2012-10-30 18:33 ` [PATCH 1/2] drm: add flags argument to crtc page_flip callback Jesse Barnes
2012-11-02 4:29 ` Mario Kleiner [this message]
2012-11-02 16:00 ` Jesse Barnes
2012-10-30 18:33 ` [PATCH 2/2] drm/i915: add async flip support on gen7 Jesse Barnes
2012-10-31 17:47 ` Eric Anholt
2012-10-31 19:24 ` Jesse Barnes
2012-10-31 12:53 ` [RFC] Async flips Ville Syrjälä
2012-10-31 15:23 ` Jesse Barnes
2012-10-31 15:26 ` Daniel Vetter
2012-10-31 15:39 ` Jesse Barnes
2012-10-31 15:49 ` Chris Wilson
2012-10-31 16:03 ` Daniel Vetter
2012-10-31 16:27 ` Jesse Barnes
2012-10-31 16:05 ` Ville Syrjälä
2012-10-31 17:44 ` Eric Anholt
2012-10-31 18:51 ` Ville Syrjälä
2012-11-02 4:45 ` Mario Kleiner
2012-11-02 9:29 ` Ville Syrjälä
2012-11-12 3:53 ` Mario Kleiner
2012-11-12 12:04 ` Ville Syrjälä
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=50934C16.6080800@tuebingen.mpg.de \
--to=mario.kleiner@tuebingen.mpg.de \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jbarnes@virtuousgeek.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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox