kvm: allow RO page when atomic && !write_fault
PATCH 1/1 kvm: allow RO page when atomic && !write_fault
Atomic-able hva_to_pfn() patches and allow-read-only-page patches are merged almost the same time. But hva_to_pfn() does not handle these two issues well together.
When @atomic && !@write_fault && host-is-read-only-page-mapped the code will return fault_page, actually, it will be better if we return the pfn of the read-only-page.
---
virt/kvm/kvm_main.c +12 -16
@@ -1060,31 +1060,27 @@ static pfn_t hva_to_pfn(struct kvm *kvm, unsigned long addr, bool atomic,BUG_ON (!write_fault && !writable);if (writable) - *writable = true; + *writable = write_fault;if (atomic || async) - npages =__get_user_pages_fast (addr,1 ,1 , page); + npages =__get_user_pages_fast (addr,1 , write_fault, page);if (unlikely (npages !=1 ) && !atomic) {might_sleep (); - -if (writable) - *writable = write_fault; - npages =get_user_pages_fast (addr,1 , write_fault, page); + } -/* map read fault as writable if possible */ -if (unlikely (!write_fault) && npages ==1 ) { -struct page *wpage[1 ]; +/* map read fault as writable if possible */ +if (unlikely (!write_fault) && npages ==1 ) { +struct page *wpage[1 ]; - npages =__get_user_pages_fast (addr,1 ,1 , wpage); -if (npages ==1 ) { - *writable = true; -put_page (page[0 ]); - page[0 ] = wpage[0 ]; - } - npages =1 ; + npages =__get_user_pages_fast (addr,1 ,1 , wpage); +if (npages ==1 ) { + *writable = true; +put_page (page[0 ]); + page[0 ] = wpage[0 ]; } + npages =1 ; }if (unlikely (npages !=1 )) {
Quoted 9 lines · Lai Jiangshan
Atomic-able
hva_to_pfn()patches and allow-read-only-page patches are merged almost the same time. Buthva_to_pfn()does not handle these two issues well together.When @atomic && !@write_fault && host-is-read-only-page-mapped the code will return
fault_page, actually, it will be better if we return the pfn of the read-only-page.
This patch will conflict with not yet applied https://lkml.org/lkml/2011/2/1/94
What it the status of that patch?
Quoted 51 lines
Signed-off-by Lai Jiangshan <[email protected]>---
virt/kvm/kvm_main.c +12
-17@@ -1060,31 +1060,27 @@ static pfn_t hva_to_pfn(struct kvm *kvm, unsigned long addr, bool atomic,BUG_ON (!write_fault && !writable);if (writable) - *writable = true; + *writable = write_fault;if (atomic || async) - npages =__get_user_pages_fast (addr,1 ,1 , page); + npages =__get_user_pages_fast (addr,1 , write_fault, page);if (unlikely (npages !=1 ) && !atomic) {might_sleep (); - -if (writable) - *writable = write_fault; - npages =get_user_pages_fast (addr,1 , write_fault, page); + } -/* map read fault as writable if possible */ -if (unlikely (!write_fault) && npages ==1 ) { -struct page *wpage[1 ]; +/* map read fault as writable if possible */ +if (unlikely (!write_fault) && npages ==1 ) { +struct page *wpage[1 ]; - npages =__get_user_pages_fast (addr,1 ,1 , wpage); -if (npages ==1 ) { - *writable = true; -put_page (page[0 ]); - page[0 ] = wpage[0 ]; - } - npages =1 ; + npages =__get_user_pages_fast (addr,1 ,1 , wpage); +if (npages ==1 ) { + *writable = true; +put_page (page[0 ]); + page[0 ] = wpage[0 ]; } + npages =1 ; }if (unlikely (npages !=1 )) { --
Quoted 4 lines
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
--
Gleb.
Quoted 6 lines · Gleb Natapov
Quoted 5 lines · Lai Jiangshan
Atomic-able
hva_to_pfn()patches and allow-read-only-page patches are merged almost the same time. Buthva_to_pfn()does not handle these two issues well together.
Quoted 6 lines
Quoted 4 lines
When @atomic && !@write_fault && host-is-read-only-page-mapped the code will return
fault_page, actually, it will be better if we return the pfn of the read-only-page.This patch will conflict with not yet applied https://lkml.org/lkml/2011/2/1/94
What it the status of that patch?
I will update/resend this patch after the patch you referred applied.
Thanks,
Lai
Quoted 64 lines
Quoted 52 lines
Signed-off-by Lai Jiangshan <[email protected]>---
virt/kvm/kvm_main.c +12
-17@@ -1060,31 +1060,27 @@ static pfn_t hva_to_pfn(struct kvm *kvm, unsigned long addr, bool atomic,BUG_ON (!write_fault && !writable);if (writable) - *writable = true; + *writable = write_fault;if (atomic || async) - npages =__get_user_pages_fast (addr,1 ,1 , page); + npages =__get_user_pages_fast (addr,1 , write_fault, page);if (unlikely (npages !=1 ) && !atomic) {might_sleep (); - -if (writable) - *writable = write_fault; - npages =get_user_pages_fast (addr,1 , write_fault, page); + } -/* map read fault as writable if possible */ -if (unlikely (!write_fault) && npages ==1 ) { -struct page *wpage[1 ]; +/* map read fault as writable if possible */ +if (unlikely (!write_fault) && npages ==1 ) { +struct page *wpage[1 ]; - npages =__get_user_pages_fast (addr,1 ,1 , wpage); -if (npages ==1 ) { - *writable = true; -put_page (page[0 ]); - page[0 ] = wpage[0 ]; - } - npages =1 ; + npages =__get_user_pages_fast (addr,1 ,1 , wpage); +if (npages ==1 ) { + *writable = true; +put_page (page[0 ]); + page[0 ] = wpage[0 ]; } + npages =1 ; }if (unlikely (npages !=1 )) { --Quoted 4 lines
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/--
Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 10 lines · Lai Jiangshan
Atomic-able
hva_to_pfn()patches and allow-read-only-page patches are merged almost the same time. Buthva_to_pfn()does not handle these two issues well together.When @atomic && !@write_fault && host-is-read-only-page-mapped the code will return
fault_page, actually, it will be better if we return the pfn of the read-only-page.Signed-off-by Lai Jiangshan <[email protected]>
Lai,
For pte prefetch, user of atomic hva_to_pfn, the write_fault parameter is meaningless (since that information is only available for the pte being faulted).
Returning fault page for a read-only page is useful so that pte prefetch is aborted.