diff mbox

[v5,09/23] x86/mm: add pv prefix to {set, destroy}_gdt

Message ID 20170914125852.22129-10-wei.liu2@citrix.com (mailing list archive)
State New, archived
Headers show

Commit Message

Wei Liu Sept. 14, 2017, 12:58 p.m. UTC
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 <wei.liu2@citrix.com>
---
 xen/arch/x86/domain.c           | 11 ++++++-----
 xen/arch/x86/mm.c               | 10 ++++------
 xen/arch/x86/x86_64/compat/mm.c |  4 +++-
 xen/include/asm-x86/processor.h |  5 -----
 xen/include/asm-x86/pv/mm.h     | 10 ++++++++++
 5 files changed, 23 insertions(+), 17 deletions(-)

Comments

Jan Beulich Sept. 22, 2017, 1:02 p.m. UTC | #1
>>> On 14.09.17 at 14:58, <wei.liu2@citrix.com> wrote:
> --- a/xen/include/asm-x86/pv/mm.h
> +++ b/xen/include/asm-x86/pv/mm.h
> @@ -25,14 +25,24 @@
>  
>  int pv_ro_page_fault(unsigned long addr, struct cpu_user_regs *regs);
>  
> +long pv_set_gdt(struct vcpu *d, unsigned long *frames, unsigned int entries);
> +void pv_destroy_gdt(struct vcpu *d);
> +
>  #else
>  
> +#include <xen/errno.h>
> +
>  static inline int pv_ro_page_fault(unsigned long addr,
>                                     struct cpu_user_regs *regs)
>  {
>      return 0;
>  }
>  
> +static inline long pv_set_gdt(struct vcpu *d, unsigned long *frames,
> +                              unsigned int entries)
> +{ return -EINVAL; }
> +static inline void pv_destroy_gdt(struct vcpu *d) {}

Please everywhere here switch the parameter names from d to v.
With that and again maybe ASSERT_UNREACHABLE() added to the
stubs
Acked-by: Jan Beulich <jbeulich@suse.com>

Jan
diff mbox

Patch

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 <compat/vcpu.h>
 #include <asm/psr.h>
 #include <asm/pv/domain.h>
+#include <asm/pv/mm.h>
 
 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 69a47d87d6..e505be7cf5 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -3858,7 +3858,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;
@@ -3877,9 +3877,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;
@@ -3906,7 +3904,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;
@@ -3945,7 +3943,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 <asm/mem_paging.h>
 #include <asm/mem_sharing.h>
 
+#include <asm/pv/mm.h>
+
 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 e251e1ef06..3ca24cc70a 100644
--- a/xen/include/asm-x86/pv/mm.h
+++ b/xen/include/asm-x86/pv/mm.h
@@ -25,14 +25,24 @@ 
 
 int pv_ro_page_fault(unsigned long addr, struct cpu_user_regs *regs);
 
+long pv_set_gdt(struct vcpu *d, unsigned long *frames, unsigned int entries);
+void pv_destroy_gdt(struct vcpu *d);
+
 #else
 
+#include <xen/errno.h>
+
 static inline int pv_ro_page_fault(unsigned long addr,
                                    struct cpu_user_regs *regs)
 {
     return 0;
 }
 
+static inline long pv_set_gdt(struct vcpu *d, unsigned long *frames,
+                              unsigned int entries)
+{ return -EINVAL; }
+static inline void pv_destroy_gdt(struct vcpu *d) {}
+
 #endif
 
 #endif /* __X86_PV_MM_H__ */