Commit 3624a248 authored by Kirti Wankhede's avatar Kirti Wankhede Committed by Alex Williamson
Browse files

vfio iommu type1: Update arguments of vfio_lock_acct



Added task structure as input argument to vfio_lock_acct() function.

Signed-off-by: default avatarKirti Wankhede <kwankhede@nvidia.com>
Signed-off-by: default avatarNeo Jia <cjia@nvidia.com>
Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
parent 2169037d
Loading
Loading
Loading
Loading
+16 −14
Original line number Diff line number Diff line
@@ -150,17 +150,22 @@ static void vfio_lock_acct_bg(struct work_struct *work)
	kfree(vwork);
}

static void vfio_lock_acct(long npage)
static void vfio_lock_acct(struct task_struct *task, long npage)
{
	struct vwork *vwork;
	struct mm_struct *mm;

	if (!current->mm || !npage)
	if (!npage)
		return;

	mm = get_task_mm(task);
	if (!mm)
		return; /* process exited or nothing to do */

	if (down_write_trylock(&current->mm->mmap_sem)) {
		current->mm->locked_vm += npage;
		up_write(&current->mm->mmap_sem);
	if (down_write_trylock(&mm->mmap_sem)) {
		mm->locked_vm += npage;
		up_write(&mm->mmap_sem);
		mmput(mm);
		return;
	}

@@ -170,11 +175,8 @@ static void vfio_lock_acct(long npage)
	 * wouldn't need this silliness
	 */
	vwork = kmalloc(sizeof(struct vwork), GFP_KERNEL);
	if (!vwork)
		return;
	mm = get_task_mm(current);
	if (!mm) {
		kfree(vwork);
	if (!vwork) {
		mmput(mm);
		return;
	}
	INIT_WORK(&vwork->work, vfio_lock_acct_bg);
@@ -285,7 +287,7 @@ static long vfio_pin_pages_remote(unsigned long vaddr, long npage,

	if (unlikely(disable_hugepages)) {
		if (!rsvd)
			vfio_lock_acct(1);
			vfio_lock_acct(current, 1);
		return 1;
	}

@@ -313,7 +315,7 @@ static long vfio_pin_pages_remote(unsigned long vaddr, long npage,
	}

	if (!rsvd)
		vfio_lock_acct(i);
		vfio_lock_acct(current, i);

	return i;
}
@@ -328,7 +330,7 @@ static long vfio_unpin_pages_remote(unsigned long pfn, long npage,
		unlocked += put_pfn(pfn++, prot);

	if (do_accounting)
		vfio_lock_acct(-unlocked);
		vfio_lock_acct(current, -unlocked);

	return unlocked;
}
@@ -390,7 +392,7 @@ static void vfio_unmap_unpin(struct vfio_iommu *iommu, struct vfio_dma *dma)
		cond_resched();
	}

	vfio_lock_acct(-unlocked);
	vfio_lock_acct(current, -unlocked);
}

static void vfio_remove_dma(struct vfio_iommu *iommu, struct vfio_dma *dma)