bring in jantorial changes from 2.5.51
authorKeith Whitwell <keith@tungstengraphics.com>
Thu, 12 Dec 2002 16:45:31 +0000 (16:45 +0000)
committerKeith Whitwell <keith@tungstengraphics.com>
Thu, 12 Dec 2002 16:45:31 +0000 (16:45 +0000)
linux-core/drm_proc.c
linux-core/i810_dma.c
linux/drm_proc.h
linux/i810_dma.c
linux/sis_ds.c

index 24e8556..d29db7b 100644 (file)
@@ -449,7 +449,8 @@ static int DRM(_vma_info)(char *buf, char **start, off_t offset, int request,
                for (i = vma->vm_start; i < vma->vm_end; i += PAGE_SIZE) {
                        pgd = pgd_offset(vma->vm_mm, i);
                        pmd = pmd_offset(pgd, i);
-                       pte = pte_offset(pmd, i);
+                       preempt_disable();
+                       pte = pte_offset_map(pmd, i);
                        if (pte_present(*pte)) {
                                address = __pa(pte_page(*pte))
                                        + (i & (PAGE_SIZE-1));
@@ -465,6 +466,8 @@ static int DRM(_vma_info)(char *buf, char **start, off_t offset, int request,
                        } else {
                                DRM_PROC_PRINT("      0x%08lx\n", i);
                        }
+                       pte_unmap(pte);
+                       preempt_enable();
                }
 #endif
        }
index 13f5f64..ffb7c70 100644 (file)
@@ -38,6 +38,7 @@
 #include "i810_drv.h"
 #include <linux/interrupt.h>   /* For task queue support */
 #include <linux/delay.h>
+#include <linux/pagemap.h>
 
 #ifdef DO_MUNMAP_4_ARGS
 #define DO_MUNMAP(m, a, l)     do_munmap(m, a, l, 1)
@@ -1184,7 +1185,8 @@ int i810_ov0_info(struct inode *inode, struct file *filp,
 
        data.offset = dev_priv->overlay_offset;
        data.physical = dev_priv->overlay_physical;
-       copy_to_user((drm_i810_overlay_t *)arg,&data,sizeof(data));
+       if (copy_to_user((drm_i810_overlay_t *)arg,&data,sizeof(data)))
+               return -EFAULT;
        return 0;
 }
 
index 24e8556..d29db7b 100644 (file)
@@ -449,7 +449,8 @@ static int DRM(_vma_info)(char *buf, char **start, off_t offset, int request,
                for (i = vma->vm_start; i < vma->vm_end; i += PAGE_SIZE) {
                        pgd = pgd_offset(vma->vm_mm, i);
                        pmd = pmd_offset(pgd, i);
-                       pte = pte_offset(pmd, i);
+                       preempt_disable();
+                       pte = pte_offset_map(pmd, i);
                        if (pte_present(*pte)) {
                                address = __pa(pte_page(*pte))
                                        + (i & (PAGE_SIZE-1));
@@ -465,6 +466,8 @@ static int DRM(_vma_info)(char *buf, char **start, off_t offset, int request,
                        } else {
                                DRM_PROC_PRINT("      0x%08lx\n", i);
                        }
+                       pte_unmap(pte);
+                       preempt_enable();
                }
 #endif
        }
index 13f5f64..ffb7c70 100644 (file)
@@ -38,6 +38,7 @@
 #include "i810_drv.h"
 #include <linux/interrupt.h>   /* For task queue support */
 #include <linux/delay.h>
+#include <linux/pagemap.h>
 
 #ifdef DO_MUNMAP_4_ARGS
 #define DO_MUNMAP(m, a, l)     do_munmap(m, a, l, 1)
@@ -1184,7 +1185,8 @@ int i810_ov0_info(struct inode *inode, struct file *filp,
 
        data.offset = dev_priv->overlay_offset;
        data.physical = dev_priv->overlay_physical;
-       copy_to_user((drm_i810_overlay_t *)arg,&data,sizeof(data));
+       if (copy_to_user((drm_i810_overlay_t *)arg,&data,sizeof(data)))
+               return -EFAULT;
        return 0;
 }
 
index 95880a4..f55cf6a 100644 (file)
@@ -50,15 +50,16 @@ set_t *setInit(void)
   set_t *set;
 
   set = (set_t *)MALLOC(sizeof(set_t));
-  for(i = 0; i < SET_SIZE; i++){
-    set->list[i].free_next = i+1;    
-    set->list[i].alloc_next = -1;
-  }    
-  set->list[SET_SIZE-1].free_next = -1;
-  set->free = 0;
-  set->alloc = -1;
-  set->trace = -1;
-  
+  if (set) {
+    for(i = 0; i < SET_SIZE; i++){
+      set->list[i].free_next = i+1;    
+      set->list[i].alloc_next = -1;
+    }    
+    set->list[SET_SIZE-1].free_next = -1;
+    set->free = 0;
+    set->alloc = -1;
+    set->trace = -1;
+  }  
   return set;
 }
 
@@ -172,7 +173,8 @@ static void *calloc(size_t nmemb, size_t size)
 {
   void *addr;
   addr = kmalloc(nmemb*size, GFP_KERNEL);
-  memset(addr, 0, nmemb*size);
+  if (addr)
+    memset(addr, 0, nmemb*size);
   return addr;
 }
 #define free(n) kfree(n)