1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-10 14:02:43 +00:00

MFi386: revision 1.652

- Move GDT/LDT locking into a seperate spinlock, removing the global
     scheduler lock from this responsibility.
This commit is contained in:
Yoshihiro Takahashi 2007-05-21 11:57:36 +00:00
parent e3e421bacf
commit f3fc519625
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=169827

View File

@ -1168,8 +1168,10 @@ exec_setregs(td, entry, stack, ps_strings)
pcb->pcb_gs = _udatasel;
load_gs(_udatasel);
mtx_lock_spin(&dt_lock);
if (td->td_proc->p_md.md_ldt)
user_ldt_free(td);
mtx_unlock_spin(&dt_lock);
bzero((char *)regs, sizeof(struct trapframe));
regs->tf_eip = entry;
@ -1275,6 +1277,7 @@ static struct gate_descriptor idt0[NIDT];
struct gate_descriptor *idt = &idt0[0]; /* interrupt descriptor table */
union descriptor ldt[NLDT]; /* local descriptor table */
struct region_descriptor r_gdt, r_idt; /* table descriptors */
struct mtx dt_lock; /* lock for GDT and LDT */
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
extern int has_f00f_bug;
@ -1954,6 +1957,7 @@ init386(first)
r_gdt.rd_limit = NGDT * sizeof(gdt[0]) - 1;
r_gdt.rd_base = (int) gdt;
mtx_init(&dt_lock, "descriptor tables", NULL, MTX_SPIN);
lgdt(&r_gdt);
pcpu_init(pc, 0, sizeof(struct pcpu));