From owner-freebsd-smp Thu Sep 5 20:33:34 1996 Return-Path: owner-smp Received: (from root@localhost) by freefall.freebsd.org (8.7.5/8.7.3) id UAA12002 for smp-outgoing; Thu, 5 Sep 1996 20:33:34 -0700 (PDT) Received: from clem.systemsix.com (clem.systemsix.com [198.99.86.131]) by freefall.freebsd.org (8.7.5/8.7.3) with SMTP id UAA11991 for ; Thu, 5 Sep 1996 20:33:28 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by clem.systemsix.com (8.6.12/8.6.12) with SMTP id VAA00161; Thu, 5 Sep 1996 21:31:25 -0600 Message-Id: <199609060331.VAA00161@clem.systemsix.com> X-Authentication-Warning: clem.systemsix.com: Host localhost didn't use HELO protocol X-Mailer: exmh version 1.6.5 12/11/95 From: Steve Passe To: dg@Root.COM cc: Peter Wemm , Terry Lambert , rv@groa.uct.ac.za, smp@freebsd.org Subject: Re: SMP on Intel XXpress In-reply-to: Your message of "Thu, 05 Sep 1996 19:50:30 PDT." <199609060250.TAA05404@root.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Thu, 05 Sep 1996 21:31:25 -0600 Sender: owner-smp@freebsd.org X-Loop: FreeBSD.org Precedence: bulk Hi, > ihandlers is an array of interrupt handlers that is indexed by the >interrupt number (0-15). It is filled with the address of the "vector" >routine (specified in your kernel config file on the controller lines, >or dynamically during system startup in the PCI case). Does this answer >your question? it appears that the strings Xresume[0-15] get expanded in the INTR macro when building the "MCOUNT_LABEL(bintr)" table by the sub-macro "__CONCAT(Xresume,irq_num):". from this point the thread goes on to call a function indexed by "*_intr_handler + (irq_num) * 4". is this a correct summation? and can the address Xresume[0-15] in 'ihandlers' ever be overwritten by a driver so that the path thru "__CONCAT(Xresume,irq_num):" would not be taken for a specific INTerrupt? and if so, could those routines return in anyway except thru "_doreti:"? specifically I am looking for a way that the mplock might get lost by the REL_MPLOCK following the Xresume[0-15] being missed: --- vector.s: #define INTR(irq_num, vec_name, icu, enable_icus, reg) \ .text ; \ SUPERALIGN_TEXT ; \ IDTVEC(vec_name) ; \ ... GET_MPLOCK ; /* SMP Spin lock */ \ ... __CONCAT(Xresume,irq_num): ; \ ... call *_intr_handler + (irq_num) * 4 ; \ ... jmp _doreti ; \ ; \ ... REL_MPLOCK ; /* SMP release global lock */ \ ... iret ihandlers: /* addresses of interrupt handlers */ /* actually resumption addresses for HWI's */ .long Xresume0, Xresume1, Xresume2, Xresume3 ... .long Xresume12, Xresume13, Xresume14, Xresume15 -- Steve Passe | powered by smp@csn.net | FreeBSD -----BEGIN PGP PUBLIC KEY BLOCK----- Version: 2.6.2 mQCNAzHe7tEAAAEEAM274wAEEdP+grIrV6UtBt54FB5ufifFRA5ujzflrvlF8aoE 04it5BsUPFi3jJLfvOQeydbegexspPXL6kUejYt2OeptHuroIVW5+y2M2naTwqtX WVGeBP6s2q/fPPAS+g+sNZCpVBTbuinKa/C4Q6HJ++M9AyzIq5EuvO0a8Rr9AAUR tBlTdGV2ZSBQYXNzZSA8c21wQGNzbi5uZXQ+ =ds99 -----END PGP PUBLIC KEY BLOCK-----