Loading drivers/lguest/core.c +12 −12 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ unsigned long switcher_addr; static struct vm_struct *switcher_vma; static struct page **switcher_page; static struct page **switcher_pages; /* This One Big lock protects all inter-guest data structures. */ DEFINE_MUTEX(lguest_lock); Loading Loading @@ -56,9 +56,9 @@ static __init int map_switcher(void) * We allocate an array of struct page pointers. map_vm_area() wants * this, rather than just an array of pages. */ switcher_page = kmalloc(sizeof(switcher_page[0])*TOTAL_SWITCHER_PAGES, switcher_pages = kmalloc(sizeof(switcher_pages[0])*TOTAL_SWITCHER_PAGES, GFP_KERNEL); if (!switcher_page) { if (!switcher_pages) { err = -ENOMEM; goto out; } Loading @@ -68,8 +68,8 @@ static __init int map_switcher(void) * so we make sure they're zeroed. */ for (i = 0; i < TOTAL_SWITCHER_PAGES; i++) { switcher_page[i] = alloc_page(GFP_KERNEL|__GFP_ZERO); if (!switcher_page[i]) { switcher_pages[i] = alloc_page(GFP_KERNEL|__GFP_ZERO); if (!switcher_pages[i]) { err = -ENOMEM; goto free_some_pages; } Loading Loading @@ -110,7 +110,7 @@ static __init int map_switcher(void) * array of struct pages. It increments that pointer, but we don't * care. */ pagep = switcher_page; pagep = switcher_pages; err = map_vm_area(switcher_vma, PAGE_KERNEL_EXEC, &pagep); if (err) { printk("lguest: map_vm_area failed: %i\n", err); Loading @@ -135,8 +135,8 @@ static __init int map_switcher(void) i = TOTAL_SWITCHER_PAGES; free_some_pages: for (--i; i >= 0; i--) __free_pages(switcher_page[i], 0); kfree(switcher_page); __free_pages(switcher_pages[i], 0); kfree(switcher_pages); out: return err; } Loading @@ -151,8 +151,8 @@ static void unmap_switcher(void) vunmap(switcher_vma->addr); /* Now we just need to free the pages we copied the switcher into */ for (i = 0; i < TOTAL_SWITCHER_PAGES; i++) __free_pages(switcher_page[i], 0); kfree(switcher_page); __free_pages(switcher_pages[i], 0); kfree(switcher_pages); } /*H:032 Loading Loading @@ -326,7 +326,7 @@ static int __init init(void) goto out; /* Now we set up the pagetable implementation for the Guests. */ err = init_pagetables(switcher_page, SHARED_SWITCHER_PAGES); err = init_pagetables(switcher_pages, SHARED_SWITCHER_PAGES); if (err) goto unmap; Loading drivers/lguest/lg.h +1 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ #include <asm/lguest.h> void free_pagetables(void); int init_pagetables(struct page **switcher_page, unsigned int pages); int init_pagetables(struct page **switcher_pages, unsigned int pages); struct pgdir { unsigned long gpgdir; Loading drivers/lguest/page_tables.c +6 −6 Original line number Diff line number Diff line Loading @@ -1084,7 +1084,7 @@ static void free_switcher_pte_pages(void) * Currently the Switcher is less than a page long, so "pages" is always 1. */ static __init void populate_switcher_pte_page(unsigned int cpu, struct page *switcher_page[], struct page *switcher_pages[], unsigned int pages) { unsigned int i; Loading @@ -1092,7 +1092,7 @@ static __init void populate_switcher_pte_page(unsigned int cpu, /* The first entries are easy: they map the Switcher code. */ for (i = 0; i < pages; i++) { set_pte(&pte[i], mk_pte(switcher_page[i], set_pte(&pte[i], mk_pte(switcher_pages[i], __pgprot(_PAGE_PRESENT|_PAGE_ACCESSED))); } Loading @@ -1100,14 +1100,14 @@ static __init void populate_switcher_pte_page(unsigned int cpu, i = pages + cpu*2; /* First page (Guest registers) is writable from the Guest */ set_pte(&pte[i], pfn_pte(page_to_pfn(switcher_page[i]), set_pte(&pte[i], pfn_pte(page_to_pfn(switcher_pages[i]), __pgprot(_PAGE_PRESENT|_PAGE_ACCESSED|_PAGE_RW))); /* * The second page contains the "struct lguest_ro_state", and is * read-only. */ set_pte(&pte[i+1], pfn_pte(page_to_pfn(switcher_page[i+1]), set_pte(&pte[i+1], pfn_pte(page_to_pfn(switcher_pages[i+1]), __pgprot(_PAGE_PRESENT|_PAGE_ACCESSED))); } Loading @@ -1128,7 +1128,7 @@ static __init void populate_switcher_pte_page(unsigned int cpu, * At boot or module load time, init_pagetables() allocates and populates * the Switcher PTE page for each CPU. */ __init int init_pagetables(struct page **switcher_page, unsigned int pages) __init int init_pagetables(struct page **switcher_pages, unsigned int pages) { unsigned int i; Loading @@ -1138,7 +1138,7 @@ __init int init_pagetables(struct page **switcher_page, unsigned int pages) free_switcher_pte_pages(); return -ENOMEM; } populate_switcher_pte_page(i, switcher_page, pages); populate_switcher_pte_page(i, switcher_pages, pages); } return 0; } Loading Loading
drivers/lguest/core.c +12 −12 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ unsigned long switcher_addr; static struct vm_struct *switcher_vma; static struct page **switcher_page; static struct page **switcher_pages; /* This One Big lock protects all inter-guest data structures. */ DEFINE_MUTEX(lguest_lock); Loading Loading @@ -56,9 +56,9 @@ static __init int map_switcher(void) * We allocate an array of struct page pointers. map_vm_area() wants * this, rather than just an array of pages. */ switcher_page = kmalloc(sizeof(switcher_page[0])*TOTAL_SWITCHER_PAGES, switcher_pages = kmalloc(sizeof(switcher_pages[0])*TOTAL_SWITCHER_PAGES, GFP_KERNEL); if (!switcher_page) { if (!switcher_pages) { err = -ENOMEM; goto out; } Loading @@ -68,8 +68,8 @@ static __init int map_switcher(void) * so we make sure they're zeroed. */ for (i = 0; i < TOTAL_SWITCHER_PAGES; i++) { switcher_page[i] = alloc_page(GFP_KERNEL|__GFP_ZERO); if (!switcher_page[i]) { switcher_pages[i] = alloc_page(GFP_KERNEL|__GFP_ZERO); if (!switcher_pages[i]) { err = -ENOMEM; goto free_some_pages; } Loading Loading @@ -110,7 +110,7 @@ static __init int map_switcher(void) * array of struct pages. It increments that pointer, but we don't * care. */ pagep = switcher_page; pagep = switcher_pages; err = map_vm_area(switcher_vma, PAGE_KERNEL_EXEC, &pagep); if (err) { printk("lguest: map_vm_area failed: %i\n", err); Loading @@ -135,8 +135,8 @@ static __init int map_switcher(void) i = TOTAL_SWITCHER_PAGES; free_some_pages: for (--i; i >= 0; i--) __free_pages(switcher_page[i], 0); kfree(switcher_page); __free_pages(switcher_pages[i], 0); kfree(switcher_pages); out: return err; } Loading @@ -151,8 +151,8 @@ static void unmap_switcher(void) vunmap(switcher_vma->addr); /* Now we just need to free the pages we copied the switcher into */ for (i = 0; i < TOTAL_SWITCHER_PAGES; i++) __free_pages(switcher_page[i], 0); kfree(switcher_page); __free_pages(switcher_pages[i], 0); kfree(switcher_pages); } /*H:032 Loading Loading @@ -326,7 +326,7 @@ static int __init init(void) goto out; /* Now we set up the pagetable implementation for the Guests. */ err = init_pagetables(switcher_page, SHARED_SWITCHER_PAGES); err = init_pagetables(switcher_pages, SHARED_SWITCHER_PAGES); if (err) goto unmap; Loading
drivers/lguest/lg.h +1 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ #include <asm/lguest.h> void free_pagetables(void); int init_pagetables(struct page **switcher_page, unsigned int pages); int init_pagetables(struct page **switcher_pages, unsigned int pages); struct pgdir { unsigned long gpgdir; Loading
drivers/lguest/page_tables.c +6 −6 Original line number Diff line number Diff line Loading @@ -1084,7 +1084,7 @@ static void free_switcher_pte_pages(void) * Currently the Switcher is less than a page long, so "pages" is always 1. */ static __init void populate_switcher_pte_page(unsigned int cpu, struct page *switcher_page[], struct page *switcher_pages[], unsigned int pages) { unsigned int i; Loading @@ -1092,7 +1092,7 @@ static __init void populate_switcher_pte_page(unsigned int cpu, /* The first entries are easy: they map the Switcher code. */ for (i = 0; i < pages; i++) { set_pte(&pte[i], mk_pte(switcher_page[i], set_pte(&pte[i], mk_pte(switcher_pages[i], __pgprot(_PAGE_PRESENT|_PAGE_ACCESSED))); } Loading @@ -1100,14 +1100,14 @@ static __init void populate_switcher_pte_page(unsigned int cpu, i = pages + cpu*2; /* First page (Guest registers) is writable from the Guest */ set_pte(&pte[i], pfn_pte(page_to_pfn(switcher_page[i]), set_pte(&pte[i], pfn_pte(page_to_pfn(switcher_pages[i]), __pgprot(_PAGE_PRESENT|_PAGE_ACCESSED|_PAGE_RW))); /* * The second page contains the "struct lguest_ro_state", and is * read-only. */ set_pte(&pte[i+1], pfn_pte(page_to_pfn(switcher_page[i+1]), set_pte(&pte[i+1], pfn_pte(page_to_pfn(switcher_pages[i+1]), __pgprot(_PAGE_PRESENT|_PAGE_ACCESSED))); } Loading @@ -1128,7 +1128,7 @@ static __init void populate_switcher_pte_page(unsigned int cpu, * At boot or module load time, init_pagetables() allocates and populates * the Switcher PTE page for each CPU. */ __init int init_pagetables(struct page **switcher_page, unsigned int pages) __init int init_pagetables(struct page **switcher_pages, unsigned int pages) { unsigned int i; Loading @@ -1138,7 +1138,7 @@ __init int init_pagetables(struct page **switcher_page, unsigned int pages) free_switcher_pte_pages(); return -ENOMEM; } populate_switcher_pte_page(i, switcher_page, pages); populate_switcher_pte_page(i, switcher_pages, pages); } return 0; } Loading