From 15517d8af382d181f87a4a06e8e84510da85b6aa Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Fri, 20 Feb 2015 13:41:57 -0700 Subject: [PATCH] icd: add support for per-instance DRM enumeration Add icd_instance to DRM enumeration functions, and use it for memory allocation or logging. --- icd/common/icd-enumerate-drm.c | 23 +++++++++++++---------- icd/common/icd-enumerate-drm.h | 8 ++++++-- icd/intel/instance.c | 4 ++-- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/icd/common/icd-enumerate-drm.c b/icd/common/icd-enumerate-drm.c index fbb00d7..d09f3b8 100644 --- a/icd/common/icd-enumerate-drm.c +++ b/icd/common/icd-enumerate-drm.c @@ -30,8 +30,7 @@ #include #include -#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; } } diff --git a/icd/common/icd-enumerate-drm.h b/icd/common/icd-enumerate-drm.h index 45883f8..71b20e8 100644 --- a/icd/common/icd-enumerate-drm.h +++ b/icd/common/icd-enumerate-drm.h @@ -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); diff --git a/icd/intel/instance.c b/icd/intel/instance.c index fce3bf9..6c6f061 100644 --- a/icd/intel/instance.c +++ b/icd/intel/instance.c @@ -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; -- 2.7.4