diff options
author | chai wen <chaiw.fnst@cn.fujitsu.com> | 2013-10-14 10:22:33 -0400 |
---|---|---|
committer | Gleb Natapov <gleb@redhat.com> | 2013-10-15 06:43:37 -0400 |
commit | f2e106692d5189303997ad7b96de8d8123aa5613 (patch) | |
tree | be15cad31bc5701570a571b3be04e299bb4ac547 /include | |
parent | a7efdf6bec34f1a693a926ebd08de6ba6e700dff (diff) |
KVM: Drop FOLL_GET in GUP when doing async page fault
Page pinning is not mandatory in kvm async page fault processing since
after async page fault event is delivered to a guest it accesses page once
again and does its own GUP. Drop the FOLL_GET flag in GUP in async_pf
code, and do some simplifying in check/clear processing.
Suggested-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Gu zheng <guz.fnst@cn.fujitsu.com>
Signed-off-by: chai wen <chaiw.fnst@cn.fujitsu.com>
Signed-off-by: Gleb Natapov <gleb@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/kvm_host.h | 2 | ||||
-rw-r--r-- | include/trace/events/kvm.h | 10 |
2 files changed, 5 insertions, 7 deletions
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index f6dccde755f6..c9d4236ab442 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
@@ -189,7 +189,7 @@ struct kvm_async_pf { | |||
189 | gva_t gva; | 189 | gva_t gva; |
190 | unsigned long addr; | 190 | unsigned long addr; |
191 | struct kvm_arch_async_pf arch; | 191 | struct kvm_arch_async_pf arch; |
192 | struct page *page; | 192 | bool wakeup_all; |
193 | }; | 193 | }; |
194 | 194 | ||
195 | void kvm_clear_async_pf_completion_queue(struct kvm_vcpu *vcpu); | 195 | void kvm_clear_async_pf_completion_queue(struct kvm_vcpu *vcpu); |
diff --git a/include/trace/events/kvm.h b/include/trace/events/kvm.h index 7005d1109ec9..131a0bda7aec 100644 --- a/include/trace/events/kvm.h +++ b/include/trace/events/kvm.h | |||
@@ -296,23 +296,21 @@ DEFINE_EVENT(kvm_async_pf_nopresent_ready, kvm_async_pf_ready, | |||
296 | 296 | ||
297 | TRACE_EVENT( | 297 | TRACE_EVENT( |
298 | kvm_async_pf_completed, | 298 | kvm_async_pf_completed, |
299 | TP_PROTO(unsigned long address, struct page *page, u64 gva), | 299 | TP_PROTO(unsigned long address, u64 gva), |
300 | TP_ARGS(address, page, gva), | 300 | TP_ARGS(address, gva), |
301 | 301 | ||
302 | TP_STRUCT__entry( | 302 | TP_STRUCT__entry( |
303 | __field(unsigned long, address) | 303 | __field(unsigned long, address) |
304 | __field(pfn_t, pfn) | ||
305 | __field(u64, gva) | 304 | __field(u64, gva) |
306 | ), | 305 | ), |
307 | 306 | ||
308 | TP_fast_assign( | 307 | TP_fast_assign( |
309 | __entry->address = address; | 308 | __entry->address = address; |
310 | __entry->pfn = page ? page_to_pfn(page) : 0; | ||
311 | __entry->gva = gva; | 309 | __entry->gva = gva; |
312 | ), | 310 | ), |
313 | 311 | ||
314 | TP_printk("gva %#llx address %#lx pfn %#llx", __entry->gva, | 312 | TP_printk("gva %#llx address %#lx", __entry->gva, |
315 | __entry->address, __entry->pfn) | 313 | __entry->address) |
316 | ); | 314 | ); |
317 | 315 | ||
318 | #endif | 316 | #endif |