static u8 *map_code_page(struct per_cpu *cpu_data, unsigned long pc,
unsigned long page_table_addr, u8 *current_page)
{
+ struct guest_paging_structures pg_structs = {
+ x86_64_paging, page_table_addr
+ };
/* If page offset is 0, previous pc was pointing to a different page,
* and we have to map a new one now. */
if (current_page && ((pc & ~PAGE_MASK) != 0))
return current_page;
- return page_map_get_guest_page(cpu_data, x86_64_paging,
- page_table_addr, pc,
+ return page_map_get_guest_page(cpu_data, &pg_structs, pc,
PAGE_READONLY_FLAGS);
}
page_table_t root_table;
};
+struct guest_paging_structures {
+ const struct paging *root_paging;
+ unsigned long root_table_gphys;
+};
+
#include <asm/paging_modes.h>
extern struct page_pool mem_pool;
enum page_map_coherent coherent);
void *page_map_get_guest_page(struct per_cpu *cpu_data,
- const struct paging *paging,
- unsigned long page_table_gphys,
+ const struct guest_paging_structures *pg_structs,
unsigned long virt, unsigned long flags);
int paging_init(void);
}
void *page_map_get_guest_page(struct per_cpu *cpu_data,
- const struct paging *paging,
- unsigned long page_table_gphys,
+ const struct guest_paging_structures *pg_structs,
unsigned long virt, unsigned long flags)
{
+ unsigned long page_table_gphys = pg_structs->root_table_gphys;
+ const struct paging *paging = pg_structs->root_paging;
unsigned long page_virt, phys, gphys;
pt_entry_t pte;
int err;