aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2013-04-22 00:40:40 -0400
committerRusty Russell <rusty@rustcorp.com.au>2013-04-22 02:15:00 -0400
commitf1f394b1c33d93416c90f97e201d4d386c04af55 (patch)
tree344d79f8fcdf66c32bf4032eb05798dc70b6c8c8
parent17427e08faae3e63271a9c2d0edb6a22e5fbb54b (diff)
lguest: expost switcher_pages array (as lg_switcher_pages).
We will need this in page_table.c soon. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-rw-r--r--drivers/lguest/core.c25
-rw-r--r--drivers/lguest/lg.h1
2 files changed, 14 insertions, 12 deletions
diff --git a/drivers/lguest/core.c b/drivers/lguest/core.c
index 4209065b9b1e..b6c71c32308c 100644
--- a/drivers/lguest/core.c
+++ b/drivers/lguest/core.c
@@ -21,8 +21,8 @@
21#include "lg.h" 21#include "lg.h"
22 22
23unsigned long switcher_addr; 23unsigned long switcher_addr;
24struct page **lg_switcher_pages;
24static struct vm_struct *switcher_vma; 25static struct vm_struct *switcher_vma;
25static struct page **switcher_pages;
26 26
27/* This One Big lock protects all inter-guest data structures. */ 27/* This One Big lock protects all inter-guest data structures. */
28DEFINE_MUTEX(lguest_lock); 28DEFINE_MUTEX(lguest_lock);
@@ -63,9 +63,10 @@ static __init int map_switcher(void)
63 * We allocate an array of struct page pointers. map_vm_area() wants 63 * We allocate an array of struct page pointers. map_vm_area() wants
64 * this, rather than just an array of pages. 64 * this, rather than just an array of pages.
65 */ 65 */
66 switcher_pages = kmalloc(sizeof(switcher_pages[0])*TOTAL_SWITCHER_PAGES, 66 lg_switcher_pages = kmalloc(sizeof(lg_switcher_pages[0])
67 GFP_KERNEL); 67 * TOTAL_SWITCHER_PAGES,
68 if (!switcher_pages) { 68 GFP_KERNEL);
69 if (!lg_switcher_pages) {
69 err = -ENOMEM; 70 err = -ENOMEM;
70 goto out; 71 goto out;
71 } 72 }
@@ -75,8 +76,8 @@ static __init int map_switcher(void)
75 * so we make sure they're zeroed. 76 * so we make sure they're zeroed.
76 */ 77 */
77 for (i = 0; i < TOTAL_SWITCHER_PAGES; i++) { 78 for (i = 0; i < TOTAL_SWITCHER_PAGES; i++) {
78 switcher_pages[i] = alloc_page(GFP_KERNEL|__GFP_ZERO); 79 lg_switcher_pages[i] = alloc_page(GFP_KERNEL|__GFP_ZERO);
79 if (!switcher_pages[i]) { 80 if (!lg_switcher_pages[i]) {
80 err = -ENOMEM; 81 err = -ENOMEM;
81 goto free_some_pages; 82 goto free_some_pages;
82 } 83 }
@@ -117,7 +118,7 @@ static __init int map_switcher(void)
117 * array of struct pages. It increments that pointer, but we don't 118 * array of struct pages. It increments that pointer, but we don't
118 * care. 119 * care.
119 */ 120 */
120 pagep = switcher_pages; 121 pagep = lg_switcher_pages;
121 err = map_vm_area(switcher_vma, PAGE_KERNEL_EXEC, &pagep); 122 err = map_vm_area(switcher_vma, PAGE_KERNEL_EXEC, &pagep);
122 if (err) { 123 if (err) {
123 printk("lguest: map_vm_area failed: %i\n", err); 124 printk("lguest: map_vm_area failed: %i\n", err);
@@ -142,8 +143,8 @@ free_pages:
142 i = TOTAL_SWITCHER_PAGES; 143 i = TOTAL_SWITCHER_PAGES;
143free_some_pages: 144free_some_pages:
144 for (--i; i >= 0; i--) 145 for (--i; i >= 0; i--)
145 __free_pages(switcher_pages[i], 0); 146 __free_pages(lg_switcher_pages[i], 0);
146 kfree(switcher_pages); 147 kfree(lg_switcher_pages);
147out: 148out:
148 return err; 149 return err;
149} 150}
@@ -158,8 +159,8 @@ static void unmap_switcher(void)
158 vunmap(switcher_vma->addr); 159 vunmap(switcher_vma->addr);
159 /* Now we just need to free the pages we copied the switcher into */ 160 /* Now we just need to free the pages we copied the switcher into */
160 for (i = 0; i < TOTAL_SWITCHER_PAGES; i++) 161 for (i = 0; i < TOTAL_SWITCHER_PAGES; i++)
161 __free_pages(switcher_pages[i], 0); 162 __free_pages(lg_switcher_pages[i], 0);
162 kfree(switcher_pages); 163 kfree(lg_switcher_pages);
163} 164}
164 165
165/*H:032 166/*H:032
@@ -333,7 +334,7 @@ static int __init init(void)
333 goto out; 334 goto out;
334 335
335 /* Now we set up the pagetable implementation for the Guests. */ 336 /* Now we set up the pagetable implementation for the Guests. */
336 err = init_pagetables(switcher_pages); 337 err = init_pagetables(lg_switcher_pages);
337 if (err) 338 if (err)
338 goto unmap; 339 goto unmap;
339 340
diff --git a/drivers/lguest/lg.h b/drivers/lguest/lg.h
index 4c3e532d50d6..9a345efa83e4 100644
--- a/drivers/lguest/lg.h
+++ b/drivers/lguest/lg.h
@@ -124,6 +124,7 @@ bool lguest_address_ok(const struct lguest *lg,
124 unsigned long addr, unsigned long len); 124 unsigned long addr, unsigned long len);
125void __lgread(struct lg_cpu *, void *, unsigned long, unsigned); 125void __lgread(struct lg_cpu *, void *, unsigned long, unsigned);
126void __lgwrite(struct lg_cpu *, unsigned long, const void *, unsigned); 126void __lgwrite(struct lg_cpu *, unsigned long, const void *, unsigned);
127extern struct page **lg_switcher_pages;
127 128
128/*H:035 129/*H:035
129 * Using memory-copy operations like that is usually inconvient, so we 130 * Using memory-copy operations like that is usually inconvient, so we