]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
Revert unnecessary locking changes in privcmd_ioctl().
authorKeir Fraser <keir@xensource.com>
Sat, 7 Jul 2007 09:19:02 +0000 (10:19 +0100)
committerKeir Fraser <keir@xensource.com>
Sat, 7 Jul 2007 09:19:02 +0000 (10:19 +0100)
Signed-off-by: Keir Fraser <keir@xensource.com>
drivers/xen/privcmd/privcmd.c

index 8d0ceb35a9094b2ec43633adf4e460d1e5f77f1c..b5e6c148127d1909516637e0f2f47d14c6cbf271 100644 (file)
@@ -112,7 +112,7 @@ static int privcmd_ioctl(struct inode *inode, struct file *file,
                if (copy_from_user(&msg, p, sizeof(msg)))
                        return -EFAULT;
 
-               down_write(&mm->mmap_sem);
+               down_read(&mm->mmap_sem);
 
                vma = find_vma(mm, msg.va);
                rc = -EINVAL;
@@ -154,7 +154,7 @@ static int privcmd_ioctl(struct inode *inode, struct file *file,
                rc = 0;
 
        mmap_out:
-               up_write(&mm->mmap_sem);
+               up_read(&mm->mmap_sem);
                ret = rc;
        }
        break;
@@ -177,14 +177,14 @@ static int privcmd_ioctl(struct inode *inode, struct file *file,
                if ((m.num <= 0) || (nr_pages > (LONG_MAX >> PAGE_SHIFT)))
                        return -EINVAL;
 
-               down_write(&mm->mmap_sem);
+               down_read(&mm->mmap_sem);
 
                vma = find_vma(mm, m.addr);
                if (!vma ||
                    (m.addr != vma->vm_start) ||
                    ((m.addr + (nr_pages << PAGE_SHIFT)) != vma->vm_end) ||
                    !privcmd_enforce_singleshot_mapping(vma)) {
-                       up_write(&mm->mmap_sem);
+                       up_read(&mm->mmap_sem);
                        return -EINVAL;
                }
 
@@ -192,7 +192,7 @@ static int privcmd_ioctl(struct inode *inode, struct file *file,
                addr = m.addr;
                for (i = 0; i < nr_pages; i++, addr += PAGE_SIZE, p++) {
                        if (get_user(mfn, p)) {
-                               up_write(&mm->mmap_sem);
+                               up_read(&mm->mmap_sem);
                                return -EFAULT;
                        }
 
@@ -203,7 +203,7 @@ static int privcmd_ioctl(struct inode *inode, struct file *file,
                                put_user(0xF0000000 | mfn, p);
                }
 
-               up_write(&mm->mmap_sem);
+               up_read(&mm->mmap_sem);
                ret = 0;
        }
        break;