remove code in XEN version of init386 causing initialization failure

MFC after:	1 month
This commit is contained in:
Kip Macy 2008-08-17 23:38:14 +00:00
parent f0a565d1c5
commit fc715e2309
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=181809

View File

@ -1508,7 +1508,7 @@ struct soft_segment_descriptor gdt_segs[] = {
{ 0x0, /* segment base address */ { 0x0, /* segment base address */
0x0, /* length */ 0x0, /* length */
0, /* segment type */ 0, /* segment type */
0, /* segment descriptor priority level */ SEL_KPL, /* segment descriptor priority level */
0, /* segment descriptor present */ 0, /* segment descriptor present */
0, 0, 0, 0,
0, /* default 32 vs 16 bit size */ 0, /* default 32 vs 16 bit size */
@ -1517,7 +1517,7 @@ struct soft_segment_descriptor gdt_segs[] = {
{ 0x0, /* segment base address */ { 0x0, /* segment base address */
0xfffff, /* length - all address space */ 0xfffff, /* length - all address space */
SDT_MEMRWA, /* segment type */ SDT_MEMRWA, /* segment type */
0, /* segment descriptor priority level */ SEL_KPL, /* segment descriptor priority level */
1, /* segment descriptor present */ 1, /* segment descriptor present */
0, 0, 0, 0,
1, /* default 32 vs 16 bit size */ 1, /* default 32 vs 16 bit size */
@ -1544,7 +1544,7 @@ struct soft_segment_descriptor gdt_segs[] = {
{ 0x0, /* segment base address */ { 0x0, /* segment base address */
0xfffff, /* length - all address space */ 0xfffff, /* length - all address space */
SDT_MEMERA, /* segment type */ SDT_MEMERA, /* segment type */
0, /* segment descriptor priority level */ SEL_KPL, /* segment descriptor priority level */
1, /* segment descriptor present */ 1, /* segment descriptor present */
0, 0, 0, 0,
1, /* default 32 vs 16 bit size */ 1, /* default 32 vs 16 bit size */
@ -1553,7 +1553,7 @@ struct soft_segment_descriptor gdt_segs[] = {
{ 0x0, /* segment base address */ { 0x0, /* segment base address */
0xfffff, /* length - all address space */ 0xfffff, /* length - all address space */
SDT_MEMRWA, /* segment type */ SDT_MEMRWA, /* segment type */
0, /* segment descriptor priority level */ SEL_KPL, /* segment descriptor priority level */
1, /* segment descriptor present */ 1, /* segment descriptor present */
0, 0, 0, 0,
1, /* default 32 vs 16 bit size */ 1, /* default 32 vs 16 bit size */
@ -1580,7 +1580,7 @@ struct soft_segment_descriptor gdt_segs[] = {
{ 0x400, /* segment base address */ { 0x400, /* segment base address */
0xfffff, /* length */ 0xfffff, /* length */
SDT_MEMRWA, /* segment type */ SDT_MEMRWA, /* segment type */
0, /* segment descriptor priority level */ SEL_KPL, /* segment descriptor priority level */
1, /* segment descriptor present */ 1, /* segment descriptor present */
0, 0, 0, 0,
1, /* default 32 vs 16 bit size */ 1, /* default 32 vs 16 bit size */
@ -2322,6 +2322,8 @@ getmemsize(int first)
for (off = 0; off < round_page(MSGBUF_SIZE); off += PAGE_SIZE) for (off = 0; off < round_page(MSGBUF_SIZE); off += PAGE_SIZE)
pmap_kenter((vm_offset_t)msgbufp + off, phys_avail[pa_indx] + pmap_kenter((vm_offset_t)msgbufp + off, phys_avail[pa_indx] +
off); off);
PT_UPDATES_FLUSH();
} }
#ifdef XEN #ifdef XEN
@ -2331,7 +2333,6 @@ void
init386(first) init386(first)
int first; int first;
{ {
struct gate_descriptor *gdp;
unsigned long gdtmachpfn; unsigned long gdtmachpfn;
int error, gsel_tss, metadata_missing, x; int error, gsel_tss, metadata_missing, x;
struct pcpu *pc; struct pcpu *pc;
@ -2366,6 +2367,8 @@ init386(first)
else if (bootinfo.bi_envp) else if (bootinfo.bi_envp)
kern_envp = (caddr_t)bootinfo.bi_envp + KERNBASE; kern_envp = (caddr_t)bootinfo.bi_envp + KERNBASE;
boothowto |= xen_boothowto(kern_envp);
/* Init basic tunables, hz etc */ /* Init basic tunables, hz etc */
init_param1(); init_param1();
@ -2382,13 +2385,7 @@ init386(first)
gdt_segs[GDATA_SEL].ssd_limit = atop(HYPERVISOR_VIRT_START + MTOPSIZE); gdt_segs[GDATA_SEL].ssd_limit = atop(HYPERVISOR_VIRT_START + MTOPSIZE);
gdt_segs[GUCODE_SEL].ssd_limit = atop(HYPERVISOR_VIRT_START + MTOPSIZE); gdt_segs[GUCODE_SEL].ssd_limit = atop(HYPERVISOR_VIRT_START + MTOPSIZE);
gdt_segs[GUDATA_SEL].ssd_limit = atop(HYPERVISOR_VIRT_START + MTOPSIZE); gdt_segs[GUDATA_SEL].ssd_limit = atop(HYPERVISOR_VIRT_START + MTOPSIZE);
gdt_segs[GBIOSLOWMEM_SEL].ssd_limit = atop(HYPERVISOR_VIRT_START + MTOPSIZE); gdt_segs[GBIOSLOWMEM_SEL].ssd_limit = atop(HYPERVISOR_VIRT_START + MTOPSIZE);
gdt_segs[GCODE_SEL].ssd_limit = atop(0 - 1);
gdt_segs[GDATA_SEL].ssd_limit = atop(0 - 1);
gdt_segs[GUCODE_SEL].ssd_limit = atop(0 - 1);
gdt_segs[GUDATA_SEL].ssd_limit = atop(0 - 1);
gdt_segs[GUFS_SEL].ssd_limit = atop(0 - 1);
gdt_segs[GUGS_SEL].ssd_limit = atop(0 - 1);
pc = &__pcpu[0]; pc = &__pcpu[0];
gdt_segs[GPRIV_SEL].ssd_base = (int) pc; gdt_segs[GPRIV_SEL].ssd_base = (int) pc;
@ -2402,7 +2399,7 @@ init386(first)
mtx_init(&dt_lock, "descriptor tables", NULL, MTX_SPIN); mtx_init(&dt_lock, "descriptor tables", NULL, MTX_SPIN);
gdtmachpfn = vtomach(gdt) >> PAGE_SHIFT; gdtmachpfn = vtomach(gdt) >> PAGE_SHIFT;
PT_SET_MA(gdt, *vtopte((unsigned long)gdt) & ~(PG_RW|PG_M|PG_A)); PT_SET_MA(gdt, xpmap_ptom(VTOP(gdt)) | PG_V);
PANIC_IF(HYPERVISOR_set_gdt(&gdtmachpfn, 512) != 0); PANIC_IF(HYPERVISOR_set_gdt(&gdtmachpfn, 512) != 0);
lgdt(&r_gdt); lgdt(&r_gdt);
gdtset = 1; gdtset = 1;
@ -2437,6 +2434,8 @@ init386(first)
mtx_init(&icu_lock, "icu", NULL, MTX_SPIN | MTX_NOWITNESS | MTX_NOPROFILE); mtx_init(&icu_lock, "icu", NULL, MTX_SPIN | MTX_NOWITNESS | MTX_NOPROFILE);
/* make ldt memory segments */ /* make ldt memory segments */
PT_SET_MA(ldt, xpmap_ptom(VTOP(ldt)) | PG_V | PG_RW);
bzero(ldt, PAGE_SIZE);
ldt_segs[LUCODE_SEL].ssd_limit = atop(0 - 1); ldt_segs[LUCODE_SEL].ssd_limit = atop(0 - 1);
ldt_segs[LUDATA_SEL].ssd_limit = atop(0 - 1); ldt_segs[LUDATA_SEL].ssd_limit = atop(0 - 1);
for (x = 0; x < sizeof ldt_segs / sizeof ldt_segs[0]; x++) for (x = 0; x < sizeof ldt_segs / sizeof ldt_segs[0]; x++)
@ -2495,11 +2494,9 @@ init386(first)
KSTACK_PAGES * PAGE_SIZE - sizeof(struct pcb) - 16); KSTACK_PAGES * PAGE_SIZE - sizeof(struct pcb) - 16);
PCPU_SET(common_tss.tss_ss0, GSEL(GDATA_SEL, SEL_KPL)); PCPU_SET(common_tss.tss_ss0, GSEL(GDATA_SEL, SEL_KPL));
gsel_tss = GSEL(GPROC0_SEL, SEL_KPL); gsel_tss = GSEL(GPROC0_SEL, SEL_KPL);
PCPU_SET(tss_gdt, &gdt[GPROC0_SEL].sd); HYPERVISOR_stack_switch(GSEL(GDATA_SEL, SEL_KPL),
PCPU_SET(common_tssd, *PCPU_GET(tss_gdt)); PCPU_GET(common_tss.tss_esp0));
PCPU_SET(common_tss.tss_ioopt, (sizeof (struct i386tss)) << 16);
ltr(gsel_tss);
/* pointer to selector slot for %fs/%gs */ /* pointer to selector slot for %fs/%gs */
PCPU_SET(fsgs_gdt, &gdt[GUFS_SEL].sd); PCPU_SET(fsgs_gdt, &gdt[GUFS_SEL].sd);
@ -2527,24 +2524,6 @@ init386(first)
/* now running on new page tables, configured,and u/iom is accessible */ /* now running on new page tables, configured,and u/iom is accessible */
msgbufinit(msgbufp, MSGBUF_SIZE); msgbufinit(msgbufp, MSGBUF_SIZE);
/* make a call gate to reenter kernel with */
gdp = &ldt[LSYS5CALLS_SEL].gd;
x = (int) &IDTVEC(lcall_syscall);
gdp->gd_looffset = x;
gdp->gd_selector = GSEL(GCODE_SEL,SEL_KPL);
gdp->gd_stkcpy = 1;
gdp->gd_type = SDT_SYS386CGT;
gdp->gd_dpl = SEL_UPL;
gdp->gd_p = 1;
gdp->gd_hioffset = x >> 16;
/* XXX does this work? */
/* XXX yes! */
ldt[LBSDICALLS_SEL] = ldt[LSYS5CALLS_SEL];
ldt[LSOL26CALLS_SEL] = ldt[LSYS5CALLS_SEL];
/* transfer to user mode */ /* transfer to user mode */
_ucodesel = GSEL(GUCODE_SEL, SEL_UPL); _ucodesel = GSEL(GUCODE_SEL, SEL_UPL);