]> xenbits.xensource.com Git - xen.git/commitdiff
x86/mm: add pv prefix to {set,destroy}_gdt
authorWei Liu <wei.liu2@citrix.com>
Wed, 13 Sep 2017 16:46:53 +0000 (17:46 +0100)
committerWei Liu <wei.liu2@citrix.com>
Fri, 22 Sep 2017 15:31:50 +0000 (16:31 +0100)
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>
Acked-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/domain.c
xen/arch/x86/mm.c
xen/arch/x86/x86_64/compat/mm.c
xen/include/asm-x86/processor.h
xen/include/asm-x86/pv/mm.h

index dbddc536d35bfa4e84916815e2f7f585d35f09d1..e9367bd8aaf8488d050b38394135c8de4d180457 100644 (file)
@@ -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);
             }
         }
 
index 4dbbe54cd72eceb9ee2afedcd874959100a87850..f892e7088859abd7d9c5acd42f10298eeb8b4059 100644 (file)
@@ -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);
index ef0ff86519ef4043efddddcdc6c4f6ea251a5dba..16ea2a80dfd519b34dbbb6f6577de6084cd21ff3 100644 (file)
@@ -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);
index 8b39fb4be9868ff3ecda12b2e0d85f4d3e1e1730..41a8d8c32f11646a049e1bf59f5397986be1c921 100644 (file)
@@ -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)
 {
index 9e22e4dfd4ce99a87391938eab57b7449d1fbed3..36692cfdf76cceecb2d95b4e1944796f4c14d0f3 100644 (file)
 
 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 <xen/errno.h>
 #include <xen/lib.h>
 
 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__ */