OSDN Git Service

Refactor xgi_(fb|pcie)_free_all into xgi_free_all.
authorIan Romanick <idr@us.ibm.com>
Mon, 6 Aug 2007 23:35:07 +0000 (16:35 -0700)
committerIan Romanick <idr@us.ibm.com>
Mon, 6 Aug 2007 23:35:07 +0000 (16:35 -0700)
linux-core/xgi_drv.c
linux-core/xgi_drv.h
linux-core/xgi_fb.c
linux-core/xgi_pcie.c

index e98fd60..f6e7b55 100644 (file)
@@ -284,8 +284,10 @@ void xgi_driver_preclose(struct drm_device * dev, struct drm_file * filp)
 {
        struct xgi_info * info = dev->dev_private;
 
-       xgi_pcie_free_all(info, filp);
-       xgi_fb_free_all(info, filp);
+       mutex_lock(&info->dev->struct_mutex);
+       xgi_free_all(info, &info->pcie_heap, filp);
+       xgi_free_all(info, &info->fb_heap, filp);
+       mutex_unlock(&info->dev->struct_mutex);
 }
 
 
index 384381c..79276b7 100644 (file)
@@ -38,7 +38,7 @@
 
 #define DRIVER_MAJOR           0
 #define DRIVER_MINOR           10
-#define DRIVER_PATCHLEVEL      3
+#define DRIVER_PATCHLEVEL      4
 
 #include "xgi_cmdlist.h"
 #include "xgi_drm.h"
@@ -111,8 +111,8 @@ extern int xgi_pcie_free(struct xgi_info * info, unsigned long offset,
 
 extern void *xgi_find_pcie_virt(struct xgi_info * info, u32 address);
 
-extern void xgi_pcie_free_all(struct xgi_info *, struct drm_file *);
-extern void xgi_fb_free_all(struct xgi_info *, struct drm_file *);
+extern void xgi_free_all(struct xgi_info *, struct xgi_mem_heap *,
+       struct drm_file *);
 
 extern int xgi_fb_alloc_ioctl(struct drm_device * dev, void * data,
        struct drm_file * filp);
index 373c45d..f8341a6 100644 (file)
@@ -318,29 +318,27 @@ int xgi_fb_heap_init(struct xgi_info * info)
 /**
  * Free all blocks associated with a particular file handle.
  */
-void xgi_fb_free_all(struct xgi_info * info, struct drm_file * filp)
+void xgi_free_all(struct xgi_info * info, struct xgi_mem_heap * heap,
+                 struct drm_file * filp)
 {
-       if (!info->fb_heap.initialized) {
+       if (!heap->initialized) {
                return;
        }
 
-       mutex_lock(&info->dev->struct_mutex);
 
        do {
                struct xgi_mem_block *block;
 
-               list_for_each_entry(block, &info->fb_heap.used_list, list) {
+               list_for_each_entry(block, &heap->used_list, list) {
                        if (block->filp == filp) {
                                break;
                        }
                }
 
-               if (&block->list == &info->fb_heap.used_list) {
+               if (&block->list == &heap->used_list) {
                        break;
                }
 
-               (void) xgi_mem_free(&info->fb_heap, block->offset, filp);
+               (void) xgi_mem_free(heap, block->offset, filp);
        } while(1);
-
-       mutex_unlock(&info->dev->struct_mutex);
 }
index 883fbe7..b2edf3b 100644 (file)
@@ -152,37 +152,6 @@ int xgi_pcie_alloc_ioctl(struct drm_device * dev, void * data,
 }
 
 
-/**
- * Free all blocks associated with a particular file handle.
- */
-void xgi_pcie_free_all(struct xgi_info * info, struct drm_file * filp)
-{
-       if (!info->pcie_heap.initialized) {
-               return;
-       }
-
-       mutex_lock(&info->dev->struct_mutex);
-
-       do {
-               struct xgi_mem_block *block;
-
-               list_for_each_entry(block, &info->pcie_heap.used_list, list) {
-                       if (block->filp == filp) {
-                               break;
-                       }
-               }
-
-               if (&block->list == &info->pcie_heap.used_list) {
-                       break;
-               }
-
-               (void) xgi_mem_free(&info->pcie_heap, block->offset, filp);
-       } while(1);
-
-       mutex_unlock(&info->dev->struct_mutex);
-}
-
-
 int xgi_pcie_free(struct xgi_info * info, unsigned long offset, 
                  struct drm_file * filp)
 {