Commit 6b68f01b authored by Glauber de Oliveira Costa's avatar Glauber de Oliveira Costa Committed by Ingo Molnar

x86: unify struct desc_ptr

This patch unifies struct desc_ptr between i386 and x86_64.
They can be expressed in the exact same way in C code, only
having to change the name of one of them. As Xgt_desc_struct
is ugly and big, this is the one that goes away.

There's also a padding field in i386, but it is not really
needed in the C structure definition.
Signed-off-by: default avatarGlauber de Oliveira Costa <gcosta@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 6842ef0e
...@@ -70,9 +70,8 @@ void foo(void) ...@@ -70,9 +70,8 @@ void foo(void)
OFFSET(TI_cpu, thread_info, cpu); OFFSET(TI_cpu, thread_info, cpu);
BLANK(); BLANK();
OFFSET(GDS_size, Xgt_desc_struct, size); OFFSET(GDS_size, desc_ptr, size);
OFFSET(GDS_address, Xgt_desc_struct, address); OFFSET(GDS_address, desc_ptr, address);
OFFSET(GDS_pad, Xgt_desc_struct, pad);
BLANK(); BLANK();
OFFSET(PT_EBX, pt_regs, bx); OFFSET(PT_EBX, pt_regs, bx);
......
...@@ -649,7 +649,7 @@ struct pt_regs * __devinit idle_regs(struct pt_regs *regs) ...@@ -649,7 +649,7 @@ struct pt_regs * __devinit idle_regs(struct pt_regs *regs)
* it's on the real one. */ * it's on the real one. */
void switch_to_new_gdt(void) void switch_to_new_gdt(void)
{ {
struct Xgt_desc_struct gdt_descr; struct desc_ptr gdt_descr;
gdt_descr.address = (long)get_cpu_gdt_table(smp_processor_id()); gdt_descr.address = (long)get_cpu_gdt_table(smp_processor_id());
gdt_descr.size = GDT_SIZE - 1; gdt_descr.size = GDT_SIZE - 1;
......
...@@ -17,7 +17,7 @@ static unsigned long doublefault_stack[DOUBLEFAULT_STACKSIZE]; ...@@ -17,7 +17,7 @@ static unsigned long doublefault_stack[DOUBLEFAULT_STACKSIZE];
static void doublefault_fn(void) static void doublefault_fn(void)
{ {
struct Xgt_desc_struct gdt_desc = {0, 0}; struct desc_ptr gdt_desc = {0, 0};
unsigned long gdt, tss; unsigned long gdt, tss;
store_gdt(&gdt_desc); store_gdt(&gdt_desc);
......
...@@ -69,7 +69,7 @@ static void efi_call_phys_prelog(void) __acquires(efi_rt_lock) ...@@ -69,7 +69,7 @@ static void efi_call_phys_prelog(void) __acquires(efi_rt_lock)
{ {
unsigned long cr4; unsigned long cr4;
unsigned long temp; unsigned long temp;
struct Xgt_desc_struct gdt_descr; struct desc_ptr gdt_descr;
spin_lock(&efi_rt_lock); spin_lock(&efi_rt_lock);
local_irq_save(efi_rt_eflags); local_irq_save(efi_rt_eflags);
...@@ -111,7 +111,7 @@ static void efi_call_phys_prelog(void) __acquires(efi_rt_lock) ...@@ -111,7 +111,7 @@ static void efi_call_phys_prelog(void) __acquires(efi_rt_lock)
static void efi_call_phys_epilog(void) __releases(efi_rt_lock) static void efi_call_phys_epilog(void) __releases(efi_rt_lock)
{ {
unsigned long cr4; unsigned long cr4;
struct Xgt_desc_struct gdt_descr; struct desc_ptr gdt_descr;
gdt_descr.address = (unsigned long)get_cpu_gdt_table(0); gdt_descr.address = (unsigned long)get_cpu_gdt_table(0);
gdt_descr.size = GDT_SIZE - 1; gdt_descr.size = GDT_SIZE - 1;
......
...@@ -32,7 +32,7 @@ static u32 kexec_pte1[1024] PAGE_ALIGNED; ...@@ -32,7 +32,7 @@ static u32 kexec_pte1[1024] PAGE_ALIGNED;
static void set_idt(void *newidt, __u16 limit) static void set_idt(void *newidt, __u16 limit)
{ {
struct Xgt_desc_struct curidt; struct desc_ptr curidt;
/* ia32 supports unaliged loads & stores */ /* ia32 supports unaliged loads & stores */
curidt.size = limit; curidt.size = limit;
...@@ -44,7 +44,7 @@ static void set_idt(void *newidt, __u16 limit) ...@@ -44,7 +44,7 @@ static void set_idt(void *newidt, __u16 limit)
static void set_gdt(void *newgdt, __u16 limit) static void set_gdt(void *newgdt, __u16 limit)
{ {
struct Xgt_desc_struct curgdt; struct desc_ptr curgdt;
/* ia32 supports unaligned loads & stores */ /* ia32 supports unaligned loads & stores */
curgdt.size = limit; curgdt.size = limit;
......
...@@ -161,7 +161,7 @@ real_mode_gdt_entries [3] = ...@@ -161,7 +161,7 @@ real_mode_gdt_entries [3] =
0x000092000100ffffULL /* 16-bit real-mode 64k data at 0x00000100 */ 0x000092000100ffffULL /* 16-bit real-mode 64k data at 0x00000100 */
}; };
static struct Xgt_desc_struct static struct desc_ptr
real_mode_gdt = { sizeof (real_mode_gdt_entries) - 1, (long)real_mode_gdt_entries }, real_mode_gdt = { sizeof (real_mode_gdt_entries) - 1, (long)real_mode_gdt_entries },
real_mode_idt = { 0x3ff, 0 }, real_mode_idt = { 0x3ff, 0 },
no_idt = { 0, 0 }; no_idt = { 0, 0 };
......
...@@ -229,7 +229,7 @@ static void lguest_write_idt_entry(struct desc_struct *dt, ...@@ -229,7 +229,7 @@ static void lguest_write_idt_entry(struct desc_struct *dt,
/* Changing to a different IDT is very rare: we keep the IDT up-to-date every /* Changing to a different IDT is very rare: we keep the IDT up-to-date every
* time it is written, so we can simply loop through all entries and tell the * time it is written, so we can simply loop through all entries and tell the
* Host about them. */ * Host about them. */
static void lguest_load_idt(const struct Xgt_desc_struct *desc) static void lguest_load_idt(const struct desc_ptr *desc)
{ {
unsigned int i; unsigned int i;
struct desc_struct *idt = (void *)desc->address; struct desc_struct *idt = (void *)desc->address;
...@@ -252,7 +252,7 @@ static void lguest_load_idt(const struct Xgt_desc_struct *desc) ...@@ -252,7 +252,7 @@ static void lguest_load_idt(const struct Xgt_desc_struct *desc)
* hypercall and use that repeatedly to load a new IDT. I don't think it * hypercall and use that repeatedly to load a new IDT. I don't think it
* really matters, but wouldn't it be nice if they were the same? * really matters, but wouldn't it be nice if they were the same?
*/ */
static void lguest_load_gdt(const struct Xgt_desc_struct *desc) static void lguest_load_gdt(const struct desc_ptr *desc)
{ {
BUG_ON((desc->size+1)/8 != GDT_ENTRIES); BUG_ON((desc->size+1)/8 != GDT_ENTRIES);
hcall(LHCALL_LOAD_GDT, __pa(desc->address), GDT_ENTRIES, 0); hcall(LHCALL_LOAD_GDT, __pa(desc->address), GDT_ENTRIES, 0);
......
...@@ -295,7 +295,7 @@ static void xen_set_ldt(const void *addr, unsigned entries) ...@@ -295,7 +295,7 @@ static void xen_set_ldt(const void *addr, unsigned entries)
xen_mc_issue(PARAVIRT_LAZY_CPU); xen_mc_issue(PARAVIRT_LAZY_CPU);
} }
static void xen_load_gdt(const struct Xgt_desc_struct *dtr) static void xen_load_gdt(const struct desc_ptr *dtr)
{ {
unsigned long *frames; unsigned long *frames;
unsigned long va = dtr->address; unsigned long va = dtr->address;
...@@ -395,7 +395,7 @@ static int cvt_gate_to_trap(int vector, u32 low, u32 high, ...@@ -395,7 +395,7 @@ static int cvt_gate_to_trap(int vector, u32 low, u32 high,
} }
/* Locations of each CPU's IDT */ /* Locations of each CPU's IDT */
static DEFINE_PER_CPU(struct Xgt_desc_struct, idt_desc); static DEFINE_PER_CPU(struct desc_ptr, idt_desc);
/* Set an IDT entry. If the entry is part of the current IDT, then /* Set an IDT entry. If the entry is part of the current IDT, then
also update Xen. */ also update Xen. */
...@@ -427,7 +427,7 @@ static void xen_write_idt_entry(struct desc_struct *dt, int entrynum, ...@@ -427,7 +427,7 @@ static void xen_write_idt_entry(struct desc_struct *dt, int entrynum,
preempt_enable(); preempt_enable();
} }
static void xen_convert_trap_info(const struct Xgt_desc_struct *desc, static void xen_convert_trap_info(const struct desc_ptr *desc,
struct trap_info *traps) struct trap_info *traps)
{ {
unsigned in, out, count; unsigned in, out, count;
...@@ -446,7 +446,7 @@ static void xen_convert_trap_info(const struct Xgt_desc_struct *desc, ...@@ -446,7 +446,7 @@ static void xen_convert_trap_info(const struct Xgt_desc_struct *desc,
void xen_copy_trap_info(struct trap_info *traps) void xen_copy_trap_info(struct trap_info *traps)
{ {
const struct Xgt_desc_struct *desc = &__get_cpu_var(idt_desc); const struct desc_ptr *desc = &__get_cpu_var(idt_desc);
xen_convert_trap_info(desc, traps); xen_convert_trap_info(desc, traps);
} }
...@@ -454,7 +454,7 @@ void xen_copy_trap_info(struct trap_info *traps) ...@@ -454,7 +454,7 @@ void xen_copy_trap_info(struct trap_info *traps)
/* Load a new IDT into Xen. In principle this can be per-CPU, so we /* Load a new IDT into Xen. In principle this can be per-CPU, so we
hold a spinlock to protect the static traps[] array (static because hold a spinlock to protect the static traps[] array (static because
it avoids allocation, and saves stack space). */ it avoids allocation, and saves stack space). */
static void xen_load_idt(const struct Xgt_desc_struct *desc) static void xen_load_idt(const struct desc_ptr *desc)
{ {
static DEFINE_SPINLOCK(lock); static DEFINE_SPINLOCK(lock);
static struct trap_info traps[257]; static struct trap_info traps[257];
......
...@@ -290,7 +290,7 @@ static void svm_hardware_enable(void *garbage) ...@@ -290,7 +290,7 @@ static void svm_hardware_enable(void *garbage)
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
struct desc_ptr gdt_descr; struct desc_ptr gdt_descr;
#else #else
struct Xgt_desc_struct gdt_descr; struct desc_ptr gdt_descr;
#endif #endif
struct desc_struct *gdt; struct desc_struct *gdt;
int me = raw_smp_processor_id(); int me = raw_smp_processor_id();
......
...@@ -12,12 +12,6 @@ ...@@ -12,12 +12,6 @@
#include <asm/mmu.h> #include <asm/mmu.h>
struct Xgt_desc_struct {
unsigned short size;
unsigned long address __attribute__((packed));
unsigned short pad;
} __attribute__ ((packed));
struct gdt_page struct gdt_page
{ {
struct desc_struct gdt[GDT_ENTRIES]; struct desc_struct gdt[GDT_ENTRIES];
...@@ -29,7 +23,7 @@ static inline struct desc_struct *get_cpu_gdt_table(unsigned int cpu) ...@@ -29,7 +23,7 @@ static inline struct desc_struct *get_cpu_gdt_table(unsigned int cpu)
return per_cpu(gdt_page, cpu).gdt; return per_cpu(gdt_page, cpu).gdt;
} }
extern struct Xgt_desc_struct idt_descr; extern struct desc_ptr idt_descr;
extern struct desc_struct idt_table[]; extern struct desc_struct idt_table[];
extern void set_intr_gate(unsigned int irq, void * addr); extern void set_intr_gate(unsigned int irq, void * addr);
...@@ -107,22 +101,22 @@ static inline void native_load_tr_desc(void) ...@@ -107,22 +101,22 @@ static inline void native_load_tr_desc(void)
asm volatile("ltr %w0"::"q" (GDT_ENTRY_TSS*8)); asm volatile("ltr %w0"::"q" (GDT_ENTRY_TSS*8));
} }
static inline void native_load_gdt(const struct Xgt_desc_struct *dtr) static inline void native_load_gdt(const struct desc_ptr *dtr)
{ {
asm volatile("lgdt %0"::"m" (*dtr)); asm volatile("lgdt %0"::"m" (*dtr));
} }
static inline void native_load_idt(const struct Xgt_desc_struct *dtr) static inline void native_load_idt(const struct desc_ptr *dtr)
{ {
asm volatile("lidt %0"::"m" (*dtr)); asm volatile("lidt %0"::"m" (*dtr));
} }
static inline void native_store_gdt(struct Xgt_desc_struct *dtr) static inline void native_store_gdt(struct desc_ptr *dtr)
{ {
asm ("sgdt %0":"=m" (*dtr)); asm ("sgdt %0":"=m" (*dtr));
} }
static inline void native_store_idt(struct Xgt_desc_struct *dtr) static inline void native_store_idt(struct desc_ptr *dtr)
{ {
asm ("sidt %0":"=m" (*dtr)); asm ("sidt %0":"=m" (*dtr));
} }
......
...@@ -44,13 +44,13 @@ struct lguest_ro_state ...@@ -44,13 +44,13 @@ struct lguest_ro_state
{ {
/* Host information we need to restore when we switch back. */ /* Host information we need to restore when we switch back. */
u32 host_cr3; u32 host_cr3;
struct Xgt_desc_struct host_idt_desc; struct desc_ptr host_idt_desc;
struct Xgt_desc_struct host_gdt_desc; struct desc_ptr host_gdt_desc;
u32 host_sp; u32 host_sp;
/* Fields which are used when guest is running. */ /* Fields which are used when guest is running. */
struct Xgt_desc_struct guest_idt_desc; struct desc_ptr guest_idt_desc;
struct Xgt_desc_struct guest_gdt_desc; struct desc_ptr guest_gdt_desc;
struct i386_hw_tss guest_tss; struct i386_hw_tss guest_tss;
struct desc_struct guest_idt[IDT_ENTRIES]; struct desc_struct guest_idt[IDT_ENTRIES];
struct desc_struct guest_gdt[GDT_ENTRIES]; struct desc_struct guest_gdt[GDT_ENTRIES];
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
struct page; struct page;
struct thread_struct; struct thread_struct;
struct Xgt_desc_struct; struct desc_ptr;
struct tss_struct; struct tss_struct;
struct mm_struct; struct mm_struct;
struct desc_struct; struct desc_struct;
...@@ -88,10 +88,10 @@ struct pv_cpu_ops { ...@@ -88,10 +88,10 @@ struct pv_cpu_ops {
/* Segment descriptor handling */ /* Segment descriptor handling */
void (*load_tr_desc)(void); void (*load_tr_desc)(void);
void (*load_gdt)(const struct Xgt_desc_struct *); void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct Xgt_desc_struct *); void (*load_idt)(const struct desc_ptr *);
void (*store_gdt)(struct Xgt_desc_struct *); void (*store_gdt)(struct desc_ptr *);
void (*store_idt)(struct Xgt_desc_struct *); void (*store_idt)(struct desc_ptr *);
void (*set_ldt)(const void *desc, unsigned entries); void (*set_ldt)(const void *desc, unsigned entries);
unsigned long (*store_tr)(void); unsigned long (*store_tr)(void);
void (*load_tls)(struct thread_struct *t, unsigned int cpu); void (*load_tls)(struct thread_struct *t, unsigned int cpu);
...@@ -630,11 +630,11 @@ static inline void load_TR_desc(void) ...@@ -630,11 +630,11 @@ static inline void load_TR_desc(void)
{ {
PVOP_VCALL0(pv_cpu_ops.load_tr_desc); PVOP_VCALL0(pv_cpu_ops.load_tr_desc);
} }
static inline void load_gdt(const struct Xgt_desc_struct *dtr) static inline void load_gdt(const struct desc_ptr *dtr)
{ {
PVOP_VCALL1(pv_cpu_ops.load_gdt, dtr); PVOP_VCALL1(pv_cpu_ops.load_gdt, dtr);
} }
static inline void load_idt(const struct Xgt_desc_struct *dtr) static inline void load_idt(const struct desc_ptr *dtr)
{ {
PVOP_VCALL1(pv_cpu_ops.load_idt, dtr); PVOP_VCALL1(pv_cpu_ops.load_idt, dtr);
} }
...@@ -642,11 +642,11 @@ static inline void set_ldt(const void *addr, unsigned entries) ...@@ -642,11 +642,11 @@ static inline void set_ldt(const void *addr, unsigned entries)
{ {
PVOP_VCALL2(pv_cpu_ops.set_ldt, addr, entries); PVOP_VCALL2(pv_cpu_ops.set_ldt, addr, entries);
} }
static inline void store_gdt(struct Xgt_desc_struct *dtr) static inline void store_gdt(struct desc_ptr *dtr)
{ {
PVOP_VCALL1(pv_cpu_ops.store_gdt, dtr); PVOP_VCALL1(pv_cpu_ops.store_gdt, dtr);
} }
static inline void store_idt(struct Xgt_desc_struct *dtr) static inline void store_idt(struct desc_ptr *dtr)
{ {
PVOP_VCALL1(pv_cpu_ops.store_idt, dtr); PVOP_VCALL1(pv_cpu_ops.store_idt, dtr);
} }
......
...@@ -707,7 +707,7 @@ extern void enable_sep_cpu(void); ...@@ -707,7 +707,7 @@ extern void enable_sep_cpu(void);
extern int sysenter_setup(void); extern int sysenter_setup(void);
/* Defined in head.S */ /* Defined in head.S */
extern struct Xgt_desc_struct early_gdt_descr; extern struct desc_ptr early_gdt_descr;
extern void cpu_set_gdt(int); extern void cpu_set_gdt(int);
extern void switch_to_new_gdt(void); extern void switch_to_new_gdt(void);
......
...@@ -12,8 +12,8 @@ static inline int arch_prepare_suspend(void) { return 0; } ...@@ -12,8 +12,8 @@ static inline int arch_prepare_suspend(void) { return 0; }
struct saved_context { struct saved_context {
u16 es, fs, gs, ss; u16 es, fs, gs, ss;
unsigned long cr0, cr2, cr3, cr4; unsigned long cr0, cr2, cr3, cr4;
struct Xgt_desc_struct gdt; struct desc_ptr gdt;
struct Xgt_desc_struct idt; struct desc_ptr idt;
u16 ldt; u16 ldt;
u16 tss; u16 tss;
unsigned long tr; unsigned long tr;
......
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