Merge branch 'drm-next-3.11' of git://people.freedesktop.org/~agd5f/linux into drm...
authorDave Airlie <airlied@redhat.com>
Thu, 4 Jul 2013 00:44:06 +0000 (10:44 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 4 Jul 2013 00:44:06 +0000 (10:44 +1000)
A few more DPM fixes.

* 'drm-next-3.11' of git://people.freedesktop.org/~agd5f/linux:
  drm/radeon/sumo: implement support for disable_gfx_power_gating_in_uvd flag
  drm/radeon/tn: disable PG when changing UVD clocks
  drm/radeon/sumo: disable PG when changing UVD clocks
  drm/radeon/aruba: disable additional rlc features
  drm/radeon: fix endian bug in radeon_atom_get_mclk_range_table()
  drm/radeon/dpm: fix compilation with certain versions of gcc
  drm/radeon/dpm: clarify debugfs warning

drivers/gpu/drm/drm_gem.c
drivers/gpu/drm/drm_mm.c
drivers/gpu/drm/drm_prime.c
drivers/gpu/drm/ttm/ttm_bo.c
drivers/gpu/drm/ttm/ttm_bo_manager.c
include/drm/drm_mm.h

index bcedaf7b73b9a57cf53094396a9d1718a6abb2b9..603f256152efed25852072a49f32b11c7ddf16cd 100644 (file)
@@ -108,12 +108,8 @@ drm_gem_init(struct drm_device *dev)
                return -ENOMEM;
        }
 
-       if (drm_mm_init(&mm->offset_manager, DRM_FILE_PAGE_OFFSET_START,
-                       DRM_FILE_PAGE_OFFSET_SIZE)) {
-               drm_ht_remove(&mm->offset_hash);
-               kfree(mm);
-               return -ENOMEM;
-       }
+       drm_mm_init(&mm->offset_manager, DRM_FILE_PAGE_OFFSET_START,
+                   DRM_FILE_PAGE_OFFSET_SIZE);
 
        return 0;
 }
index 07cf99cc886283aedf9feee690d71ee6fbe2fb77..543b9b3171d32310de903668bc69f30901b12e91 100644 (file)
@@ -669,7 +669,7 @@ int drm_mm_clean(struct drm_mm * mm)
 }
 EXPORT_SYMBOL(drm_mm_clean);
 
-int drm_mm_init(struct drm_mm * mm, unsigned long start, unsigned long size)
+void drm_mm_init(struct drm_mm * mm, unsigned long start, unsigned long size)
 {
        INIT_LIST_HEAD(&mm->hole_stack);
        INIT_LIST_HEAD(&mm->unused_nodes);
@@ -690,8 +690,6 @@ int drm_mm_init(struct drm_mm * mm, unsigned long start, unsigned long size)
        list_add_tail(&mm->head_node.hole_stack, &mm->hole_stack);
 
        mm->color_adjust = NULL;
-
-       return 0;
 }
 EXPORT_SYMBOL(drm_mm_init);
 
@@ -699,8 +697,8 @@ void drm_mm_takedown(struct drm_mm * mm)
 {
        struct drm_mm_node *entry, *next;
 
-       if (!list_empty(&mm->head_node.node_list)) {
-               DRM_ERROR("Memory manager not clean. Delaying takedown\n");
+       if (WARN(!list_empty(&mm->head_node.node_list),
+                "Memory manager not clean. Delaying takedown\n")) {
                return;
        }
 
@@ -716,36 +714,37 @@ void drm_mm_takedown(struct drm_mm * mm)
 }
 EXPORT_SYMBOL(drm_mm_takedown);
 
-void drm_mm_debug_table(struct drm_mm *mm, const char *prefix)
+static unsigned long drm_mm_debug_hole(struct drm_mm_node *entry,
+                                      const char *prefix)
 {
-       struct drm_mm_node *entry;
-       unsigned long total_used = 0, total_free = 0, total = 0;
        unsigned long hole_start, hole_end, hole_size;
 
-       hole_start = drm_mm_hole_node_start(&mm->head_node);
-       hole_end = drm_mm_hole_node_end(&mm->head_node);
-       hole_size = hole_end - hole_start;
-       if (hole_size)
+       if (entry->hole_follows) {
+               hole_start = drm_mm_hole_node_start(entry);
+               hole_end = drm_mm_hole_node_end(entry);
+               hole_size = hole_end - hole_start;
                printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8lu: free\n",
                        prefix, hole_start, hole_end,
                        hole_size);
-       total_free += hole_size;
+               return hole_size;
+       }
+
+       return 0;
+}
+
+void drm_mm_debug_table(struct drm_mm *mm, const char *prefix)
+{
+       struct drm_mm_node *entry;
+       unsigned long total_used = 0, total_free = 0, total = 0;
+
+       total_free += drm_mm_debug_hole(&mm->head_node, prefix);
 
        drm_mm_for_each_node(entry, mm) {
                printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8lu: used\n",
                        prefix, entry->start, entry->start + entry->size,
                        entry->size);
                total_used += entry->size;
-
-               if (entry->hole_follows) {
-                       hole_start = drm_mm_hole_node_start(entry);
-                       hole_end = drm_mm_hole_node_end(entry);
-                       hole_size = hole_end - hole_start;
-                       printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8lu: free\n",
-                               prefix, hole_start, hole_end,
-                               hole_size);
-                       total_free += hole_size;
-               }
+               total_free += drm_mm_debug_hole(entry, prefix);
        }
        total = total_free + total_used;
 
