Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 856c6088 authored by Rusty Russell's avatar Rusty Russell
Browse files

lguest: rename switcher_page to switcher_pages.



There is a single page with the Switcher in it, but it's followed by 2
pages per Host CPU.

Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent c215a8b9
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -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);
@@ -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;
	}
@@ -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;
		}
@@ -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);
@@ -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;
}
@@ -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
@@ -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;

+1 −1
Original line number Diff line number Diff line
@@ -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;
+6 −6
Original line number Diff line number Diff line
@@ -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;
@@ -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)));
	}

@@ -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)));
}

@@ -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;

@@ -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;
}