On 07/06/2010 01:48 PM, Xiao Guangrong wrote:
This function not only return the gfn's page but also the page number after @gfn in the slot @@ -923,15 +923,25 @@ static unsigned long gfn_to_hva_memslot(struct kvm_memory_slot *slot, gfn_t gfn) return slot->userspace_addr + (gfn - slot->base_gfn) * PAGE_SIZE; } -unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn) +static unsigned long gfn_to_hva_many(struct kvm *kvm, gfn_t gfn, int *entry) {
'entry' better be gfn_t. We limit gfns in a slot, but that's artificial, let's use the correct type.
Also suggest nr_pages as the name.
@@ -1011,6 +1021,23 @@ pfn_t gfn_to_pfn_memslot(struct kvm *kvm, return hva_to_pfn(kvm, addr, false); } +int gfn_to_page_many_atomic(struct kvm *kvm, gfn_t gfn, + struct page **pages, int nr_pages, bool *enough) +{ + unsigned long addr; + int entry, ret; + + addr = gfn_to_hva_many(kvm, gfn,&entry); + if (kvm_is_error_hva(addr)) + return -1; + + entry = min(entry, nr_pages); + *enough = (entry == nr_pages) ? true : false;
s/ ? true : false//; :) Why not return 0 if !enough?
+ ret = __get_user_pages_fast(addr, entry, 1, pages); + return ret; +} +EXPORT_SYMBOL_GPL(gfn_to_page_many_atomic); + struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn) { pfn_t pfn;
-- error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html