xf86-video-intel: src/sna/sna_display.c src/sna/sna.h
Chris Wilson
ickle at kemper.freedesktop.org
Thu Oct 12 13:38:02 UTC 2017
src/sna/sna.h | 15 +++++++++++----
src/sna/sna_display.c | 13 ++++++-------
2 files changed, 17 insertions(+), 11 deletions(-)
New commits:
commit a384b462a3a563718527f02cc977cb902ee4ab57
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Oct 12 14:36:12 2017 +0100
sna: Move the public sna_crtc fields into a named struct
Avoid compiler trickery by making the layout of the sna_crtc_public
pointed to by xf86CrtcPtr->devPrivate known.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna.h b/src/sna/sna.h
index a65f652e..74eae745 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -638,16 +638,23 @@ extern bool sna_crtc_is_transformed(xf86CrtcPtr crtc);
uint32_t sna_crtc_id(xf86CrtcPtr crtc);
+struct sna_crtc_public {
+ unsigned long flags;
+ struct list vblank_queue;
+};
+
static inline unsigned long *sna_crtc_flags(xf86CrtcPtr crtc)
{
- unsigned long *flags = crtc->driver_private;
- assert(flags);
- return flags;
+ struct sna_crtc_public *pub = crtc->driver_private;
+ assert(pub);
+ return &pub->flags;
}
static inline struct list *sna_crtc_vblank_queue(xf86CrtcPtr crtc)
{
- return (struct list *)(sna_crtc_flags(crtc) + 1);
+ struct sna_crtc_public *pub = crtc->driver_private;
+ assert(pub);
+ return &pub->vblank_queue;
}
static inline unsigned sna_crtc_pipe(xf86CrtcPtr crtc)
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 13c76115..93c21456 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -192,8 +192,7 @@ struct sna_cursor {
};
struct sna_crtc {
- unsigned long flags;
- struct list vblank_queue;
+ struct sna_crtc_public public;
uint32_t id;
xf86CrtcPtr base;
struct drm_mode_modeinfo kmode;
@@ -421,7 +420,7 @@ static inline struct sna_crtc *to_sna_crtc(xf86CrtcPtr crtc)
static inline unsigned __sna_crtc_pipe(struct sna_crtc *crtc)
{
- return crtc->flags >> 8 & 0xff;
+ return crtc->public.flags >> 8 & 0xff;
}
static inline unsigned __sna_crtc_id(struct sna_crtc *crtc)
@@ -2166,7 +2165,7 @@ __sna_crtc_disable(struct sna *sna, struct sna_crtc *sna_crtc)
sna_crtc->bo->active_scanout--;
kgem_bo_destroy(&sna->kgem, sna_crtc->bo);
sna_crtc->bo = NULL;
- sna_crtc->flags &= ~CRTC_ON;
+ sna_crtc->public.flags &= ~CRTC_ON;
if (sna->mode.hidden) {
sna->mode.hidden--;
@@ -3101,7 +3100,7 @@ retry: /* Attach per-crtc pixmap or direct */
goto error;
}
- sna_crtc->flags |= CRTC_ON;
+ sna_crtc->public.flags |= CRTC_ON;
bo->active_scanout++;
DBG(("%s: marking handle=%d as active=%d (removing %d from scanout, active=%d)\n",
__FUNCTION__, bo->handle, bo->active_scanout,
@@ -3534,7 +3533,7 @@ sna_crtc_add(ScrnInfoPtr scrn, unsigned id)
if (sna_crtc == NULL)
return false;
- list_init(&sna_crtc->vblank_queue);
+ list_init(&sna_crtc->public.vblank_queue);
sna_crtc->id = id;
VG_CLEAR(get_pipe);
@@ -3547,7 +3546,7 @@ sna_crtc_add(ScrnInfoPtr scrn, unsigned id)
return false;
}
assert((unsigned)get_pipe.pipe < 256);
- sna_crtc->flags |= get_pipe.pipe << 8;
+ sna_crtc->public.flags |= get_pipe.pipe << 8;
if (is_zaphod(scrn) &&
(get_zaphod_crtcs(sna) & (1 << get_pipe.pipe)) == 0) {
More information about the xorg-commit
mailing list