icd: add support for per-instance DRM enumeration
authorChia-I Wu <olv@lunarg.com>
Fri, 20 Feb 2015 20:41:57 +0000 (13:41 -0700)
committerChia-I Wu <olv@lunarg.com>
Thu, 5 Mar 2015 21:20:31 +0000 (14:20 -0700)
Add icd_instance to DRM enumeration functions, and use it for memory
allocation or logging.

icd/common/icd-enumerate-drm.c
icd/common/icd-enumerate-drm.h
icd/intel/instance.c

index fbb00d7..d09f3b8 100644 (file)
@@ -30,8 +30,7 @@
 #include <string.h>
 #include <libudev.h>
 
-#include "icd-alloc.h"
-#include "icd-log.h"
+#include "icd-instance.h"
 #include "icd-utils.h"
 #include "icd-enumerate-drm.h"
 
@@ -78,7 +77,8 @@ static struct icd_drm_device *find_dev(struct icd_drm_device *devices,
     return dev;
 }
 
-static struct icd_drm_device *probe_syspath(struct icd_drm_device *devices,
+static struct icd_drm_device *probe_syspath(const struct icd_instance *instance,
+                                            struct icd_drm_device *devices,
                                             struct udev *udev, const char *syspath,
                                             int vendor_id_match)
 {
@@ -124,7 +124,8 @@ static struct icd_drm_device *probe_syspath(struct icd_drm_device *devices,
 
         return devices;
     } else {
-        dev = icd_alloc(sizeof(*dev), 0, XGL_SYSTEM_ALLOC_INTERNAL_TEMP);
+        dev = icd_instance_alloc(instance, sizeof(*dev), 0,
+                XGL_SYSTEM_ALLOC_INTERNAL_TEMP);
         if (!dev)
             return devices;
 
@@ -140,7 +141,8 @@ static struct icd_drm_device *probe_syspath(struct icd_drm_device *devices,
     }
 }
 
-struct icd_drm_device *icd_drm_enumerate(int vendor_id)
+struct icd_drm_device *icd_drm_enumerate(const struct icd_instance *instance,
+                                         int vendor_id)
 {
     struct icd_drm_device *devices = NULL;
     struct udev *udev;
@@ -149,7 +151,7 @@ struct icd_drm_device *icd_drm_enumerate(int vendor_id)
 
     udev = udev_new();
     if (udev == NULL) {
-        icd_log(XGL_DBG_MSG_ERROR, XGL_VALIDATION_LEVEL_0,
+        icd_instance_log(instance, XGL_DBG_MSG_ERROR, XGL_VALIDATION_LEVEL_0,
                 XGL_NULL_HANDLE, 0, 0, "failed to initialize udev context");
 
         return NULL;
@@ -157,7 +159,7 @@ struct icd_drm_device *icd_drm_enumerate(int vendor_id)
 
     e = udev_enumerate_new(udev);
     if (e == NULL) {
-        icd_log(XGL_DBG_MSG_ERROR, XGL_VALIDATION_LEVEL_0,
+        icd_instance_log(instance, XGL_DBG_MSG_ERROR, XGL_VALIDATION_LEVEL_0,
                 XGL_NULL_HANDLE, 0, 0,
                 "failed to initialize udev enumerate context");
         udev_unref(udev);
@@ -171,7 +173,7 @@ struct icd_drm_device *icd_drm_enumerate(int vendor_id)
     udev_enumerate_scan_devices(e);
 
     udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) {
-        devices = probe_syspath(devices, udev,
+        devices = probe_syspath(instance, devices, udev,
                 udev_list_entry_get_name(entry), vendor_id);
     }
 
@@ -180,7 +182,8 @@ struct icd_drm_device *icd_drm_enumerate(int vendor_id)
     return devices;
 }
 
-void icd_drm_release(struct icd_drm_device *devices)
+void icd_drm_release(const struct icd_instance *instance,
+                     struct icd_drm_device *devices)
 {
     struct icd_drm_device *dev = devices;
 
@@ -191,7 +194,7 @@ void icd_drm_release(struct icd_drm_device *devices)
         for (i = 0; i < ARRAY_SIZE(dev->minors); i++)
             udev_device_unref((struct udev_device *) dev->minors[i]);
 
-        icd_free(dev);
+        icd_instance_free(instance, dev);
         dev = next;
     }
 }
index 45883f8..71b20e8 100644 (file)
@@ -45,8 +45,12 @@ struct icd_drm_device {
     struct icd_drm_device *next;
 };
 
-struct icd_drm_device *icd_drm_enumerate(int vendor_id);
-void icd_drm_release(struct icd_drm_device *devices);
+struct icd_instance;
+
+struct icd_drm_device *icd_drm_enumerate(const struct icd_instance *instance,
+                                         int vendor_id);
+void icd_drm_release(const struct icd_instance *instance,
+                     struct icd_drm_device *devices);
 
 const char *icd_drm_get_devnode(struct icd_drm_device *dev,
                                 enum icd_drm_minor_type minor);
index fce3bf9..6c6f061 100644 (file)
@@ -181,7 +181,7 @@ ICD_EXPORT XGL_RESULT XGLAPI xglEnumerateGpus(
         return XGL_SUCCESS;
     }
 
-    devices = icd_drm_enumerate(0x8086);
+    devices = icd_drm_enumerate(instance->icd, 0x8086);
 
     count = 0;
     dev = devices;
@@ -210,7 +210,7 @@ ICD_EXPORT XGL_RESULT XGLAPI xglEnumerateGpus(
         dev = dev->next;
     }
 
-    icd_drm_release(devices);
+    icd_drm_release(instance->icd, devices);
 
     *pGpuCount = count;