| From: Boris Ostrovsky <boris.ostrovsky@oracle.com> |
| Date: Mon, 21 Nov 2016 09:56:06 -0500 |
| Subject: xen/gntdev: Use VM_MIXEDMAP instead of VM_IO to avoid NUMA balancing |
| |
| commit 30faaafdfa0c754c91bac60f216c9f34a2bfdf7e upstream. |
| |
| Commit 9c17d96500f7 ("xen/gntdev: Grant maps should not be subject to |
| NUMA balancing") set VM_IO flag to prevent grant maps from being |
| subjected to NUMA balancing. |
| |
| It was discovered recently that this flag causes get_user_pages() to |
| always fail with -EFAULT. |
| |
| check_vma_flags |
| __get_user_pages |
| __get_user_pages_locked |
| __get_user_pages_unlocked |
| get_user_pages_fast |
| iov_iter_get_pages |
| dio_refill_pages |
| do_direct_IO |
| do_blockdev_direct_IO |
| do_blockdev_direct_IO |
| ext4_direct_IO_read |
| generic_file_read_iter |
| aio_run_iocb |
| |
| (which can happen if guest's vdisk has direct-io-safe option). |
| |
| To avoid this let's use VM_MIXEDMAP flag instead --- it prevents |
| NUMA balancing just as VM_IO does and has no effect on |
| check_vma_flags(). |
| |
| |
| Reported-by: Olaf Hering <olaf@aepfle.de> |
| Suggested-by: Hugh Dickins <hughd@google.com> |
| Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> |
| Acked-by: Hugh Dickins <hughd@google.com> |
| Tested-by: Olaf Hering <olaf@aepfle.de> |
| Signed-off-by: Juergen Gross <jgross@suse.com> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/xen/gntdev.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/xen/gntdev.c |
| +++ b/drivers/xen/gntdev.c |
| @@ -765,7 +765,7 @@ static int gntdev_mmap(struct file *flip |
| |
| vma->vm_ops = &gntdev_vmops; |
| |
| - vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP | VM_IO; |
| + vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP | VM_MIXEDMAP; |
| |
| if (use_ptemod) |
| vma->vm_flags |= VM_DONTCOPY; |