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:
parent
e3e421bacf
commit
f3fc519625
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=169827
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user