All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] mm/hmm: fault non-owner device private entries
@ 2022-07-22 22:56 Ralph Campbell
  2022-07-23 13:32 ` Jason Gunthorpe
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Ralph Campbell @ 2022-07-22 22:56 UTC (permalink / raw)
  To: linux-mm
  Cc: Felix Kuehling, Philip Yang, Alistair Popple, Jason Gunthorpe,
	Andrew Morton, Ralph Campbell, stable

If hmm_range_fault() is called with the HMM_PFN_REQ_FAULT flag and a
device private PTE is found, the hmm_range::dev_private_owner page is
used to determine if the device private page should not be faulted in.
However, if the device private page is not owned by the caller,
hmm_range_fault() returns an error instead of calling migrate_to_ram()
to fault in the page.

Cc: stable@vger.kernel.org
Fixes: 76612d6ce4cc ("mm/hmm: reorganize how !pte_present is handled in hmm_vma_handle_pte()")
Signed-off-by: Ralph Campbell <rcampbell@nvidia.com>
Reported-by: Felix Kuehling <felix.kuehling@amd.com>
---
 mm/hmm.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/mm/hmm.c b/mm/hmm.c
index 3fd3242c5e50..7db2b29bdc85 100644
--- a/mm/hmm.c
+++ b/mm/hmm.c
@@ -273,6 +273,9 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr,
 		if (!non_swap_entry(entry))
 			goto fault;
 
+		if (is_device_private_entry(entry))
+			goto fault;
+
 		if (is_device_exclusive_entry(entry))
 			goto fault;
 
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] mm/hmm: fault non-owner device private entries
  2022-07-22 22:56 [PATCH] mm/hmm: fault non-owner device private entries Ralph Campbell
@ 2022-07-23 13:32 ` Jason Gunthorpe
  2022-07-25 17:54   ` Ralph Campbell
  2022-07-25  9:32 ` Alistair Popple
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Jason Gunthorpe @ 2022-07-23 13:32 UTC (permalink / raw)
  To: Ralph Campbell
  Cc: linux-mm, Felix Kuehling, Philip Yang, Alistair Popple,
	Andrew Morton, stable

On Fri, Jul 22, 2022 at 03:56:32PM -0700, Ralph Campbell wrote:
> If hmm_range_fault() is called with the HMM_PFN_REQ_FAULT flag and a
> device private PTE is found, the hmm_range::dev_private_owner page is
> used to determine if the device private page should not be faulted in.
> However, if the device private page is not owned by the caller,
> hmm_range_fault() returns an error instead of calling migrate_to_ram()
> to fault in the page.
> 
> Cc: stable@vger.kernel.org
> Fixes: 76612d6ce4cc ("mm/hmm: reorganize how !pte_present is handled in hmm_vma_handle_pte()")
> Signed-off-by: Ralph Campbell <rcampbell@nvidia.com>
> Reported-by: Felix Kuehling <felix.kuehling@amd.com>
> ---
>  mm/hmm.c | 3 +++
>  1 file changed, 3 insertions(+)

Should we have a test for this ?

Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>

