All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: intel-gfx@lists.freedesktop.org
Cc: peter.hutterer@redhat.com
Subject: [PATCH 2/2] uxa: Add support for server managed fds
Date: Tue, 18 Mar 2014 15:16:31 +0100	[thread overview]
Message-ID: <1395152191-19258-2-git-send-email-hdegoede@redhat.com> (raw)
In-Reply-To: <1395152191-19258-1-git-send-email-hdegoede@redhat.com>

I've just noticed that my previous patch-set for server managed fds misses
out on adding server managed fds support to uxa, because uxa does its own
/dev/dri/... device node management.

This commit switches uxa over to using intel_device.c device node management.
This is a nice cleanup and as an added bonus adds server managed fd support.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 src/intel_device.c     | 14 --------------
 src/intel_driver.h     |  2 --
 src/uxa/intel_driver.c | 44 +++-----------------------------------------
 3 files changed, 3 insertions(+), 57 deletions(-)

diff --git a/src/intel_device.c b/src/intel_device.c
index 2d31ec8..11118c2 100644
--- a/src/intel_device.c
+++ b/src/intel_device.c
@@ -442,20 +442,6 @@ int intel_put_master(ScrnInfoPtr scrn)
 	return ret;
 }
 
-void __intel_uxa_release_device(ScrnInfoPtr scrn)
-{
-	struct intel_device *dev = intel_device(scrn);
-	if (dev && dev->open_count == 0) {
-		intel_set_device(scrn, NULL);
-
-		drmClose(dev->fd);
-		if (dev->render_node != dev->master_node)
-			free(dev->render_node);
-		free(dev->master_node);
-		free(dev);
-	}
-}
-
 void intel_put_device(ScrnInfoPtr scrn)
 {
 	struct intel_device *dev = intel_device(scrn);
diff --git a/src/intel_driver.h b/src/intel_driver.h
index b2cb1b9..182a30e 100644
--- a/src/intel_driver.h
+++ b/src/intel_driver.h
@@ -132,8 +132,6 @@ int intel_get_master(ScrnInfoPtr scrn);
 int intel_put_master(ScrnInfoPtr scrn);
 void intel_put_device(ScrnInfoPtr scrn);
 
-void __intel_uxa_release_device(ScrnInfoPtr scrn);
-
 #define hosted() (0)
 
 #endif /* INTEL_DRIVER_H */
diff --git a/src/uxa/intel_driver.c b/src/uxa/intel_driver.c
index 7ea3b63..a0b0a48 100644
--- a/src/uxa/intel_driver.c
+++ b/src/uxa/intel_driver.c
@@ -248,38 +248,12 @@ static Bool intel_open_drm_master(ScrnInfoPtr scrn)
 {
 	intel_screen_private *intel = intel_get_screen_private(scrn);
 	struct pci_device *dev = intel->PciInfo;
-	drmSetVersion sv;
 	struct drm_i915_getparam gp;
 	int err, has_gem;
-	char busid[20];
 
-	snprintf(busid, sizeof(busid), "pci:%04x:%02x:%02x.%d",
-		 dev->domain, dev->bus, dev->dev, dev->func);
-
-	intel->drmSubFD = drmOpen(NULL, busid);
-	if (intel->drmSubFD == -1) {
-		xf86DrvMsg(scrn->scrnIndex, X_ERROR,
-			   "[drm] Failed to open DRM device for %s: %s\n",
-			   busid, strerror(errno));
+	intel->drmSubFD = intel_get_device(scrn);
+	if (intel->drmSubFD == -1)
 		return FALSE;
-	}
-
-	/* Check that what we opened was a master or a master-capable FD,
-	 * by setting the version of the interface we'll use to talk to it.
-	 * (see DRIOpenDRMMaster() in DRI1)
-	 */
-	sv.drm_di_major = 1;
-	sv.drm_di_minor = 1;
-	sv.drm_dd_major = -1;
-	sv.drm_dd_minor = -1;
-	err = drmSetInterfaceVersion(intel->drmSubFD, &sv);
-	if (err != 0) {
-		xf86DrvMsg(scrn->scrnIndex, X_ERROR,
-			   "[drm] failed to set drm interface version.\n");
-		drmClose(intel->drmSubFD);
-		intel->drmSubFD = -1;
-		return FALSE;
-	}
 
 	has_gem = FALSE;
 	gp.param = I915_PARAM_HAS_GEM;
@@ -289,22 +263,12 @@ static Bool intel_open_drm_master(ScrnInfoPtr scrn)
 	if (!has_gem) {
 		xf86DrvMsg(scrn->scrnIndex, X_ERROR,
 			   "[drm] Failed to detect GEM.  Kernel 2.6.28 required.\n");
-		drmClose(intel->drmSubFD);
-		intel->drmSubFD = -1;
 		return FALSE;
 	}
 
 	return TRUE;
 }
 
-static void intel_close_drm_master(intel_screen_private *intel)
-{
-	if (intel && intel->drmSubFD > 0) {
-		drmClose(intel->drmSubFD);
-		intel->drmSubFD = -1;
-	}
-}
-
 static int intel_init_bufmgr(intel_screen_private *intel)
 {
 	int batch_size;
@@ -1090,7 +1054,7 @@ static void I830FreeScreen(FREE_SCREEN_ARGS_DECL)
 
 	if (intel && !((uintptr_t)intel & 1)) {
 		intel_mode_fini(intel);
-		intel_close_drm_master(intel);
+		intel_put_device(scrn);
 		intel_bufmgr_fini(intel);
 
 		free(intel);
@@ -1293,8 +1257,6 @@ static Bool I830PMEvent(SCRN_ARG_TYPE arg, pmEvent event, Bool undo)
 
 Bool intel_init_scrn(ScrnInfoPtr scrn)
 {
-	__intel_uxa_release_device(scrn);
-
 	scrn->PreInit = I830PreInit;
 	scrn->ScreenInit = I830ScreenInit;
 	scrn->SwitchMode = I830SwitchMode;
-- 
1.9.0

  reply	other threads:[~2014-03-18 14:16 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-18 14:16 [PATCH 1/2] intel_device: Don't close the fd on probe failure if it is server managed Hans de Goede
2014-03-18 14:16 ` Hans de Goede [this message]
2014-03-18 15:16   ` [PATCH 2/2] uxa: Add support for server managed fds Chris Wilson
2014-03-18 16:54     ` Chris Wilson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1395152191-19258-2-git-send-email-hdegoede@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=peter.hutterer@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.