From: Wei Liu Date: Wed, 13 Sep 2017 16:46:53 +0000 (+0100) Subject: x86/mm: add pv prefix to {set,destroy}_gdt X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~1350 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e7a07839f13626c5eb1b8a2dbee8c5f57f84b090;p=xen.git x86/mm: add pv prefix to {set,destroy}_gdt Unfortunately they can't stay local to PV code because domain.c still needs them. Change their names and fix up call sites. The code will be moved later together with other descriptor table manipulation code. Also move the declarations to pv/mm.h and provide stubs. Signed-off-by: Wei Liu Acked-by: Jan Beulich --- diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index dbddc536d3..e9367bd8aa 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -64,6 +64,7 @@ #include #include #include +#include DEFINE_PER_CPU(struct vcpu *, curr_vcpu); @@ -992,7 +993,7 @@ int arch_set_info_guest( return rc; if ( !compat ) - rc = (int)set_gdt(v, c.nat->gdt_frames, c.nat->gdt_ents); + rc = (int)pv_set_gdt(v, c.nat->gdt_frames, c.nat->gdt_ents); else { unsigned long gdt_frames[ARRAY_SIZE(v->arch.pv_vcpu.gdt_frames)]; @@ -1002,7 +1003,7 @@ int arch_set_info_guest( return -EINVAL; for ( i = 0; i < n; ++i ) gdt_frames[i] = c.cmp->gdt_frames[i]; - rc = (int)set_gdt(v, gdt_frames, c.cmp->gdt_ents); + rc = (int)pv_set_gdt(v, gdt_frames, c.cmp->gdt_ents); } if ( rc != 0 ) return rc; @@ -1101,7 +1102,7 @@ int arch_set_info_guest( { if ( cr3_page ) put_page(cr3_page); - destroy_gdt(v); + pv_destroy_gdt(v); return rc; } @@ -1153,7 +1154,7 @@ int arch_vcpu_reset(struct vcpu *v) { if ( is_pv_vcpu(v) ) { - destroy_gdt(v); + pv_destroy_gdt(v); return vcpu_destroy_pagetables(v); } @@ -1896,7 +1897,7 @@ int domain_relinquish_resources(struct domain *d) * the LDT as it automatically gets squashed with the guest * mappings. */ - destroy_gdt(v); + pv_destroy_gdt(v); } } diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 4dbbe54cd7..f892e70888 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -3859,7 +3859,7 @@ long do_update_va_mapping_otherdomain(unsigned long va, u64 val64, * Descriptor Tables */ -void destroy_gdt(struct vcpu *v) +void pv_destroy_gdt(struct vcpu *v) { l1_pgentry_t *pl1e; unsigned int i; @@ -3878,9 +3878,7 @@ void destroy_gdt(struct vcpu *v) } -long set_gdt(struct vcpu *v, - unsigned long *frames, - unsigned int entries) +long pv_set_gdt(struct vcpu *v, unsigned long *frames, unsigned int entries) { struct domain *d = v->domain; l1_pgentry_t *pl1e; @@ -3907,7 +3905,7 @@ long set_gdt(struct vcpu *v, } /* Tear down the old GDT. */ - destroy_gdt(v); + pv_destroy_gdt(v); /* Install the new GDT. */ v->arch.pv_vcpu.gdt_ents = entries; @@ -3946,7 +3944,7 @@ long do_set_gdt(XEN_GUEST_HANDLE_PARAM(xen_ulong_t) frame_list, domain_lock(curr->domain); - if ( (ret = set_gdt(curr, frames, entries)) == 0 ) + if ( (ret = pv_set_gdt(curr, frames, entries)) == 0 ) flush_tlb_local(); domain_unlock(curr->domain); diff --git a/xen/arch/x86/x86_64/compat/mm.c b/xen/arch/x86/x86_64/compat/mm.c index ef0ff86519..16ea2a80df 100644 --- a/xen/arch/x86/x86_64/compat/mm.c +++ b/xen/arch/x86/x86_64/compat/mm.c @@ -6,6 +6,8 @@ #include #include +#include + int compat_set_gdt(XEN_GUEST_HANDLE_PARAM(uint) frame_list, unsigned int entries) { unsigned int i, nr_pages = (entries + 511) / 512; @@ -31,7 +33,7 @@ int compat_set_gdt(XEN_GUEST_HANDLE_PARAM(uint) frame_list, unsigned int entries domain_lock(current->domain); - if ( (ret = set_gdt(current, frames, entries)) == 0 ) + if ( (ret = pv_set_gdt(current, frames, entries)) == 0 ) flush_tlb_local(); domain_unlock(current->domain); diff --git a/xen/include/asm-x86/processor.h b/xen/include/asm-x86/processor.h index 8b39fb4be9..41a8d8c32f 100644 --- a/xen/include/asm-x86/processor.h +++ b/xen/include/asm-x86/processor.h @@ -467,11 +467,6 @@ extern void init_int80_direct_trap(struct vcpu *v); extern void write_ptbase(struct vcpu *v); -void destroy_gdt(struct vcpu *d); -long set_gdt(struct vcpu *d, - unsigned long *frames, - unsigned int entries); - /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */ static always_inline void rep_nop(void) { diff --git a/xen/include/asm-x86/pv/mm.h b/xen/include/asm-x86/pv/mm.h index 9e22e4dfd4..36692cfdf7 100644 --- a/xen/include/asm-x86/pv/mm.h +++ b/xen/include/asm-x86/pv/mm.h @@ -25,8 +25,12 @@ int pv_ro_page_fault(unsigned long addr, struct cpu_user_regs *regs); +long pv_set_gdt(struct vcpu *v, unsigned long *frames, unsigned int entries); +void pv_destroy_gdt(struct vcpu *v); + #else +#include #include static inline int pv_ro_page_fault(unsigned long addr, @@ -36,6 +40,11 @@ static inline int pv_ro_page_fault(unsigned long addr, return 0; } +static inline long pv_set_gdt(struct vcpu *v, unsigned long *frames, + unsigned int entries) +{ ASSERT_UNREACHABLE(); return -EINVAL; } +static inline void pv_destroy_gdt(struct vcpu *v) { ASSERT_UNREACHABLE(); } + #endif #endif /* __X86_PV_MM_H__ */