[PATCH xf86-video-amdgpu 18/19] Keep track of who owns the fd in AMDGPUEnt

Emil Velikov emil.l.velikov at gmail.com
Wed Apr 4 14:29:53 UTC 2018


From: Emil Velikov <emil.velikov at collabora.com>

Currently we're having xf86_platform_device pointer embedded, alongside
a bunch of ifdef compiler guards.

Swap that with a simple is_server_fd bool ;-)

Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
---
 src/amdgpu_kms.c   | 10 ++--------
 src/amdgpu_probe.c | 15 +++++++--------
 src/amdgpu_probe.h |  2 +-
 3 files changed, 10 insertions(+), 17 deletions(-)

diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index d27f71d..d625f56 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -1611,11 +1611,8 @@ static Bool amdgpu_set_drm_master(ScrnInfoPtr pScrn)
 	AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
 	int err;
 
-#ifdef XF86_PDEV_SERVER_FD
-	if (pAMDGPUEnt->platform_dev &&
-	    (pAMDGPUEnt->platform_dev->flags & XF86_PDEV_SERVER_FD))
+	if (pAMDGPUEnt->is_server_fd)
 		return TRUE;
-#endif
 
 	err = drmSetMaster(pAMDGPUEnt->fd);
 	if (err)
@@ -1628,11 +1625,8 @@ static void amdgpu_drop_drm_master(ScrnInfoPtr pScrn)
 {
 	AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(pScrn);
 
-#ifdef XF86_PDEV_SERVER_FD
-	if (pAMDGPUEnt->platform_dev &&
-	    (pAMDGPUEnt->platform_dev->flags & XF86_PDEV_SERVER_FD))
+	if (pAMDGPUEnt->is_server_fd)
 		return;
-#endif
 
 	drmDropMaster(pAMDGPUEnt->fd);
 }
diff --git a/src/amdgpu_probe.c b/src/amdgpu_probe.c
index e9afe42..5d4890b 100644
--- a/src/amdgpu_probe.c
+++ b/src/amdgpu_probe.c
@@ -87,7 +87,8 @@ static Bool amdgpu_device_matches(const drmDevicePtr device,
 
 static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn,
 				 struct pci_device *pci_dev,
-				 struct xf86_platform_device *platform_dev)
+				 struct xf86_platform_device *platform_dev,
+				 AMDGPUEntPtr pAMDGPUEnt)
 {
 	drmDevicePtr *devices;
 	struct pci_device *dev;
@@ -98,8 +99,10 @@ static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn,
 #ifdef ODEV_ATTRIB_FD
 		fd = xf86_get_platform_device_int_attrib(platform_dev,
 							 ODEV_ATTRIB_FD, -1);
-		if (fd != -1)
+		if (fd != -1) {
+			pAMDGPUEnt->is_server_fd = TRUE;
 			return fd;
+		}
 #endif
 
 #ifdef ODEV_ATTRIB_PATH
@@ -157,10 +160,7 @@ static int amdgpu_kernel_open_fd(ScrnInfoPtr pScrn,
 
 void amdgpu_kernel_close_fd(AMDGPUEntPtr pAMDGPUEnt)
 {
-#ifdef XF86_PDEV_SERVER_FD
-	if (!(pAMDGPUEnt->platform_dev &&
-	      pAMDGPUEnt->platform_dev->flags & XF86_PDEV_SERVER_FD))
-#endif
+	if (!pAMDGPUEnt->is_server_fd)
 		close(pAMDGPUEnt->fd);
 	pAMDGPUEnt->fd = -1;
 }
@@ -173,8 +173,7 @@ static Bool amdgpu_device_setup(ScrnInfoPtr pScrn,
 	uint32_t major_version;
 	uint32_t minor_version;
 
-	pAMDGPUEnt->platform_dev = platform_dev;
-	pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, pci_dev, platform_dev);
+	pAMDGPUEnt->fd = amdgpu_kernel_open_fd(pScrn, pci_dev, platform_dev, pAMDGPUEnt);
 	if (pAMDGPUEnt->fd < 0)
 		return FALSE;
 
diff --git a/src/amdgpu_probe.h b/src/amdgpu_probe.h
index 94f204f..81fe4a1 100644
--- a/src/amdgpu_probe.h
+++ b/src/amdgpu_probe.h
@@ -65,10 +65,10 @@ typedef struct {
 	char *master_node;
 	unsigned long fd_wakeup_registered;	/* server generation for which fd has been registered for wakeup handling */
 	int fd_wakeup_ref;
+	Bool is_server_fd;
 	unsigned int assigned_crtcs;
 	ScrnInfoPtr primary_scrn;
 	ScrnInfoPtr secondary_scrn;
-	struct xf86_platform_device *platform_dev;
 	char *render_node;
 } AMDGPUEntRec, *AMDGPUEntPtr;
 
-- 
2.16.0



More information about the amd-gfx mailing list