7084842c1c
- Fix (hopefully) various crashes in FlushAllOutput() (rhbz#1382444) - Fix Xwayland crashing in glamor on non glamor capable hw (rhbz#1390018)
90 lines
2.9 KiB
Diff
90 lines
2.9 KiB
Diff
From 74bc0fff3a6ca233e56b3fb2971bca97b5a4f8b5 Mon Sep 17 00:00:00 2001
|
|
From: Hans de Goede <hdegoede@redhat.com>
|
|
Date: Fri, 30 Sep 2016 11:59:04 +0200
|
|
Subject: [PATCH xserver v2 6/7] xfree86: Make adding unclaimed devices as GPU
|
|
devices a separate step
|
|
|
|
This is primarily a preparation patch for fixing the xserver exiting with
|
|
a "no screens found" error even though there are supported video cards,
|
|
due to the server not recognizing any card as the primary card.
|
|
|
|
This also fixes the (mostly theoretical) case of a platformBus capable
|
|
driver adding a device as GPUscreen before a driver which only supports
|
|
the old PCI probe method gets a chance to claim it as a normal screen.
|
|
|
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
|
---
|
|
hw/xfree86/common/xf86Bus.c | 4 ++++
|
|
hw/xfree86/common/xf86platformBus.c | 15 +++++++++++++++
|
|
hw/xfree86/common/xf86platformBus.h | 6 ++++++
|
|
3 files changed, 25 insertions(+)
|
|
|
|
diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
|
|
index 27c6b1b..a3a9898 100644
|
|
--- a/hw/xfree86/common/xf86Bus.c
|
|
+++ b/hw/xfree86/common/xf86Bus.c
|
|
@@ -125,6 +125,10 @@ xf86BusConfig(void)
|
|
xf86CallDriverProbe(xf86DriverList[i], FALSE);
|
|
}
|
|
|
|
+ for (i = 0; i < xf86NumDrivers; i++) {
|
|
+ xf86platformAddGPUDevices(xf86DriverList[i]);
|
|
+ }
|
|
+
|
|
/* If nothing was detected, return now */
|
|
if (xf86NumScreens == 0) {
|
|
xf86Msg(X_ERROR, "No devices detected.\n");
|
|
diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
|
|
index 39fb1dd..8dd0d5d 100644
|
|
--- a/hw/xfree86/common/xf86platformBus.c
|
|
+++ b/hw/xfree86/common/xf86platformBus.c
|
|
@@ -475,6 +475,21 @@ xf86platformProbeDev(DriverPtr drvp)
|
|
isGPUDevice(devList[i]) ? PLATFORM_PROBE_GPU_SCREEN : 0);
|
|
}
|
|
|
|
+ return foundScreen;
|
|
+}
|
|
+
|
|
+int
|
|
+xf86platformAddGPUDevices(DriverPtr drvp)
|
|
+{
|
|
+ Bool foundScreen = FALSE;
|
|
+ GDevPtr *devList;
|
|
+ int j;
|
|
+
|
|
+ if (!drvp->platformProbe)
|
|
+ return FALSE;
|
|
+
|
|
+ xf86MatchDevice(drvp->driverName, &devList);
|
|
+
|
|
/* if autoaddgpu devices is enabled then go find any unclaimed platform
|
|
* devices and add them as GPU screens */
|
|
if (xf86Info.autoAddGPU) {
|
|
diff --git a/hw/xfree86/common/xf86platformBus.h b/hw/xfree86/common/xf86platformBus.h
|
|
index a7335b9..0f5c0ef 100644
|
|
--- a/hw/xfree86/common/xf86platformBus.h
|
|
+++ b/hw/xfree86/common/xf86platformBus.h
|
|
@@ -41,6 +41,7 @@ struct xf86_platform_device {
|
|
#ifdef XSERVER_PLATFORM_BUS
|
|
int xf86platformProbe(void);
|
|
int xf86platformProbeDev(DriverPtr drvp);
|
|
+int xf86platformAddGPUDevices(DriverPtr drvp);
|
|
|
|
extern int xf86_num_platform_devices;
|
|
extern struct xf86_platform_device *xf86_platform_devices;
|
|
@@ -156,6 +157,11 @@ xf86PlatformMatchDriver(char *matches[], int nmatches);
|
|
|
|
extern void xf86platformVTProbe(void);
|
|
extern void xf86platformPrimary(void);
|
|
+
|
|
+#else
|
|
+
|
|
+static inline int xf86platformAddGPUDevices(DriverPtr drvp) { return FALSE; }
|
|
+
|
|
#endif
|
|
|
|
#endif
|
|
--
|
|
2.9.3
|
|
|