Jason

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] mm/hmm: fault non-owner device private entries
  2022-07-22 22:56 [PATCH] mm/hmm: fault non-owner device private entries Ralph Campbell
  2022-07-23 13:32 ` Jason Gunthorpe
@ 2022-07-25  9:32 ` Alistair Popple
  2022-07-25 17:56   ` Ralph Campbell
  2022-07-25 14:08 ` Felix Kuehling
  2022-07-25 18:49 ` Andrew Morton
  3 siblings, 1 reply; 9+ messages in thread
From: Alistair Popple @ 2022-07-25  9:32 UTC (permalink / raw)
  To: Ralph Campbell
  Cc: linux-mm, Felix Kuehling, Philip Yang, Jason Gunthorpe,
	Andrew Morton, stable


Ralph Campbell <rcampbell@nvidia.com> writes:

> If hmm_range_fault() is called with the HMM_PFN_REQ_FAULT flag and a
> device private PTE is found, the hmm_range::dev_private_owner page is
> used to determine if the device private page should not be faulted in.
> However, if the device private page is not owned by the caller,
> hmm_range_fault() returns an error instead of calling migrate_to_ram()
> to fault in the page.

		/*
		 * Never fault in device private pages, but just report
		 * the PFN even if not present.
		 */

This comment needs updating because it will be possible to fault in
device private pages now.

It also looks a bit strange to be checking for device private entries
twice - I think it would be clearer if hmm_is_device_private_entry() is
removed and the ownership check done directly in hmm_vma_handle_pte().

 - Alistair

> Cc: stable@vger.kernel.org
> Fixes: 76612d6ce4cc ("mm/hmm: reorganize how !pte_present is handled in hmm_vma_handle_pte()")
> Signed-off-by: Ralph Campbell <rcampbell@nvidia.com>
> Reported-by: Felix Kuehling <felix.kuehling@amd.com>
> ---
>  mm/hmm.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/mm/hmm.c b/mm/hmm.c
> index 3fd3242c5e50..7db2b29bdc85 100644
> --- a/mm/hmm.c
> +++ b/mm/hmm.c
> @@ -273,6 +273,9 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr,
>  		if (!non_swap_entry(entry))
>  			goto fault;
>
> +		if (is_device_private_entry(entry))
> +			goto fault;
> +
>  		if (is_device_exclusive_entry(entry))
>  			goto fault;

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] mm/hmm: fault non-owner device private entries
  2022-07-22 22:56 [PATCH] mm/hmm: fault non-owner device private entries Ralph Campbell
  2022-07-23 13:32 ` Jason Gunthorpe
  2022-07-25  9:32 ` Alistair Popple
@ 2022-07-25 14:08 ` Felix Kuehling
  2022-07-25 18:49 ` Andrew Morton
  3 siblings, 0 replies; 9+ messages in thread
From: Felix Kuehling @ 2022-07-25 14:08 UTC (permalink / raw)
  To: Ralph Campbell, linux-mm
  Cc: Philip Yang, Alistair Popple, Jason Gunthorpe, Andrew Morton, stable

Am 2022-07-22 um 18:56 schrieb Ralph Campbell:
> If hmm_range_fault() is called with the HMM_PFN_REQ_FAULT flag and a
> device private PTE is found, the hmm_range::dev_private_owner page is
> used to determine if the device private page should not be faulted in.
> However, if the device private page is not owned by the caller,
> hmm_range_fault() returns an error instead of calling migrate_to_ram()
> to fault in the page.
>
> Cc: stable@vger.kernel.org
> Fixes: 76612d6ce4cc ("mm/hmm: reorganize how !pte_present is handled in hmm_vma_handle_pte()")
> Signed-off-by: Ralph Campbell <rcampbell@nvidia.com>
> Reported-by: Felix Kuehling <felix.kuehling@amd.com>

Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>

Thank you!


> ---
>   mm/hmm.c | 3 +++
>   1 file changed, 3 insertions(+)
>
> diff --git a/mm/hmm.c b/mm/hmm.c
> index 3fd3242c5e50..7db2b29bdc85 100644
> --- a/mm/hmm.c
> +++ b/mm/hmm.c
> @@ -273,6 +273,9 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr,
>   		if (!non_swap_entry(entry))
>   			goto fault;
>   
> +		if (is_device_private_entry(entry))
> +			goto fault;
> +
>   		if (is_device_exclusive_entry(entry))
>   			goto fault;
>   

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] mm/hmm: fault non-owner device private entries
  2022-07-23 13:32 ` Jason Gunthorpe
@ 2022-07-25 17:54   ` Ralph Campbell
  0 siblings, 0 replies; 9+ messages in thread
From: Ralph Campbell @ 2022-07-25 17:54 UTC (permalink / raw)
  To: Jason Gunthorpe
  Cc: linux-mm, Felix Kuehling, Philip Yang, Alistair Popple,
	Andrew Morton, stable


On 7/23/22 06:32, Jason Gunthorpe wrote:
> On Fri, Jul 22, 2022 at 03:56:32PM -0700, Ralph Campbell wrote:
>> If hmm_range_fault() is called with the HMM_PFN_REQ_FAULT flag and a
>> device private PTE is found, the hmm_range::dev_private_owner page is
>> used to determine if the device private page should not be faulted in.
>> However, if the device private page is not owned by the caller,
>> hmm_range_fault() returns an error instead of calling migrate_to_ram()
>> to fault in the page.
>>
>> Cc: stable@vger.kernel.org
>> Fixes: 76612d6ce4cc ("mm/hmm: reorganize how !pte_present is handled in hmm_vma_handle_pte()")
>> Signed-off-by: Ralph Campbell <rcampbell@nvidia.com>
>> Reported-by: Felix Kuehling <felix.kuehling@amd.com>
>> ---
>>   mm/hmm.c | 3 +++
>>   1 file changed, 3 insertions(+)
> Should we have a test for this ?
>
> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
>
> Jason

Sure, I'll add something to tools/testing/selftests/vm/hmm-tests.c


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] mm/hmm: fault non-owner device private entries
  2022-07-25  9:32 ` Alistair Popple
