diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-12-14 20:25:18 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-12-14 20:25:18 -0500 |
commit | a57cb1c1d7974c62a5c80f7869e35b492ace12cd (patch) | |
tree | 5a42ee9a668f171143464bc86013954c1bbe94ad /virt/kvm/async_pf.c | |
parent | cf1b3341afab9d3ad02a76b3a619ea027dcf4e28 (diff) | |
parent | e1e14ab8411df344a17687821f8f78f0a1e73cbb (diff) |
Merge branch 'akpm' (patches from Andrew)
Merge more updates from Andrew Morton:
- a few misc things
- kexec updates
- DMA-mapping updates to better support networking DMA operations
- IPC updates
- various MM changes to improve DAX fault handling
- lots of radix-tree changes, mainly to the test suite. All leading up
to reimplementing the IDA/IDR code to be a wrapper layer over the
radix-tree. However the final trigger-pulling patch is held off for
4.11.
* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (114 commits)
radix tree test suite: delete unused rcupdate.c
radix tree test suite: add new tag check
radix-tree: ensure counts are initialised
radix tree test suite: cache recently freed objects
radix tree test suite: add some more functionality
idr: reduce the number of bits per level from 8 to 6
rxrpc: abstract away knowledge of IDR internals
tpm: use idr_find(), not idr_find_slowpath()
idr: add ida_is_empty
radix tree test suite: check multiorder iteration
radix-tree: fix replacement for multiorder entries
radix-tree: add radix_tree_split_preload()
radix-tree: add radix_tree_split
radix-tree: add radix_tree_join
radix-tree: delete radix_tree_range_tag_if_tagged()
radix-tree: delete radix_tree_locate_item()
radix-tree: improve multiorder iterators
btrfs: fix race in btrfs_free_dummy_fs_info()
radix-tree: improve dump output
radix-tree: make radix_tree_find_next_bit more useful
...
Diffstat (limited to 'virt/kvm/async_pf.c')
-rw-r--r-- | virt/kvm/async_pf.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/virt/kvm/async_pf.c b/virt/kvm/async_pf.c index efeceb0a222d..3815e940fbea 100644 --- a/virt/kvm/async_pf.c +++ b/virt/kvm/async_pf.c | |||
@@ -76,16 +76,20 @@ static void async_pf_execute(struct work_struct *work) | |||
76 | struct kvm_vcpu *vcpu = apf->vcpu; | 76 | struct kvm_vcpu *vcpu = apf->vcpu; |
77 | unsigned long addr = apf->addr; | 77 | unsigned long addr = apf->addr; |
78 | gva_t gva = apf->gva; | 78 | gva_t gva = apf->gva; |
79 | int locked = 1; | ||
79 | 80 | ||
80 | might_sleep(); | 81 | might_sleep(); |
81 | 82 | ||
82 | /* | 83 | /* |
83 | * This work is run asynchromously to the task which owns | 84 | * This work is run asynchromously to the task which owns |
84 | * mm and might be done in another context, so we must | 85 | * mm and might be done in another context, so we must |
85 | * use FOLL_REMOTE. | 86 | * access remotely. |
86 | */ | 87 | */ |
87 | __get_user_pages_unlocked(NULL, mm, addr, 1, NULL, | 88 | down_read(&mm->mmap_sem); |
88 | FOLL_WRITE | FOLL_REMOTE); | 89 | get_user_pages_remote(NULL, mm, addr, 1, FOLL_WRITE, NULL, NULL, |
90 | &locked); | ||
91 | if (locked) | ||
92 | up_read(&mm->mmap_sem); | ||
89 | 93 | ||
90 | kvm_async_page_present_sync(vcpu, apf); | 94 | kvm_async_page_present_sync(vcpu, apf); |
91 | 95 | ||