This seems to follow what was done to the in kernel DRM code, and other
bits of kernel code, however I have not tested it yet.

Zephaniah E. Hull.

-- 
 PGP EA5198D1-Zephaniah E. Hull <[EMAIL PROTECTED]>-GPG E65A7801
    Keys available at http://whitestar.soark.net/~warp/public_keys.
           CCs of replies from mailing lists are encouraged.

I am an "expert".  Fear me, for I will wreak untold damage upon anything
I can get my grubby hands on.
  -- Matt McLeod on ASR.
diff -u xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel.orig/drm_bufs.h 
xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/drm_bufsh
--- xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel.orig/drm_bufs.h  Sun 
Mar 18 18:54:41 2001
+++ xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/drm_bufs.h       Mon 
+Mar 26 06:58:32 2001
@@ -768,18 +768,18 @@
                                goto done;
                        }
 
-                       down( &current->mm->mmap_sem );
+                       down_write( &current->mm->mmap_sem );
                        virtual = do_mmap( filp, 0, map->size,
                                           PROT_READ | PROT_WRITE,
                                           MAP_SHARED,
                                           (unsigned long)map->offset );
-                       up( &current->mm->mmap_sem );
+                       up_write( &current->mm->mmap_sem );
                } else {
-                       down( &current->mm->mmap_sem );
+                       down_write( &current->mm->mmap_sem );
                        virtual = do_mmap( filp, 0, dma->byte_count,
                                           PROT_READ | PROT_WRITE,
                                           MAP_SHARED, 0 );
-                       up( &current->mm->mmap_sem );
+                       up_write( &current->mm->mmap_sem );
                }
                if ( virtual > -1024UL ) {
                        /* Real error */
diff -u xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel.orig/i810_dma.c 
xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/i810_dmac
--- xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel.orig/i810_dma.c  Wed 
Mar 14 17:22:49 2001
+++ xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/i810_dma.c       Mon 
+Mar 26 06:59:21 2001
@@ -182,7 +182,7 @@
        if(buf_priv->currently_mapped == I810_BUF_MAPPED) return -EINVAL;
 
        if(VM_DONTCOPY != 0) {
-               down(&current->mm->mmap_sem);
+               down_write(&current->mm->mmap_sem);
                old_fops = filp->f_op;
                filp->f_op = &i810_buffer_fops;
                dev_priv->mmap_buffer = buf;
@@ -198,7 +198,7 @@
                        retcode = (signed int)buf_priv->virtual;
                        buf_priv->virtual = 0;
                }
-               up(&current->mm->mmap_sem);
+               up_write(&current->mm->mmap_sem);
        } else {
                buf_priv->virtual = buf_priv->kernel_virtual;
                buf_priv->currently_mapped = I810_BUF_MAPPED;
@@ -214,7 +214,7 @@
        if(VM_DONTCOPY != 0) {
                if(buf_priv->currently_mapped != I810_BUF_MAPPED)
                        return -EINVAL;
-               down(&current->mm->mmap_sem);
+               down_write(&current->mm->mmap_sem);
 #if LINUX_VERSION_CODE < 0x020399
                retcode = do_munmap((unsigned long)buf_priv->virtual,
                                    (size_t) buf->total);
@@ -223,7 +223,7 @@
                                    (unsigned long)buf_priv->virtual,
                                    (size_t) buf->total);
 #endif
-               up(&current->mm->mmap_sem);
+               up_write(&current->mm->mmap_sem);
        }
        buf_priv->currently_mapped = I810_BUF_UNMAPPED;
        buf_priv->virtual = 0;
diff -u xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel.orig/radeon_bufs.c 
xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/radeon_bufs.c
--- xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel.orig/radeon_bufs.c      
 Mon Mar 19 16:39:36 2001
+++ xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/radeon_bufs.c    Mon 
+Mar 26 06:59:57 2001
@@ -240,17 +240,17 @@
                                goto done;
                        }
 
-                       down(&current->mm->mmap_sem);
+                       down_write(&current->mm->mmap_sem);
                        virtual = do_mmap(filp, 0, map->size,
                                          PROT_READ|PROT_WRITE,
                                          MAP_SHARED,
                                          (unsigned long)map->offset);
-                       up(&current->mm->mmap_sem);
+                       up_write(&current->mm->mmap_sem);
                } else {
-                       down(&current->mm->mmap_sem);
+                       down_write(&current->mm->mmap_sem);
                        virtual = do_mmap(filp, 0, dma->byte_count,
                                          PROT_READ|PROT_WRITE, MAP_SHARED, 0);
-                       up(&current->mm->mmap_sem);
+                       up_write(&current->mm->mmap_sem);
                }
                if (virtual > -1024UL) {
                        /* Real error */

PGP signature

Reply via email to