Commit a46ef99d authored by Linus Torvalds's avatar Linus Torvalds
Browse files

VM: add "vm_munmap()" helper function



Like the vm_brk() function, this is the same as "do_munmap()", except it
does the VM locking for the caller.

Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent e4eb1ff6
Loading
Loading
Loading
Loading
+3 −8
Original line number Diff line number Diff line
@@ -605,9 +605,9 @@ pfm_unprotect_ctx_ctxsw(pfm_context_t *x, unsigned long f)
}

static inline unsigned int
pfm_do_munmap(struct mm_struct *mm, unsigned long addr, size_t len, int acct)
pfm_vm_munmap(struct mm_struct *mm, unsigned long addr, size_t len)
{
	return do_munmap(mm, addr, len);
	return vm_munmap(mm, addr, len);
}

static inline unsigned long 
@@ -1473,13 +1473,8 @@ pfm_remove_smpl_mapping(struct task_struct *task, void *vaddr, unsigned long siz
	/*
	 * does the actual unmapping
	 */
	down_write(&task->mm->mmap_sem);

	DPRINT(("down_write done smpl_vaddr=%p size=%lu\n", vaddr, size));
	r = pfm_vm_munmap(task->mm, (unsigned long)vaddr, size);

	r = pfm_do_munmap(task->mm, (unsigned long)vaddr, size, 0);

	up_write(&task->mm->mmap_sem);
	if (r !=0) {
		printk(KERN_ERR "perfmon: [%d] unable to unmap sampling buffer @%p size=%lu\n", task_pid_nr(task), vaddr, size);
	}
+1 −6
Original line number Diff line number Diff line
@@ -566,15 +566,10 @@ out:

SYSCALL_DEFINE2(64_munmap, unsigned long, addr, size_t, len)
{
	long ret;

	if (invalid_64bit_range(addr, len))
		return -EINVAL;

	down_write(&current->mm->mmap_sem);
	ret = do_munmap(current->mm, addr, len);
	up_write(&current->mm->mmap_sem);
	return ret;
	return vm_munmap(current->mm, addr, len);
}

extern unsigned long do_mremap(unsigned long addr,
+1 −3
Original line number Diff line number Diff line
@@ -6366,10 +6366,8 @@ void kvm_arch_commit_memory_region(struct kvm *kvm,
	if (!user_alloc && !old.user_alloc && old.rmap && !npages) {
		int ret;

		down_write(&current->mm->mmap_sem);
		ret = do_munmap(current->mm, old.userspace_addr,
		ret = vm_munmap(current->mm, old.userspace_addr,
				old.npages * PAGE_SIZE);
		up_write(&current->mm->mmap_sem);
		if (ret < 0)
			printk(KERN_WARNING
			       "kvm_vm_ioctl_set_memory_region: "
+1 −3
Original line number Diff line number Diff line
@@ -157,11 +157,9 @@ static int i810_unmap_buffer(struct drm_buf *buf)
	if (buf_priv->currently_mapped != I810_BUF_MAPPED)
		return -EINVAL;

	down_write(&current->mm->mmap_sem);
	retcode = do_munmap(current->mm,
	retcode = vm_munmap(current->mm,
			    (unsigned long)buf_priv->virtual,
			    (size_t) buf->total);
	up_write(&current->mm->mmap_sem);

	buf_priv->currently_mapped = I810_BUF_UNMAPPED;
	buf_priv->virtual = NULL;
+2 −5
Original line number Diff line number Diff line
@@ -92,11 +92,8 @@ static void aio_free_ring(struct kioctx *ctx)
	for (i=0; i<info->nr_pages; i++)
		put_page(info->ring_pages[i]);

	if (info->mmap_size) {
		down_write(&ctx->mm->mmap_sem);
		do_munmap(ctx->mm, info->mmap_base, info->mmap_size);
		up_write(&ctx->mm->mmap_sem);
	}
	if (info->mmap_size)
		vm_munmap(ctx->mm, info->mmap_base, info->mmap_size);

	if (info->ring_pages && info->ring_pages != info->internal_pages)
		kfree(info->ring_pages);
Loading