mini-os: export allocate_ondemand
PATCH 1/1 mini-os: export allocate_ondemand
mini-os: export allocate_ondemand
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 <[email protected]>
extras/mini-os/arch/ia64/mm.c +5 -0
@@ -130,6 +130,11 @@ 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,
extras/mini-os/arch/x86/mm.c +15 -6
@@ -492,9 +492,7 @@ } } -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 @@ }if (y != n) {printk ("Failed to find %ld frames!\n" , n); +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 )
extras/mini-os/include/mm.h +1 -0
@@ -65,6 +65,7 @@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,