index 52709f2171fb7d71f1964dcb62c2adeed6d2d62d..1e0de41f085c2419863ee5c462d6cbf54ce77c8a 100644 (file)
@@ -347,10 +347,13 @@ int drm_gem_prime_handle_to_fd(struct drm_device *dev,
 out_have_obj:
        get_dma_buf(dmabuf);
        ret = dma_buf_fd(dmabuf, flags);
-       if (ret < 0)
+       if (ret < 0) {
                dma_buf_put(dmabuf);
-       else
+       } else {
                *prime_fd = ret;
+               ret = 0;
+       }
+
        goto out;
 
 fail_rm_handle:
index 6e6975c8596f39245d6158bd70d265d08cfe5e45..cb9dd674670c97f188bd0fa1eb765c97d4f62f8e 100644 (file)
@@ -1455,9 +1455,7 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
                goto out_no_sys;
 
        bdev->addr_space_rb = RB_ROOT;
-       ret = drm_mm_init(&bdev->addr_space_mm, file_page_offset, 0x10000000);
-       if (unlikely(ret != 0))
-               goto out_no_addr_mm;
+       drm_mm_init(&bdev->addr_space_mm, file_page_offset, 0x10000000);
 
        INIT_DELAYED_WORK(&bdev->wq, ttm_bo_delayed_workqueue);
        INIT_LIST_HEAD(&bdev->ddestroy);
@@ -1471,8 +1469,6 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
        mutex_unlock(&glob->device_list_mutex);
 
        return 0;
-out_no_addr_mm:
-       ttm_bo_clean_mm(bdev, 0);
 out_no_sys:
        return ret;
 }
index 9212494e9072076aa0582033a08520015f662a86..e4367f91472a4d3e25341ad4fa3e2121724a2c99 100644 (file)
@@ -103,18 +103,12 @@ static int ttm_bo_man_init(struct ttm_mem_type_manager *man,
                           unsigned long p_size)
 {
        struct ttm_range_manager *rman;
-       int ret;
 
        rman = kzalloc(sizeof(*rman), GFP_KERNEL);
        if (!rman)
                return -ENOMEM;
 
-       ret = drm_mm_init(&rman->mm, 0, p_size);
-       if (ret) {
-               kfree(rman);
-               return ret;
-       }
-
+       drm_mm_init(&rman->mm, 0, p_size);
        spin_lock_init(&rman->lock);
        man->priv = rman;
        return 0;
index 88591ef8fa24f0cf8653a278d6bed086279691f0..de9242542f05e5279e8aa1a662d31deb9c1d33ac 100644 (file)
@@ -275,9 +275,9 @@ static inline  struct drm_mm_node *drm_mm_search_free_in_range_color(
        return drm_mm_search_free_in_range_generic(mm, size, alignment, color,
                                                   start, end, best_match);
 }
-extern int drm_mm_init(struct drm_mm *mm,
-                      unsigned long start,
-                      unsigned long size);
+extern void drm_mm_init(struct drm_mm *mm,
+                       unsigned long start,
+                       unsigned long size);
 extern void drm_mm_takedown(struct drm_mm *mm);
 extern int drm_mm_clean(struct drm_mm *mm);
 extern int drm_mm_pre_get(struct drm_mm *mm);
This page took 0.053382 seconds and 5 git commands to generate.