]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/mini-os.git/commitdiff
mini-os: export allocate_ondemand
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 18 Jul 2008 14:45:06 +0000 (15:45 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 18 Jul 2008 14:45:06 +0000 (15:45 +0100)
allocate_ondemand can be used to allocate addresse space. Primarily
used for mapping MFNs, it can also be used e.g. to map grant refs.

Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
arch/ia64/mm.c
arch/x86/mm.c
include/mm.h

index 273430da8b42ab70d58309bce03874bdeddd364b..916e2f610bfd3f06622816b026829c469df8137c 100644 (file)
@@ -130,6 +130,11 @@ arch_init_demand_mapping_area(unsigned long max_pfn)
        max_pfn = max_pfn;
 }
 
+unsigned long allocate_ondemand(unsigned long n, unsigned long alignment)
+{
+        return 0;
+}
+
 /* Helper function used in gnttab.c. */
 void do_map_frames(unsigned long addr,
         unsigned long *f, unsigned long n, unsigned long stride,
index e528647ca8fb77ec794673320f5e703a7a71394a..b1c0084fe7420288198fac63f45597be7cef239a 100644 (file)
@@ -492,9 +492,7 @@ void do_map_frames(unsigned long addr,
     }
 }
 
-void *map_frames_ex(unsigned long *f, unsigned long n, unsigned long stride,
-       unsigned long increment, unsigned long alignment, domid_t id,
-       int may_fail, unsigned long prot)
+unsigned long allocate_ondemand(unsigned long n, unsigned long alignment)
 {
     unsigned long x;
     unsigned long y = 0;
@@ -517,13 +515,24 @@ void *map_frames_ex(unsigned long *f, unsigned long n, unsigned long stride,
     }
     if (y != n) {
         printk("Failed to find %ld frames!\n", n);
-        return NULL;
+        return 0;
     }
+    return demand_map_area_start + x * PAGE_SIZE;
+}
+
+void *map_frames_ex(unsigned long *f, unsigned long n, unsigned long stride,
+       unsigned long increment, unsigned long alignment, domid_t id,
+       int may_fail, unsigned long prot)
+{
+    unsigned long addr = allocate_ondemand(n, alignment);
+
+    if (!addr)
+        return NULL;
 
     /* Found it at x.  Map it in. */
-    do_map_frames(demand_map_area_start + x * PAGE_SIZE, f, n, stride, increment, id, may_fail, prot);
+    do_map_frames(addr, f, n, stride, increment, id, may_fail, prot);
 
-    return (void *)(unsigned long)(demand_map_area_start + x * PAGE_SIZE);
+    return (void *)addr;
 }
 
 static void clear_bootstrap(void)
index dd7a6ba311ab6f1f4dd7cab833f322e684c0c1e0..32ce7d93f6cba0d5817f0d5cc65ee7bc1f6544af 100644 (file)
@@ -63,6 +63,7 @@ void arch_init_demand_mapping_area(unsigned long max_pfn);
 void arch_init_mm(unsigned long* start_pfn_p, unsigned long* max_pfn_p);
 void arch_init_p2m(unsigned long max_pfn_p);
 
+unsigned long allocate_ondemand(unsigned long n, unsigned long alignment);
 /* map f[i*stride]+i*increment for i in 0..n-1, aligned on alignment pages */
 void *map_frames_ex(unsigned long *f, unsigned long n, unsigned long stride,
        unsigned long increment, unsigned long alignment, domid_t id,