drm: Add _DRM_DRIVER map flag.
authorRobert Noland <rnoland@2hip.net>
Sat, 1 Dec 2007 07:40:13 +0000 (02:40 -0500)
committerRobert Noland <rnoland@2hip.net>
Sat, 1 Dec 2007 07:40:13 +0000 (02:40 -0500)
This flag indicates that the driver is responsible for the map.

bsd-core/drm_drv.c
linux-core/drm_drv.c
shared-core/drm.h
shared-core/i915_dma.c

index 2e97610..96dc4d3 100644 (file)
@@ -484,10 +484,10 @@ static int drm_lastclose(drm_device_t *dev)
        }
 
        TAILQ_FOREACH_SAFE(map, &dev->maplist, link, mapsave) {
-               drm_rmmap(dev, map);
+               if (!(map->flags & _DRM_DRIVER))
+                       drm_rmmap(dev, map);
        }
 
-
        drm_dma_takedown(dev);
        if ( dev->lock.hw_lock ) {
                dev->lock.hw_lock = NULL; /* SHM removed */
index 9d03434..869748f 100644 (file)
@@ -246,8 +246,10 @@ int drm_lastclose(struct drm_device * dev)
        }
 
        list_for_each_entry_safe(r_list, list_t, &dev->maplist, head) {
-               drm_rmmap_locked(dev, r_list->map);
-               r_list = NULL;
+               if (!(r_list->map->flags & _DRM_DRIVER)) {
+                       drm_rmmap_locked(dev, r_list->map);
+                       r_list = NULL;
+               }
        }
 
        if (drm_core_check_feature(dev, DRIVER_DMA_QUEUE) && dev->queuelist) {
index 636c121..ec07b89 100644 (file)
@@ -249,7 +249,8 @@ enum drm_map_flags {
        _DRM_KERNEL = 0x08,          /**< kernel requires access */
        _DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
        _DRM_CONTAINS_LOCK = 0x20,   /**< SHM page that contains lock */
-       _DRM_REMOVABLE = 0x40        /**< Removable mapping */
+       _DRM_REMOVABLE = 0x40,       /**< Removable mapping */
+       _DRM_DRIVER = 0x80           /**< Managed by driver */
 };
 
 struct drm_ctx_priv_map {
index f14b9b0..6742440 100644 (file)
@@ -1320,14 +1320,15 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
        base = drm_get_resource_start(dev, mmio_bar);
        size = drm_get_resource_len(dev, mmio_bar);
 
-       ret = drm_addmap(dev, base, size, _DRM_REGISTERS, _DRM_KERNEL,
-                        &dev_priv->mmio_map);
+       ret = drm_addmap(dev, base, size, _DRM_REGISTERS,
+               _DRM_KERNEL | _DRM_DRIVER, &dev_priv->mmio_map);
 
 #ifdef __linux__
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
        intel_init_chipset_flush_compat(dev);
 #endif
 #endif
+
        return ret;
 }