| 
         
xen-devel
[Xen-devel] [patch 08/33] xen: Allocate and free vmalloc areas
 
| 
To:  | 
Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, Andi Kleen <ak@xxxxxxx> | 
 
| 
Subject:  | 
[Xen-devel] [patch 08/33] xen: Allocate and free vmalloc areas | 
 
| 
From:  | 
Jeremy Fitzhardinge <jeremy@xxxxxxxx> | 
 
| 
Date:  | 
Tue, 22 May 2007 15:09:49 +0100 | 
 
| 
Cc:  | 
Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>,	Ian Pratt <ian.pratt@xxxxxxxxxxxxx>, Andi Kleen <ak@xxxxxx>,	lkml <linux-kernel@xxxxxxxxxxxxxxx>, Jan Beulich <JBeulich@xxxxxxxxxx>,	Chris Wright <chrisw@xxxxxxxxxxxx>, virtualization@xxxxxxxxxxxxxx,	Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>,	Christian Limpach <Christian.Limpach@xxxxxxxxxxxx> | 
 
| 
Delivery-date:  | 
Tue, 22 May 2007 07:51:52 -0700 | 
 
| 
Envelope-to:  | 
www-data@xxxxxxxxxxxxxxxxxx | 
 
| 
List-help:  | 
<mailto:xen-devel-request@lists.xensource.com?subject=help> | 
 
| 
List-id:  | 
Xen developer discussion <xen-devel.lists.xensource.com> | 
 
| 
List-post:  | 
<mailto:xen-devel@lists.xensource.com> | 
 
| 
List-subscribe:  | 
<http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>,	<mailto:xen-devel-request@lists.xensource.com?subject=subscribe> | 
 
| 
List-unsubscribe:  | 
<http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>,	<mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe> | 
 
| 
References:  | 
<20070522140941.802382212@xxxxxxxx> | 
 
| 
Sender:  | 
xen-devel-bounces@xxxxxxxxxxxxxxxxxxx | 
 
| 
User-agent:  | 
quilt/0.46-1 | 
 
 
 
Allocate/release a chunk of vmalloc address space:
 alloc_vm_area reserves a chunk of address space, and makes sure all
 the pagetables are constructed for that address range - but no pages.
 free_vm_area releases the address space range.
Signed-off-by: Jeremy Fitzhardinge <jeremy@xxxxxxxxxxxxx>
Signed-off-by: Ian Pratt <ian.pratt@xxxxxxxxxxxxx>
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>
Signed-off-by: Chris Wright <chrisw@xxxxxxxxxxxx>
Cc: "Jan Beulich" <JBeulich@xxxxxxxxxx>
Cc: "Andi Kleen" <ak@xxxxxx>
---
 include/linux/vmalloc.h |    4 +++
 mm/vmalloc.c            |   53 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 57 insertions(+)
===================================================================
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h
@@ -69,6 +69,10 @@ extern int map_vm_area(struct vm_struct 
                        struct page ***pages);
 extern void unmap_vm_area(struct vm_struct *area);
 
+/* Allocate/destroy a 'vmalloc' VM area. */
+extern struct vm_struct *alloc_vm_area(size_t size);
+extern void free_vm_area(struct vm_struct *area);
+
 /*
  *     Internals.  Dont't use..
  */
===================================================================
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -762,3 +762,56 @@ void  __attribute__((weak)) vmalloc_sync
 void  __attribute__((weak)) vmalloc_sync_all(void)
 {
 }
+
+
+static int f(pte_t *pte, struct page *pmd_page, unsigned long addr, void *data)
+{
+       /* apply_to_page_range() does all the hard work. */
+       return 0;
+}
+
+/**
+ *     alloc_vm_area - allocate a range of kernel address space
+ *     @size:          size of the area
+ *     @returns:       NULL on failure, vm_struct on success
+ *
+ *     This function reserves a range of kernel address space, and
+ *     allocates pagetables to map that range.  No actual mappings
+ *     are created.  If the kernel address space is not shared
+ *     between processes, it syncs the pagetable across all
+ *     processes.
+ */
+struct vm_struct *alloc_vm_area(size_t size)
+{
+       struct vm_struct *area;
+
+       area = get_vm_area(size, VM_IOREMAP);
+       if (area == NULL)
+               return NULL;
+
+       /*
+        * This ensures that page tables are constructed for this region
+        * of kernel virtual address space and mapped into init_mm.
+        */
+       if (apply_to_page_range(&init_mm, (unsigned long)area->addr,
+                               area->size, f, NULL)) {
+               free_vm_area(area);
+               return NULL;
+       }
+
+       /* Make sure the pagetables are constructed in process kernel
+          mappings */
+       vmalloc_sync_all();
+
+       return area;
+}
+EXPORT_SYMBOL_GPL(alloc_vm_area);
+
+void free_vm_area(struct vm_struct *area)
+{
+       struct vm_struct *ret;
+       ret = remove_vm_area(area->addr);
+       BUG_ON(ret != area);
+       kfree(area);
+}
+EXPORT_SYMBOL_GPL(free_vm_area);
-- 
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
 |   
 
| <Prev in Thread] | 
Current Thread | 
[Next in Thread>
 |  
- [Xen-devel] [patch 00/33] xen: Xen paravirt_ops implementation, Jeremy Fitzhardinge
- [Xen-devel] [patch 02/33] xen: paravirt: add a hook for once the	allocator is ready, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 04/33] xen: paravirt: unstatic leave_mm, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 01/33] xen: paravirt: add an "mm" argument to	alloc_pt, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 03/33] xen: paravirt: increase IRQ limit, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 07/33] xen: paravirt: export __supported_pte_mask, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 05/33] xen: paravirt: unstatic smp_store_cpu_info, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 06/33] xen: paravirt: make siblingmap functions	visible, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 08/33] xen: Allocate and free vmalloc areas,
Jeremy Fitzhardinge <=
 
- [Xen-devel] [patch 09/33] xen: Add nosegneg capability to the	vsyscall page notes, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 17/33] xen: Complete pagetable pinning for Xen, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 19/33] xen: Account for time stolen by Xen, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 24/33] xen: xen: hack to prevent bad segment	register reload, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 12/33] xen: Xen virtual mmu, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 13/33] xen: xen event channels, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 15/33] xen: xen configuration, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 18/33] xen: xen: ignore RW mapping of RO pages	in pagetable_init, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 20/33] xen: Implement xen_sched_clock, Jeremy Fitzhardinge
 
- [Xen-devel] [patch 14/33] xen: xen time implementation, Jeremy Fitzhardinge
 
 
 
 
 |  
  
 | 
    |