[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 9/9] xen/grant-table: use apply_to_page_range_batch()



From: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>

No need to call the callback per-pte.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>
---
 arch/x86/xen/grant-table.c |   28 ++++++++++++++++++----------
 1 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/arch/x86/xen/grant-table.c b/arch/x86/xen/grant-table.c
index 5bf892a..11a8a45 100644
--- a/arch/x86/xen/grant-table.c
+++ b/arch/x86/xen/grant-table.c
@@ -44,19 +44,27 @@
 
 #include <asm/pgtable.h>
 
-static int map_pte_fn(pte_t *pte, unsigned long addr, void *data)
+static int map_pte_fn(pte_t *pte, unsigned count, unsigned long addr, void 
*data)
 {
        unsigned long **frames = (unsigned long **)data;
 
-       set_pte_at(&init_mm, addr, pte, mfn_pte((*frames)[0], PAGE_KERNEL));
-       (*frames)++;
+       while (count--) {
+               set_pte_at(&init_mm, addr, pte, mfn_pte((*frames)[0], 
PAGE_KERNEL));
+               (*frames)++;
+               pte++;
+               addr += PAGE_SIZE;
+       }
        return 0;
 }
 
-static int unmap_pte_fn(pte_t *pte, unsigned long addr, void *data)
+static int unmap_pte_fn(pte_t *pte, unsigned count, unsigned long addr, void 
*data)
 {
+       while (count--) {
+               pte_clear(&init_mm, addr, pte);
+               addr += PAGE_SIZE;
+               pte++;
+       }
 
-       set_pte_at(&init_mm, addr, pte, __pte(0));
        return 0;
 }
 
@@ -75,15 +83,15 @@ int arch_gnttab_map_shared(unsigned long *frames, unsigned 
long nr_gframes,
                *__shared = shared;
        }
 
-       rc = apply_to_page_range(&init_mm, (unsigned long)shared,
-                                PAGE_SIZE * nr_gframes,
-                                map_pte_fn, &frames);
+       rc = apply_to_page_range_batch(&init_mm, (unsigned long)shared,
+                                      PAGE_SIZE * nr_gframes,
+                                      map_pte_fn, &frames);
        return rc;
 }
 
 void arch_gnttab_unmap_shared(struct grant_entry *shared,
                              unsigned long nr_gframes)
 {
-       apply_to_page_range(&init_mm, (unsigned long)shared,
-                           PAGE_SIZE * nr_gframes, unmap_pte_fn, NULL);
+       apply_to_page_range_batch(&init_mm, (unsigned long)shared,
+                                 PAGE_SIZE * nr_gframes, unmap_pte_fn, NULL);
 }
-- 
1.7.3.3


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.