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( ¤t->mm->mmap_sem );
+ down_write( ¤t->mm->mmap_sem );
virtual = do_mmap( filp, 0, map->size,
PROT_READ | PROT_WRITE,
MAP_SHARED,
(unsigned long)map->offset );
- up( ¤t->mm->mmap_sem );
+ up_write( ¤t->mm->mmap_sem );
} else {
- down( ¤t->mm->mmap_sem );
+ down_write( ¤t->mm->mmap_sem );
virtual = do_mmap( filp, 0, dma->byte_count,
PROT_READ | PROT_WRITE,
MAP_SHARED, 0 );
- up( ¤t->mm->mmap_sem );
+ up_write( ¤t->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(¤t->mm->mmap_sem);
+ down_write(¤t->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(¤t->mm->mmap_sem);
+ up_write(¤t->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(¤t->mm->mmap_sem);
+ down_write(¤t->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(¤t->mm->mmap_sem);
+ up_write(¤t->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(¤t->mm->mmap_sem);
+ down_write(¤t->mm->mmap_sem);
virtual = do_mmap(filp, 0, map->size,
PROT_READ|PROT_WRITE,
MAP_SHARED,
(unsigned long)map->offset);
- up(¤t->mm->mmap_sem);
+ up_write(¤t->mm->mmap_sem);
} else {
- down(¤t->mm->mmap_sem);
+ down_write(¤t->mm->mmap_sem);
virtual = do_mmap(filp, 0, dma->byte_count,
PROT_READ|PROT_WRITE, MAP_SHARED, 0);
- up(¤t->mm->mmap_sem);
+ up_write(¤t->mm->mmap_sem);
}
if (virtual > -1024UL) {
/* Real error */
PGP signature