39 lines
1.2 KiB
Diff
39 lines
1.2 KiB
Diff
From 18c470b399f9f29797c1604dc8e1f11782b3f89d Mon Sep 17 00:00:00 2001
|
|
From: Dave Airlie <airlied@redhat.com>
|
|
Date: Wed, 12 Dec 2012 14:14:39 +1000
|
|
Subject: [PATCH] xfree86/hotplug: cleanup properly if the screen fails to
|
|
initialise
|
|
|
|
Due to another bug, the modesetting/udl driver would fail to init properly
|
|
on hotplug, when it did the code didn't clean up properly, and on removing
|
|
the device the server could crash.
|
|
|
|
Found in F18 testing.
|
|
|
|
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
---
|
|
hw/xfree86/common/xf86platformBus.c | 7 ++++++-
|
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
|
|
index 0525e39..5866333 100644
|
|
--- a/hw/xfree86/common/xf86platformBus.c
|
|
+++ b/hw/xfree86/common/xf86platformBus.c
|
|
@@ -438,7 +438,12 @@ xf86platformAddDevice(int index)
|
|
}
|
|
|
|
scr_index = AddGPUScreen(xf86GPUScreens[i]->ScreenInit, 0, NULL);
|
|
-
|
|
+ if (scr_index == -1) {
|
|
+ xf86DeleteScreen(xf86GPUScreens[i]);
|
|
+ xf86UnclaimPlatformSlot(&xf86_platform_devices[index], NULL);
|
|
+ xf86NumGPUScreens = old_screens;
|
|
+ return -1;
|
|
+ }
|
|
dixSetPrivate(&xf86GPUScreens[i]->pScreen->devPrivates,
|
|
xf86ScreenKey, xf86GPUScreens[i]);
|
|
|
|
--
|
|
1.8.0.1
|
|
|