From owner-freebsd-current Mon Jun 28 8:27:28 1999 Delivered-To: freebsd-current@freebsd.org Received: from lor.watermarkgroup.com (lor.watermarkgroup.com [207.202.73.33]) by hub.freebsd.org (Postfix) with ESMTP id 7221C14D96 for ; Mon, 28 Jun 1999 08:27:24 -0700 (PDT) (envelope-from luoqi@watermarkgroup.com) Received: (from luoqi@localhost) by lor.watermarkgroup.com (8.8.8/8.8.8) id LAA17764; Mon, 28 Jun 1999 11:26:36 -0400 (EDT) (envelope-from luoqi) Date: Mon, 28 Jun 1999 11:26:36 -0400 (EDT) From: Luoqi Chen Message-Id: <199906281526.LAA17764@lor.watermarkgroup.com> To: bde@zeta.org.au, brdean@mindspring.com, freebsd-current@FreeBSD.ORG Subject: Re: kernel panic w/regard to setting io permissions bitmap Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG > >>The panic occurs at 'swtch_com+0x6e: ltr %si'. At the time, %si is > >>0x20, which indexes to what appears to be a busy tss (type=01011b) > >>with a limit of 0x67. That instruction generates a general protection > >>fault with an error code of 0. The current process was Idle. > > The busy tss seems to be the only problem. The busy bit in the tss > descriptor should be clear when the ltr instruction is executed, because > the descriptor has just been copied from an image whose busy bit is clear. > This was broken in rev.1.332 of machdep.c by moving the initialisation > of common_tssd to after the first ltr instruction, so that the busy bit > in common_tssd is set. > > Bruce > > diff -c2 machdep.c~ machdep.c > *** machdep.c~ Sat Jun 26 21:41:33 1999 > --- machdep.c Sun Jun 27 15:52:07 1999 > *************** > *** 1643,1651 **** > common_tss.tss_ss0 = GSEL(GDATA_SEL, SEL_KPL) ; > common_tss.tss_ioopt = (sizeof common_tss) << 16; > - gsel_tss = GSEL(GPROC0_SEL, SEL_KPL); > - ltr(gsel_tss); > - private_tss = 0; > tss_gdt = &gdt[GPROC0_SEL].sd; > common_tssd = *tss_gdt; > > dblfault_tss.tss_esp = dblfault_tss.tss_esp0 = dblfault_tss.tss_esp1 = > --- 1643,1651 ---- > common_tss.tss_ss0 = GSEL(GDATA_SEL, SEL_KPL) ; > common_tss.tss_ioopt = (sizeof common_tss) << 16; > tss_gdt = &gdt[GPROC0_SEL].sd; > common_tssd = *tss_gdt; > + private_tss = 0; > + gsel_tss = GSEL(GPROC0_SEL, SEL_KPL); > + ltr(gsel_tss); > > dblfault_tss.tss_esp = dblfault_tss.tss_esp0 = dblfault_tss.tss_esp1 = > Yes, it was my mistake, I'll fix it. -lq To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message