xserver: Branch 'master' - 3 commits
Keith Packard
keithp at kemper.freedesktop.org
Mon Dec 15 11:47:04 PST 2008
hw/xfree86/modes/xf86Crtc.c | 12 +-----------
hw/xfree86/modes/xf86Crtc.h | 7 +++++++
hw/xfree86/modes/xf86Rotate.c | 10 +++-------
hw/xfree86/os-support/shared/sigio.c | 2 +-
4 files changed, 12 insertions(+), 19 deletions(-)
New commits:
commit fde2f961035609cfff8761ef1e0f23e6a9761be2
Author: Keith Packard <keithp at keithp.com>
Date: Mon Dec 15 11:39:24 2008 -0800
Use scrn->virtualX/virtualY in xf86CrtcFitsScreen. Fix bug 19017.
pScreen->width/height are not initialized when doing initial mode setting,
which makes this function incorrectly fail. Using scrn->virtualX should work
in all cases though.
Bug 19017 reports a crash in xf86CrtcSetModeTransform when doing a modeset
for output probing, long before the screen array is initialized; that was
caused by a work-around to set pScreen->width/height so that xf86CrtcFitsScreen
could find the right values.
Signed-off-by: Keith Packard <keithp at keithp.com>
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 4f8cbb5..ef2ecb7 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -244,8 +244,6 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
RRTransformPtr transform, int x, int y)
{
ScrnInfoPtr scrn = crtc->scrn;
- /* During ScreenInit() scrn->pScreen is still NULL */
- ScreenPtr pScreen = screenInfo.screens[scrn->scrnIndex];
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
int i;
Bool ret = FALSE;
@@ -295,15 +293,6 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
} else
crtc->transformPresent = FALSE;
- /* We may hit this path during PreInit during load-detcect, at
- * which point no pScreens exist yet, so avoid this step. */
- if (pScreen) {
- /* xf86CrtcFitsScreen() relies on these values being correct. */
- /* This should ensure the values are always set at modeset time. */
- pScreen->width = scrn->virtualX;
- pScreen->height = scrn->virtualY;
- }
-
/* Shift offsets that move us out of virtual size */
if (x + mode->HDisplay > xf86_config->maxWidth ||
y + mode->VDisplay > xf86_config->maxHeight)
diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c
index 793b1a9..348b793 100644
--- a/hw/xfree86/modes/xf86Rotate.c
+++ b/hw/xfree86/modes/xf86Rotate.c
@@ -364,12 +364,8 @@ static Bool
xf86CrtcFitsScreen (xf86CrtcPtr crtc, struct pict_f_transform *crtc_to_fb)
{
ScrnInfoPtr pScrn = crtc->scrn;
- /* if this is called during ScreenInit() we don't have pScrn->pScreen yet */
- ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex];
BoxRec b;
- if (!pScreen)
- return TRUE;
b.x1 = 0;
b.y1 = 0;
b.x2 = crtc->mode.HDisplay;
@@ -383,8 +379,8 @@ xf86CrtcFitsScreen (xf86CrtcPtr crtc, struct pict_f_transform *crtc_to_fb)
b.y2 += crtc->y;
}
- return (0 <= b.x1 && b.x2 <= pScreen->width &&
- 0 <= b.y1 && b.y2 <= pScreen->height);
+ return (0 <= b.x1 && b.x2 <= pScrn->virtualX &&
+ 0 <= b.y1 && b.y2 <= pScrn->virtualY);
}
Bool
commit 29a5b0596b396d3e4a8a014cacd3e3ef77467ab7
Author: Keith Packard <keithp at keithp.com>
Date: Mon Dec 15 11:38:00 2008 -0800
When disabling SIGIO tracking, use SIG_IGN instead of SIG_DFL.
This avoids a race condition for drivers which mis-order the fd close and
signal disable.
Signed-off-by: Keith Packard <keithp at keithp.com>
diff --git a/hw/xfree86/os-support/shared/sigio.c b/hw/xfree86/os-support/shared/sigio.c
index ef85e3b..54c02cc 100644
--- a/hw/xfree86/os-support/shared/sigio.c
+++ b/hw/xfree86/os-support/shared/sigio.c
@@ -229,7 +229,7 @@ xf86RemoveSIGIOHandler(int fd)
sigemptyset(&sa.sa_mask);
sigaddset(&sa.sa_mask, SIGIO);
sa.sa_flags = 0;
- sa.sa_handler = SIG_DFL;
+ sa.sa_handler = SIG_IGN;
sigaction(SIGIO, &sa, &osa);
}
}
commit 1ba4cbb15919759aadd71960c5c057af9ba94fe3
Author: Keith Packard <keithp at keithp.com>
Date: Mon Dec 15 11:36:43 2008 -0800
Clean up rotation data when crtc is turned off
The shadow frame buffer and other data used for rotation need to be freed
when the crtc is disabled, not just when rotation is disabled.
Signed-off-by: Keith Packard <keithp at keithp.com>
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index d580ada..4f8cbb5 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -2750,6 +2750,7 @@ xf86DisableUnusedFunctions(ScrnInfoPtr pScrn)
{
crtc->funcs->dpms(crtc, DPMSModeOff);
memset(&crtc->mode, 0, sizeof(crtc->mode));
+ xf86RotateDestroy(crtc);
}
}
if (pScrn->pScreen)
diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
index fcf022b..e44996f 100644
--- a/hw/xfree86/modes/xf86Crtc.h
+++ b/hw/xfree86/modes/xf86Crtc.h
@@ -708,6 +708,13 @@ extern _X_EXPORT Bool
xf86CrtcRotate (xf86CrtcPtr crtc);
/*
+ * Clean up any rotation data, used when a crtc is turned off
+ * as well as when rotation is disabled.
+ */
+void
+xf86RotateDestroy (xf86CrtcPtr crtc);
+
+/*
* free shadow memory allocated for all crtcs
*/
extern _X_EXPORT void
diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c
index 9d7b373..793b1a9 100644
--- a/hw/xfree86/modes/xf86Rotate.c
+++ b/hw/xfree86/modes/xf86Rotate.c
@@ -294,7 +294,7 @@ xf86RotateBlockHandler(int screenNum, pointer blockData,
}
}
-static void
+void
xf86RotateDestroy (xf86CrtcPtr crtc)
{
ScrnInfoPtr pScrn = crtc->scrn;
More information about the xorg-commit
mailing list