Alistair Popple 6292503700 mm/hmm.c: allow VM_MIXEDMAP to work with hmm_range_fault
commit 87c01d57fa23de82fff593a7d070933d08755801 upstream.

hmm_range_fault() can be used instead of get_user_pages() for devices
which allow faulting however unlike get_user_pages() it will return an
error when used on a VM_MIXEDMAP range.

To make hmm_range_fault() more closely match get_user_pages() remove
this restriction.  This requires dealing with the !ARCH_HAS_PTE_SPECIAL
case in hmm_vma_handle_pte().  Rather than replicating the logic of
vm_normal_page() call it directly and do a check for the zero pfn
similar to what get_user_pages() currently does.

Also add a test to hmm selftest to verify functionality.

Link: https://lkml.kernel.org/r/20211104012001.2555676-1-apopple@nvidia.com
Fixes: da4c3c735ea4 ("mm/hmm/mirror: helper to snapshot CPU page table")
Signed-off-by: Alistair Popple <apopple@nvidia.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Zi Yan <ziy@nvidia.com>
Cc: Ralph Campbell <rcampbell@nvidia.com>
Cc: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-01-27 10:54:36 +01:00
..
2020-10-18 14:45:59 -07:00
2020-08-09 14:10:26 -07:00
2020-05-24 20:48:11 +02:00
2020-10-16 11:11:19 -07:00
2018-08-16 12:14:42 -07:00
2020-10-20 14:39:37 -07:00
2020-10-13 18:38:32 -07:00
2020-12-11 14:02:14 -08:00
2018-10-16 13:45:44 +02:00
2021-09-03 10:09:21 +02:00
2020-10-20 14:39:37 -07:00
2019-07-11 15:17:41 -07:00
2020-09-26 10:33:57 -07:00
2020-06-29 10:02:23 +02:00
2018-10-15 16:31:29 -04:00
2020-06-07 10:53:36 -07:00