Commit a312b37b authored by Eduardo Habkost's avatar Eduardo Habkost Committed by Ingo Molnar

x86/paravirt: call paravirt_pagetable_setup_{start, done}

Call paravirt_pagetable_setup_{start,done}

These paravirt_ops functions were not being called on x86_64.
Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Cc: Stephen Tweedie <sct@redhat.com>
Cc: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 45158894
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <asm/desc.h> #include <asm/desc.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/arch_hooks.h> #include <asm/arch_hooks.h>
#include <asm/pgtable.h>
#include <asm/time.h> #include <asm/time.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
#include <asm/irq.h> #include <asm/irq.h>
...@@ -373,6 +374,9 @@ struct pv_mmu_ops pv_mmu_ops = { ...@@ -373,6 +374,9 @@ struct pv_mmu_ops pv_mmu_ops = {
#ifndef CONFIG_X86_64 #ifndef CONFIG_X86_64
.pagetable_setup_start = native_pagetable_setup_start, .pagetable_setup_start = native_pagetable_setup_start,
.pagetable_setup_done = native_pagetable_setup_done, .pagetable_setup_done = native_pagetable_setup_done,
#else
.pagetable_setup_start = paravirt_nop,
.pagetable_setup_done = paravirt_nop,
#endif #endif
.read_cr2 = native_read_cr2, .read_cr2 = native_read_cr2,
......
...@@ -819,7 +819,9 @@ void __init setup_arch(char **cmdline_p) ...@@ -819,7 +819,9 @@ void __init setup_arch(char **cmdline_p)
vmi_init(); vmi_init();
#endif #endif
paravirt_pagetable_setup_start(swapper_pg_dir);
paging_init(); paging_init();
paravirt_pagetable_setup_done(swapper_pg_dir);
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
map_vsyscall(); map_vsyscall();
......
...@@ -841,6 +841,7 @@ static __init void xen_set_pte_init(pte_t *ptep, pte_t pte) ...@@ -841,6 +841,7 @@ static __init void xen_set_pte_init(pte_t *ptep, pte_t pte)
static __init void xen_pagetable_setup_start(pgd_t *base) static __init void xen_pagetable_setup_start(pgd_t *base)
{ {
#ifdef CONFIG_X86_32
pgd_t *xen_pgd = (pgd_t *)xen_start_info->pt_base; pgd_t *xen_pgd = (pgd_t *)xen_start_info->pt_base;
int i; int i;
...@@ -886,6 +887,7 @@ static __init void xen_pagetable_setup_start(pgd_t *base) ...@@ -886,6 +887,7 @@ static __init void xen_pagetable_setup_start(pgd_t *base)
/* Unpin initial Xen pagetable */ /* Unpin initial Xen pagetable */
pin_pagetable_pfn(MMUEXT_UNPIN_TABLE, pin_pagetable_pfn(MMUEXT_UNPIN_TABLE,
PFN_DOWN(__pa(xen_start_info->pt_base))); PFN_DOWN(__pa(xen_start_info->pt_base)));
#endif /* CONFIG_X86_32 */
} }
void xen_setup_shared_info(void) void xen_setup_shared_info(void)
...@@ -927,9 +929,11 @@ static __init void xen_pagetable_setup_done(pgd_t *base) ...@@ -927,9 +929,11 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
xen_setup_shared_info(); xen_setup_shared_info();
#ifdef CONFIG_X86_32
/* Actually pin the pagetable down, but we can't set PG_pinned /* Actually pin the pagetable down, but we can't set PG_pinned
yet because the page structures don't exist yet. */ yet because the page structures don't exist yet. */
pin_pagetable_pfn(MMUEXT_PIN_L3_TABLE, PFN_DOWN(__pa(base))); pin_pagetable_pfn(MMUEXT_PIN_L3_TABLE, PFN_DOWN(__pa(base)));
#endif
} }
static __init void xen_post_allocator_init(void) static __init void xen_post_allocator_init(void)
......
...@@ -302,6 +302,14 @@ int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn, ...@@ -302,6 +302,14 @@ int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn,
/* Install a pte for a particular vaddr in kernel space. */ /* Install a pte for a particular vaddr in kernel space. */
void set_pte_vaddr(unsigned long vaddr, pte_t pte); void set_pte_vaddr(unsigned long vaddr, pte_t pte);
#ifdef CONFIG_X86_32
extern void native_pagetable_setup_start(pgd_t *base);
extern void native_pagetable_setup_done(pgd_t *base);
#else
static inline void native_pagetable_setup_start(pgd_t *base) {}
static inline void native_pagetable_setup_done(pgd_t *base) {}
#endif
#ifdef CONFIG_PARAVIRT #ifdef CONFIG_PARAVIRT
#include <asm/paravirt.h> #include <asm/paravirt.h>
#else /* !CONFIG_PARAVIRT */ #else /* !CONFIG_PARAVIRT */
...@@ -333,6 +341,16 @@ void set_pte_vaddr(unsigned long vaddr, pte_t pte); ...@@ -333,6 +341,16 @@ void set_pte_vaddr(unsigned long vaddr, pte_t pte);
#define pte_update(mm, addr, ptep) do { } while (0) #define pte_update(mm, addr, ptep) do { } while (0)
#define pte_update_defer(mm, addr, ptep) do { } while (0) #define pte_update_defer(mm, addr, ptep) do { } while (0)
static inline void __init paravirt_pagetable_setup_start(pgd_t *base)
{
native_pagetable_setup_start(base);
}
static inline void __init paravirt_pagetable_setup_done(pgd_t *base)
{
native_pagetable_setup_done(base);
}
#endif /* CONFIG_PARAVIRT */ #endif /* CONFIG_PARAVIRT */
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
......
...@@ -171,21 +171,6 @@ do { \ ...@@ -171,21 +171,6 @@ do { \
*/ */
#define update_mmu_cache(vma, address, pte) do { } while (0) #define update_mmu_cache(vma, address, pte) do { } while (0)
extern void native_pagetable_setup_start(pgd_t *base);
extern void native_pagetable_setup_done(pgd_t *base);
#ifndef CONFIG_PARAVIRT
static inline void __init paravirt_pagetable_setup_start(pgd_t *base)
{
native_pagetable_setup_start(base);
}
static inline void __init paravirt_pagetable_setup_done(pgd_t *base)
{
native_pagetable_setup_done(base);
}
#endif /* !CONFIG_PARAVIRT */
#endif /* !__ASSEMBLY__ */ #endif /* !__ASSEMBLY__ */
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment