diff options
-rw-r--r-- | sys/amd64/amd64/locore.S | 4 | ||||
-rw-r--r-- | sys/amd64/amd64/locore.s | 4 | ||||
-rw-r--r-- | sys/amd64/amd64/machdep.c | 22 | ||||
-rw-r--r-- | sys/amd64/amd64/trap.c | 5 | ||||
-rw-r--r-- | sys/amd64/include/segments.h | 4 | ||||
-rw-r--r-- | sys/i386/i386/locore.s | 4 | ||||
-rw-r--r-- | sys/i386/i386/machdep.c | 22 | ||||
-rw-r--r-- | sys/i386/i386/trap.c | 5 | ||||
-rw-r--r-- | sys/i386/include/segments.h | 4 | ||||
-rw-r--r-- | sys/kern/subr_trap.c | 5 |
10 files changed, 36 insertions, 43 deletions
diff --git a/sys/amd64/amd64/locore.S b/sys/amd64/amd64/locore.S index 4e29fd4..fbede9b 100644 --- a/sys/amd64/amd64/locore.S +++ b/sys/amd64/amd64/locore.S @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)locore.s 7.3 (Berkeley) 5/13/91 - * $Id: locore.s,v 1.122 1999/05/09 19:01:49 peter Exp $ + * $Id: locore.s,v 1.123 1999/06/01 18:19:39 jlemon Exp $ * * originally from: locore.s, by William F. Jolitz * @@ -958,7 +958,7 @@ bdb_prepare_paging: movl %eax,R(bdb_bpt_ljmp+1) movl 24+2(%esi),%eax movw %ax,R(bdb_bpt_ljmp+5) - movl $R(_idt),%edi + movl R(_idt),%edi movl %edi,2(%esp) /* prepare to load kernel idt */ movl $8*4/4,%ecx cld diff --git a/sys/amd64/amd64/locore.s b/sys/amd64/amd64/locore.s index 4e29fd4..fbede9b 100644 --- a/sys/amd64/amd64/locore.s +++ b/sys/amd64/amd64/locore.s @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)locore.s 7.3 (Berkeley) 5/13/91 - * $Id: locore.s,v 1.122 1999/05/09 19:01:49 peter Exp $ + * $Id: locore.s,v 1.123 1999/06/01 18:19:39 jlemon Exp $ * * originally from: locore.s, by William F. Jolitz * @@ -958,7 +958,7 @@ bdb_prepare_paging: movl %eax,R(bdb_bpt_ljmp+1) movl 24+2(%esi),%eax movw %ax,R(bdb_bpt_ljmp+5) - movl $R(_idt),%edi + movl R(_idt),%edi movl %edi,2(%esp) /* prepare to load kernel idt */ movl $8*4/4,%ecx cld diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index ae9df8b..7cc1e5f 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.340 1999/06/10 02:48:51 jlemon Exp $ + * $Id: machdep.c,v 1.341 1999/06/13 19:20:25 alc Exp $ */ #include "apm.h" @@ -887,7 +887,8 @@ union descriptor gdt[NGDT * NCPU]; /* global descriptor table */ #else union descriptor gdt[NGDT]; /* global descriptor table */ #endif -struct gate_descriptor idt[NIDT]; /* interrupt descriptor table */ +static struct gate_descriptor idt0[NIDT]; +struct gate_descriptor *idt = &idt0[0]; /* interrupt descriptor table */ union descriptor ldt[NLDT]; /* local descriptor table */ #ifdef SMP /* table descriptors - used to load tables by microp */ @@ -900,7 +901,6 @@ extern struct segment_descriptor common_tssd, *tss_gdt; int private_tss; /* flag indicating private tss */ #if defined(I586_CPU) && !defined(NO_F00F_HACK) -struct gate_descriptor *t_idt; extern int has_f00f_bug; #endif @@ -1090,11 +1090,7 @@ setidt(idx, func, typ, dpl, selec) { struct gate_descriptor *ip; -#if defined(I586_CPU) && !defined(NO_F00F_HACK) - ip = (t_idt != NULL ? t_idt : idt) + idx; -#else ip = idt + idx; -#endif ip->gd_looffset = (int)func; ip->gd_selector = selec; ip->gd_stkcpy = 0; @@ -1610,7 +1606,7 @@ init386(first) setidt(0x80, &IDTVEC(int0x80_syscall), SDT_SYS386TGT, SEL_UPL, GSEL(GCODE_SEL, SEL_KPL)); - r_idt.rd_limit = sizeof(idt) - 1; + r_idt.rd_limit = sizeof(idt0) - 1; r_idt.rd_base = (int) idt; lidt(&r_idt); @@ -1714,6 +1710,7 @@ SYSINIT(f00f_hack, SI_SUB_INTRINSIC, SI_ORDER_FIRST, f00f_hack, NULL); static void f00f_hack(void *unused) { + struct gate_descriptor *new_idt; #ifndef SMP struct region_descriptor r_idt; #endif @@ -1724,7 +1721,7 @@ f00f_hack(void *unused) { printf("Intel Pentium detected, installing workaround for F00F bug\n"); - r_idt.rd_limit = sizeof(idt) - 1; + r_idt.rd_limit = sizeof(idt0) - 1; tmp = kmem_alloc(kernel_map, PAGE_SIZE * 2); if (tmp == 0) @@ -1732,10 +1729,11 @@ f00f_hack(void *unused) { if (((unsigned int)tmp & (PAGE_SIZE-1)) != 0) panic("kmem_alloc returned non-page-aligned memory"); /* Put the first seven entries in the lower page */ - t_idt = (struct gate_descriptor*)(tmp + PAGE_SIZE - (7*8)); - bcopy(idt, t_idt, sizeof(idt)); - r_idt.rd_base = (int)t_idt; + new_idt = (struct gate_descriptor*)(tmp + PAGE_SIZE - (7*8)); + bcopy(idt, new_idt, sizeof(idt0)); + r_idt.rd_base = (int)new_idt; lidt(&r_idt); + idt = new_idt; if (vm_map_protect(kernel_map, tmp, tmp + PAGE_SIZE, VM_PROT_READ, FALSE) != KERN_SUCCESS) panic("vm_map_protect failed"); diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c index df6e295..1d9d216 100644 --- a/sys/amd64/amd64/trap.c +++ b/sys/amd64/amd64/trap.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 - * $Id: trap.c,v 1.137 1999/05/06 18:12:17 peter Exp $ + * $Id: trap.c,v 1.138 1999/06/01 18:19:47 jlemon Exp $ */ /* @@ -147,7 +147,6 @@ static __inline void userret __P((struct proc *p, struct trapframe *frame, u_quad_t oticks)); #if defined(I586_CPU) && !defined(NO_F00F_HACK) -extern struct gate_descriptor *t_idt; extern int has_f00f_bug; #endif @@ -727,7 +726,7 @@ trap_pfault(frame, usermode, eva) * fault. */ #if defined(I586_CPU) && !defined(NO_F00F_HACK) - if ((eva == (unsigned int)&t_idt[6]) && has_f00f_bug) { + if ((eva == (unsigned int)&idt[6]) && has_f00f_bug) { frame->tf_trapno = T_PRIVINFLT; return -2; } diff --git a/sys/amd64/include/segments.h b/sys/amd64/include/segments.h index eaecfa3..7028185 100644 --- a/sys/amd64/include/segments.h +++ b/sys/amd64/include/segments.h @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)segments.h 7.1 (Berkeley) 5/9/91 - * $Id: segments.h,v 1.18 1999/01/28 11:45:49 newton Exp $ + * $Id: segments.h,v 1.19 1999/04/28 01:04:06 luoqi Exp $ */ #ifndef _MACHINE_SEGMENTS_H_ @@ -246,7 +246,7 @@ extern int currentldt; extern int _default_ldt; extern union descriptor gdt[]; extern struct soft_segment_descriptor gdt_segs[]; -extern struct gate_descriptor idt[NIDT]; +extern struct gate_descriptor *idt; extern union descriptor ldt[NLDT]; void lgdt __P((struct region_descriptor *rdp)); diff --git a/sys/i386/i386/locore.s b/sys/i386/i386/locore.s index 4e29fd4..fbede9b 100644 --- a/sys/i386/i386/locore.s +++ b/sys/i386/i386/locore.s @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)locore.s 7.3 (Berkeley) 5/13/91 - * $Id: locore.s,v 1.122 1999/05/09 19:01:49 peter Exp $ + * $Id: locore.s,v 1.123 1999/06/01 18:19:39 jlemon Exp $ * * originally from: locore.s, by William F. Jolitz * @@ -958,7 +958,7 @@ bdb_prepare_paging: movl %eax,R(bdb_bpt_ljmp+1) movl 24+2(%esi),%eax movw %ax,R(bdb_bpt_ljmp+5) - movl $R(_idt),%edi + movl R(_idt),%edi movl %edi,2(%esp) /* prepare to load kernel idt */ movl $8*4/4,%ecx cld diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c index ae9df8b..7cc1e5f 100644 --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.340 1999/06/10 02:48:51 jlemon Exp $ + * $Id: machdep.c,v 1.341 1999/06/13 19:20:25 alc Exp $ */ #include "apm.h" @@ -887,7 +887,8 @@ union descriptor gdt[NGDT * NCPU]; /* global descriptor table */ #else union descriptor gdt[NGDT]; /* global descriptor table */ #endif -struct gate_descriptor idt[NIDT]; /* interrupt descriptor table */ +static struct gate_descriptor idt0[NIDT]; +struct gate_descriptor *idt = &idt0[0]; /* interrupt descriptor table */ union descriptor ldt[NLDT]; /* local descriptor table */ #ifdef SMP /* table descriptors - used to load tables by microp */ @@ -900,7 +901,6 @@ extern struct segment_descriptor common_tssd, *tss_gdt; int private_tss; /* flag indicating private tss */ #if defined(I586_CPU) && !defined(NO_F00F_HACK) -struct gate_descriptor *t_idt; extern int has_f00f_bug; #endif @@ -1090,11 +1090,7 @@ setidt(idx, func, typ, dpl, selec) { struct gate_descriptor *ip; -#if defined(I586_CPU) && !defined(NO_F00F_HACK) - ip = (t_idt != NULL ? t_idt : idt) + idx; -#else ip = idt + idx; -#endif ip->gd_looffset = (int)func; ip->gd_selector = selec; ip->gd_stkcpy = 0; @@ -1610,7 +1606,7 @@ init386(first) setidt(0x80, &IDTVEC(int0x80_syscall), SDT_SYS386TGT, SEL_UPL, GSEL(GCODE_SEL, SEL_KPL)); - r_idt.rd_limit = sizeof(idt) - 1; + r_idt.rd_limit = sizeof(idt0) - 1; r_idt.rd_base = (int) idt; lidt(&r_idt); @@ -1714,6 +1710,7 @@ SYSINIT(f00f_hack, SI_SUB_INTRINSIC, SI_ORDER_FIRST, f00f_hack, NULL); static void f00f_hack(void *unused) { + struct gate_descriptor *new_idt; #ifndef SMP struct region_descriptor r_idt; #endif @@ -1724,7 +1721,7 @@ f00f_hack(void *unused) { printf("Intel Pentium detected, installing workaround for F00F bug\n"); - r_idt.rd_limit = sizeof(idt) - 1; + r_idt.rd_limit = sizeof(idt0) - 1; tmp = kmem_alloc(kernel_map, PAGE_SIZE * 2); if (tmp == 0) @@ -1732,10 +1729,11 @@ f00f_hack(void *unused) { if (((unsigned int)tmp & (PAGE_SIZE-1)) != 0) panic("kmem_alloc returned non-page-aligned memory"); /* Put the first seven entries in the lower page */ - t_idt = (struct gate_descriptor*)(tmp + PAGE_SIZE - (7*8)); - bcopy(idt, t_idt, sizeof(idt)); - r_idt.rd_base = (int)t_idt; + new_idt = (struct gate_descriptor*)(tmp + PAGE_SIZE - (7*8)); + bcopy(idt, new_idt, sizeof(idt0)); + r_idt.rd_base = (int)new_idt; lidt(&r_idt); + idt = new_idt; if (vm_map_protect(kernel_map, tmp, tmp + PAGE_SIZE, VM_PROT_READ, FALSE) != KERN_SUCCESS) panic("vm_map_protect failed"); diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c index df6e295..1d9d216 100644 --- a/sys/i386/i386/trap.c +++ b/sys/i386/i386/trap.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 - * $Id: trap.c,v 1.137 1999/05/06 18:12:17 peter Exp $ + * $Id: trap.c,v 1.138 1999/06/01 18:19:47 jlemon Exp $ */ /* @@ -147,7 +147,6 @@ static __inline void userret __P((struct proc *p, struct trapframe *frame, u_quad_t oticks)); #if defined(I586_CPU) && !defined(NO_F00F_HACK) -extern struct gate_descriptor *t_idt; extern int has_f00f_bug; #endif @@ -727,7 +726,7 @@ trap_pfault(frame, usermode, eva) * fault. */ #if defined(I586_CPU) && !defined(NO_F00F_HACK) - if ((eva == (unsigned int)&t_idt[6]) && has_f00f_bug) { + if ((eva == (unsigned int)&idt[6]) && has_f00f_bug) { frame->tf_trapno = T_PRIVINFLT; return -2; } diff --git a/sys/i386/include/segments.h b/sys/i386/include/segments.h index eaecfa3..7028185 100644 --- a/sys/i386/include/segments.h +++ b/sys/i386/include/segments.h @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)segments.h 7.1 (Berkeley) 5/9/91 - * $Id: segments.h,v 1.18 1999/01/28 11:45:49 newton Exp $ + * $Id: segments.h,v 1.19 1999/04/28 01:04:06 luoqi Exp $ */ #ifndef _MACHINE_SEGMENTS_H_ @@ -246,7 +246,7 @@ extern int currentldt; extern int _default_ldt; extern union descriptor gdt[]; extern struct soft_segment_descriptor gdt_segs[]; -extern struct gate_descriptor idt[NIDT]; +extern struct gate_descriptor *idt; extern union descriptor ldt[NLDT]; void lgdt __P((struct region_descriptor *rdp)); diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c index df6e295..1d9d216 100644 --- a/sys/kern/subr_trap.c +++ b/sys/kern/subr_trap.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 - * $Id: trap.c,v 1.137 1999/05/06 18:12:17 peter Exp $ + * $Id: trap.c,v 1.138 1999/06/01 18:19:47 jlemon Exp $ */ /* @@ -147,7 +147,6 @@ static __inline void userret __P((struct proc *p, struct trapframe *frame, u_quad_t oticks)); #if defined(I586_CPU) && !defined(NO_F00F_HACK) -extern struct gate_descriptor *t_idt; extern int has_f00f_bug; #endif @@ -727,7 +726,7 @@ trap_pfault(frame, usermode, eva) * fault. */ #if defined(I586_CPU) && !defined(NO_F00F_HACK) - if ((eva == (unsigned int)&t_idt[6]) && has_f00f_bug) { + if ((eva == (unsigned int)&idt[6]) && has_f00f_bug) { frame->tf_trapno = T_PRIVINFLT; return -2; } |