All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg@nvidia.com>
To: Steve Sistare <steven.sistare@oracle.com>
Cc: kvm@vger.kernel.org, Alex Williamson <alex.williamson@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Kevin Tian <kevin.tian@intel.com>
Subject: Re: [PATCH V5 4/7] vfio/type1: restore locked_vm
Date: Fri, 16 Dec 2022 10:12:13 -0400	[thread overview]
Message-ID: <Y5x8vdzF6c0ibJx7@nvidia.com> (raw)
In-Reply-To: <1671141424-81853-5-git-send-email-steven.sistare@oracle.com>

On Thu, Dec 15, 2022 at 01:57:01PM -0800, Steve Sistare wrote:
> When a vfio container is preserved across exec or fork-exec, the new
> task's mm has a locked_vm count of 0.  After a dma vaddr is updated using
> VFIO_DMA_MAP_FLAG_VADDR, locked_vm remains 0, and the pinned memory does
> not count against the task's RLIMIT_MEMLOCK.
> 
> To restore the correct locked_vm count, when VFIO_DMA_MAP_FLAG_VADDR is
> used and the dma's mm has changed, add the mapping's pinned page count to
> the new mm->locked_vm, subject to the rlimit.  Now that mediated devices
> are excluded when using VFIO_UPDATE_VADDR, the amount of pinned memory
> equals the size of the mapping less the reserved page count.
> 
> Fixes: c3cbab24db38 ("vfio/type1: implement interfaces to update vaddr")
> 
> Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
> ---
>  drivers/vfio/vfio_iommu_type1.c | 35 +++++++++++++++++++++++++++++++++++
>  1 file changed, 35 insertions(+)
> 
> diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
> index add87cd..70b52e9 100644
> --- a/drivers/vfio/vfio_iommu_type1.c
> +++ b/drivers/vfio/vfio_iommu_type1.c
> @@ -1588,6 +1588,38 @@ static bool vfio_iommu_iova_dma_valid(struct vfio_iommu *iommu,
>  	return list_empty(iova);
>  }
>  
> +static int vfio_change_dma_owner(struct vfio_dma *dma)
> +{
> +	struct task_struct *new_task = current->group_leader;
> +
> +	if (new_task->mm != dma->mm) {
> +		long npage = (dma->size >> PAGE_SHIFT) - dma->reserved_pages;
> +		bool new_lock_cap = capable(CAP_IPC_LOCK);
> +		int ret = mmap_write_lock_killable(new_task->mm);
> +
> +		if (ret)
> +			return ret;
> +
> +		ret = __account_locked_vm(new_task->mm, npage, true,
> +					  new_task, new_lock_cap);
> +		mmap_write_unlock(new_task->mm);
> +		if (ret)
> +			return ret;
> +
> +		vfio_lock_acct(dma, -npage, true);
> +		if (dma->task != new_task) {
> +			put_task_struct(dma->task);
> +			dma->task = get_task_struct(new_task);
> +		}
> +		mmdrop(dma->mm);
> +		dma->mm = new_task->mm;

This also should be current->mm not current->group_leader->mm

Jason

  reply	other threads:[~2022-12-16 14:12 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-15 21:56 [PATCH V5 0/7] fixes for virtual address update Steve Sistare
2022-12-15 21:56 ` [PATCH V5 1/7] vfio/type1: exclude mdevs from VFIO_UPDATE_VADDR Steve Sistare
2022-12-16 14:10   ` Jason Gunthorpe
2022-12-15 21:56 ` [PATCH V5 2/7] vfio/type1: prevent locked_vm underflow Steve Sistare
2022-12-16 14:09   ` Jason Gunthorpe
2022-12-16 15:42     ` Steven Sistare
2022-12-16 16:10       ` Alex Williamson
2022-12-16 16:16         ` Steven Sistare
2022-12-16 16:33           ` Alex Williamson
2022-12-16 17:07       ` Jason Gunthorpe
2022-12-15 21:57 ` [PATCH V5 3/7] vfio/type1: count reserved pages Steve Sistare
2022-12-15 22:15   ` Steven Sistare
2022-12-15 21:57 ` [PATCH V5 4/7] vfio/type1: restore locked_vm Steve Sistare
2022-12-16 14:12   ` Jason Gunthorpe [this message]
2022-12-15 21:57 ` [PATCH V5 5/7] vfio/type1: revert "block on invalid vaddr" Steve Sistare
2022-12-15 21:57 ` [PATCH V5 6/7] vfio/type1: revert "implement notify callback" Steve Sistare
2022-12-15 21:57 ` [PATCH V5 7/7] vfio: revert "iommu driver " Steve Sistare

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y5x8vdzF6c0ibJx7@nvidia.com \
    --to=jgg@nvidia.com \
    --cc=alex.williamson@redhat.com \
    --cc=cohuck@redhat.com \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=steven.sistare@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.