#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);
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)];
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;
{
if ( cr3_page )
put_page(cr3_page);
- destroy_gdt(v);
+ pv_destroy_gdt(v);
return rc;
}
{
if ( is_pv_vcpu(v) )
{
- destroy_gdt(v);
+ pv_destroy_gdt(v);
return vcpu_destroy_pagetables(v);
}
* the LDT as it automatically gets squashed with the guest
* mappings.
*/
- destroy_gdt(v);
+ pv_destroy_gdt(v);
}
}
* Descriptor Tables
*/
-void destroy_gdt(struct vcpu *v)
+void pv_destroy_gdt(struct vcpu *v)
{
l1_pgentry_t *pl1e;
unsigned int i;
}
-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;
}
/* Tear down the old GDT. */
- destroy_gdt(v);
+ pv_destroy_gdt(v);
/* Install the new GDT. */
v->arch.pv_vcpu.gdt_ents = entries;
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);
#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;
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);
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)
{
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,
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__ */