From: Paul Mackerras <paulus@ozlabs.org>
To: Alexey Kardashevskiy <aik@ozlabs.ru>
Cc: "Alex Williamson" <alex.williamson@redhat.com>,
"Jose Ricardo Ziviani" <joserz@linux.ibm.com>,
"Sam Bobroff" <sbobroff@linux.ibm.com>,
"Alistair Popple" <alistair@popple.id.au>,
"Daniel Henrique Barboza" <danielhb413@gmail.com>,
linuxppc-dev@lists.ozlabs.org, kvm-ppc@vger.kernel.org,
"Piotr Jaroszynski" <pjaroszynski@nvidia.com>,
"Oliver O'Halloran" <oohall@gmail.com>,
"Andrew Donnellan" <andrew.donnellan@au1.ibm.com>,
"Leonardo Augusto Guimarães Garcia" <lagarcia@br.ibm.com>,
"Reza Arbab" <arbab@linux.ibm.com>,
"David Gibson" <david@gibson.dropbear.id.au>
Subject: Re: [PATCH kernel v4 03/19] powerpc/vfio/iommu/kvm: Do not pin device memory
Date: Thu, 13 Dec 2018 03:25:32 +0000 [thread overview]
Message-ID: <20181213032532.GA7078@blackberry> (raw)
In-Reply-To: <20181123055304.25116-4-aik@ozlabs.ru>
On Fri, Nov 23, 2018 at 04:52:48PM +1100, Alexey Kardashevskiy wrote:
> This new memory does not have page structs as it is not plugged to
> the host so gup() will fail anyway.
>
> This adds 2 helpers:
> - mm_iommu_newdev() to preregister the "memory device" memory so
> the rest of API can still be used;
> - mm_iommu_is_devmem() to know if the physical address is one of thise
> new regions which we must avoid unpinning of.
>
> This adds @mm to tce_page_is_contained() and iommu_tce_xchg() to test
> if the memory is device memory to avoid pfn_to_page().
>
> This adds a check for device memory in mm_iommu_ua_mark_dirty_rm() which
> does delayed pages dirtying.
This mostly looks good, but I have one concern:
> -static bool tce_page_is_contained(struct page *page, unsigned page_shift)
> +static bool tce_page_is_contained(struct mm_struct *mm, unsigned long hpa,
> + unsigned int page_shift)
> {
> + struct page *page;
> +
> + if (mm_iommu_is_devmem(mm, hpa, page_shift))
> + return true;
> +
> + page = pfn_to_page(hpa >> PAGE_SHIFT);
Is it possible for userspace or a guest to cause us to get here with
hpa value that is bogus? If so what does pfn_to_page do with that
pfn, and do we handle that correctly?
(I realize that if there is a problem here, it's a problem that
already exists in the code without this patch.)
Paul.
WARNING: multiple messages have this Message-ID (diff)
From: Paul Mackerras <paulus@ozlabs.org>
To: Alexey Kardashevskiy <aik@ozlabs.ru>
Cc: "Alex Williamson" <alex.williamson@redhat.com>,
"Jose Ricardo Ziviani" <joserz@linux.ibm.com>,
"Sam Bobroff" <sbobroff@linux.ibm.com>,
"Alistair Popple" <alistair@popple.id.au>,
"Daniel Henrique Barboza" <danielhb413@gmail.com>,
linuxppc-dev@lists.ozlabs.org, kvm-ppc@vger.kernel.org,
"Piotr Jaroszynski" <pjaroszynski@nvidia.com>,
"Oliver O'Halloran" <oohall@gmail.com>,
"Andrew Donnellan" <andrew.donnellan@au1.ibm.com>,
"Leonardo Augusto Guimarães Garcia" <lagarcia@br.ibm.com>,
"Reza Arbab" <arbab@linux.ibm.com>,
"David Gibson" <david@gibson.dropbear.id.au>
Subject: Re: [PATCH kernel v4 03/19] powerpc/vfio/iommu/kvm: Do not pin device memory
Date: Thu, 13 Dec 2018 14:25:32 +1100 [thread overview]
Message-ID: <20181213032532.GA7078@blackberry> (raw)
In-Reply-To: <20181123055304.25116-4-aik@ozlabs.ru>
On Fri, Nov 23, 2018 at 04:52:48PM +1100, Alexey Kardashevskiy wrote:
> This new memory does not have page structs as it is not plugged to
> the host so gup() will fail anyway.
>
> This adds 2 helpers:
> - mm_iommu_newdev() to preregister the "memory device" memory so
> the rest of API can still be used;
> - mm_iommu_is_devmem() to know if the physical address is one of thise
> new regions which we must avoid unpinning of.
>
> This adds @mm to tce_page_is_contained() and iommu_tce_xchg() to test
> if the memory is device memory to avoid pfn_to_page().
>
> This adds a check for device memory in mm_iommu_ua_mark_dirty_rm() which
> does delayed pages dirtying.
This mostly looks good, but I have one concern:
> -static bool tce_page_is_contained(struct page *page, unsigned page_shift)
> +static bool tce_page_is_contained(struct mm_struct *mm, unsigned long hpa,
> + unsigned int page_shift)
> {
> + struct page *page;
> +
> + if (mm_iommu_is_devmem(mm, hpa, page_shift))
> + return true;
> +
> + page = pfn_to_page(hpa >> PAGE_SHIFT);
Is it possible for userspace or a guest to cause us to get here with
hpa value that is bogus? If so what does pfn_to_page do with that
pfn, and do we handle that correctly?
(I realize that if there is a problem here, it's a problem that
already exists in the code without this patch.)
Paul.
next prev parent reply other threads:[~2018-12-13 3:25 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-23 5:52 [PATCH kernel v4 00/19] powerpc/powernv/npu, vfio: NVIDIA V100 + P9 passthrough Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-11-23 5:52 ` [PATCH kernel v4 01/19] powerpc/ioda/npu: Call skiboot's hot reset hook when disabling NPU2 Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-12-05 4:21 ` David Gibson
2018-12-05 4:21 ` David Gibson
2018-11-23 5:52 ` [PATCH kernel v4 02/19] powerpc/mm/iommu/vfio_spapr_tce: Change mm_iommu_get to reference a region Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-12-05 4:25 ` [PATCH kernel v4 02/19] powerpc/mm/iommu/vfio_spapr_tce: Change mm_iommu_get to reference a regi David Gibson
2018-12-05 4:25 ` [PATCH kernel v4 02/19] powerpc/mm/iommu/vfio_spapr_tce: Change mm_iommu_get to reference a region David Gibson
2018-11-23 5:52 ` [PATCH kernel v4 03/19] powerpc/vfio/iommu/kvm: Do not pin device memory Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-12-05 4:35 ` David Gibson
2018-12-05 4:35 ` David Gibson
2018-12-13 3:25 ` Paul Mackerras [this message]
2018-12-13 3:25 ` Paul Mackerras
2018-11-23 5:52 ` [PATCH kernel v4 04/19] powerpc/powernv: Move npu struct from pnv_phb to pci_controller Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-12-05 5:14 ` David Gibson
2018-12-05 5:14 ` David Gibson
2018-12-05 5:47 ` Alexey Kardashevskiy
2018-12-05 5:47 ` Alexey Kardashevskiy
2018-12-05 6:17 ` Alexey Kardashevskiy
2018-12-05 6:17 ` Alexey Kardashevskiy
2018-12-05 22:40 ` David Gibson
2018-12-05 22:40 ` David Gibson
2018-12-10 2:50 ` Alexey Kardashevskiy
2018-12-10 2:50 ` Alexey Kardashevskiy
2018-12-10 3:42 ` David Gibson
2018-12-10 3:42 ` David Gibson
2018-11-23 5:52 ` [PATCH kernel v4 05/19] powerpc/powernv/npu: Move OPAL calls away from context manipulation Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-11-23 5:52 ` [PATCH kernel v4 06/19] powerpc/pseries/iommu: Use memory@ nodes in max RAM address calculation Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-11-23 5:52 ` [PATCH kernel v4 07/19] powerpc/pseries/npu: Enable platform support Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-11-23 5:52 ` [PATCH kernel v4 08/19] powerpc/pseries: Remove IOMMU API support for non-LPAR systems Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-11-23 5:52 ` [PATCH kernel v4 09/19] powerpc/powernv/pseries: Rework device adding to IOMMU groups Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-11-23 5:52 ` [PATCH kernel v4 10/19] powerpc/iommu_api: Move IOMMU groups setup to a single place Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-11-23 5:52 ` [PATCH kernel v4 11/19] powerpc/powernv: Reference iommu_table while it is linked to a group Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-11-23 5:52 ` [PATCH kernel v4 12/19] powerpc/powernv: Add purge cache OPAL call Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-11-23 5:52 ` [PATCH kernel v4 13/19] powerpc/powernv/npu: Move single TVE handling to NPU PE Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-11-23 5:52 ` [PATCH kernel v4 14/19] powerpc/powernv/npu: Convert NPU IOMMU helpers to iommu_table_group_ops Alexey Kardashevskiy
2018-11-23 5:52 ` Alexey Kardashevskiy
2018-11-23 5:53 ` [PATCH kernel v4 15/19] powerpc/powernv/npu: Add compound IOMMU groups Alexey Kardashevskiy
2018-11-23 5:53 ` Alexey Kardashevskiy
2018-11-23 5:53 ` [PATCH kernel v4 16/19] powerpc/powernv/npu: Add release_ownership hook Alexey Kardashevskiy
2018-11-23 5:53 ` Alexey Kardashevskiy
2018-11-23 5:53 ` [PATCH kernel v4 17/19] vfio_pci: Allow mapping extra regions Alexey Kardashevskiy
2018-11-23 5:53 ` Alexey Kardashevskiy
2018-12-11 0:09 ` Alex Williamson
2018-12-11 0:09 ` Alex Williamson
2018-11-23 5:53 ` [PATCH kernel v4 18/19] vfio_pci: Allow regions to add own capabilities Alexey Kardashevskiy
2018-11-23 5:53 ` Alexey Kardashevskiy
2018-12-11 0:10 ` Alex Williamson
2018-12-11 0:10 ` Alex Williamson
2018-11-23 5:53 ` [PATCH kernel v4 19/19] vfio_pci: Add NVIDIA GV100GL [Tesla V100 SXM2] subdriver Alexey Kardashevskiy
2018-11-23 5:53 ` Alexey Kardashevskiy
2018-12-11 0:08 ` Alex Williamson
2018-12-11 0:08 ` Alex Williamson
2018-12-11 0:57 ` Alexey Kardashevskiy
2018-12-11 0:57 ` Alexey Kardashevskiy
2018-12-11 1:27 ` Alex Williamson
2018-12-11 1:27 ` Alex Williamson
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=20181213032532.GA7078@blackberry \
--to=paulus@ozlabs.org \
--cc=aik@ozlabs.ru \
--cc=alex.williamson@redhat.com \
--cc=alistair@popple.id.au \
--cc=andrew.donnellan@au1.ibm.com \
--cc=arbab@linux.ibm.com \
--cc=danielhb413@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=joserz@linux.ibm.com \
--cc=kvm-ppc@vger.kernel.org \
--cc=lagarcia@br.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=oohall@gmail.com \
--cc=pjaroszynski@nvidia.com \
--cc=sbobroff@linux.ibm.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.