@ 2022-07-25 17:56   ` Ralph Campbell
  0 siblings, 0 replies; 9+ messages in thread
From: Ralph Campbell @ 2022-07-25 17:56 UTC (permalink / raw)
  To: Alistair Popple
  Cc: linux-mm, Felix Kuehling, Philip Yang, Jason Gunthorpe,
	Andrew Morton, stable


On 7/25/22 02:32, Alistair Popple wrote:
> Ralph Campbell <rcampbell@nvidia.com> writes:
>
>> If hmm_range_fault() is called with the HMM_PFN_REQ_FAULT flag and a
>> device private PTE is found, the hmm_range::dev_private_owner page is
>> used to determine if the device private page should not be faulted in.
>> However, if the device private page is not owned by the caller,
>> hmm_range_fault() returns an error instead of calling migrate_to_ram()
>> to fault in the page.
> 		/*
> 		 * Never fault in device private pages, but just report
> 		 * the PFN even if not present.
> 		 */
>
> This comment needs updating because it will be possible to fault in
> device private pages now.
>
> It also looks a bit strange to be checking for device private entries
> twice - I think it would be clearer if hmm_is_device_private_entry() is
> removed and the ownership check done directly in hmm_vma_handle_pte().
>
>   - Alistair

I'll fix this in v2. Thanks for the review.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] mm/hmm: fault non-owner device private entries
  2022-07-22 22:56 [PATCH] mm/hmm: fault non-owner device private entries Ralph Campbell
                   ` (2 preceding siblings ...)
  2022-07-25 14:08 ` Felix Kuehling
@ 2022-07-25 18:49 ` Andrew Morton
  2022-07-25 19:07   ` Ralph Campbell
  3 siblings, 1 reply; 9+ messages in thread
From: Andrew Morton @ 2022-07-25 18:49 UTC (permalink / raw)
  To: Ralph Campbell
  Cc: linux-mm, Felix Kuehling, Philip Yang, Alistair Popple,
	Jason Gunthorpe, stable

On Fri, 22 Jul 2022 15:56:32 -0700 Ralph Campbell <rcampbell@nvidia.com> wrote:

> If hmm_range_fault() is called with the HMM_PFN_REQ_FAULT flag and a
> device private PTE is found, the hmm_range::dev_private_owner page is
> used to determine if the device private page should not be faulted in.
> However, if the device private page is not owned by the caller,
> hmm_range_fault() returns an error instead of calling migrate_to_ram()
> to fault in the page.

Could we please include here a description of the end-user visible
effects of the bug?

> Cc: stable@vger.kernel.org

Especially when proposing a -stable backport.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] mm/hmm: fault non-owner device private entries
  2022-07-25 18:49 ` Andrew Morton
@ 2022-07-25 19:07   ` Ralph Campbell
  2022-07-25 22:29     ` Andrew Morton
  0 siblings, 1 reply; 9+ messages in thread
From: Ralph Campbell @ 2022-07-25 19:07 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, Felix Kuehling, Philip Yang, Alistair Popple,
	Jason Gunthorpe, stable


On 7/25/22 11:49, Andrew Morton wrote:
> On Fri, 22 Jul 2022 15:56:32 -0700 Ralph Campbell <rcampbell@nvidia.com> wrote:
>
>> If hmm_range_fault() is called with the HMM_PFN_REQ_FAULT flag and a
>> device private PTE is found, the hmm_range::dev_private_owner page is
>> used to determine if the device private page should not be faulted in.
>> However, if the device private page is not owned by the caller,
>> hmm_range_fault() returns an error instead of calling migrate_to_ram()
>> to fault in the page.
> Could we please include here a description of the end-user visible
> effects of the bug?
>
>> Cc: stable@vger.kernel.org
> Especially when proposing a -stable backport.

If I add the following, would that be sufficient?
Should I post a v3?

For example, if a page is migrated to GPU private
memory and a RDMA fault capable NIC tries to read the migrated page,
without this patch it will get an error. With this patch, the page will
be migrated back to system memory and the NIC will be able to read the
data.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] mm/hmm: fault non-owner device private entries
  2022-07-25 19:07   ` Ralph Campbell
@ 2022-07-25 22:29     ` Andrew Morton
  0 siblings, 0 replies; 9+ messages in thread
From: Andrew Morton @ 2022-07-25 22:29 UTC (permalink / raw)
  To: Ralph Campbell
  Cc: linux-mm, Felix Kuehling, Philip Yang, Alistair Popple,
	Jason Gunthorpe, stable

On Mon, 25 Jul 2022 12:07:27 -0700 Ralph Campbell <rcampbell@nvidia.com> wrote:

> >> to fault in the page.
> > Could we please include here a description of the end-user visible
> > effects of the bug?
> >
> >> Cc: stable@vger.kernel.org
> > Especially when proposing a -stable backport.
> 
> If I add the following, would that be sufficient?
> Should I post a v3?
> 
> For example, if a page is migrated to GPU private
> memory and a RDMA fault capable NIC tries to read the migrated page,
> without this patch it will get an error. With this patch, the page will
> be migrated back to system memory and the NIC will be able to read the
> data.

I added it, thanks.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-07-25 22:29 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-22 22:56 [PATCH] mm/hmm: fault non-owner device private entries Ralph Campbell
2022-07-23 13:32 ` Jason Gunthorpe
2022-07-25 17:54   ` Ralph Campbell
2022-07-25  9:32 ` Alistair Popple
2022-07-25 17:56   ` Ralph Campbell
2022-07-25 14:08 ` Felix Kuehling
2022-07-25 18:49 ` Andrew Morton
2022-07-25 19:07   ` Ralph Campbell
2022-07-25 22:29     ` Andrew Morton

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.