Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 05 Sep 1996 21:31:25 -0600
From:      Steve Passe <smp@csn.net>
To:        dg@Root.COM
Cc:        Peter Wemm <peter@spinner.dialix.com>, Terry Lambert <terry@lambert.org>, rv@groa.uct.ac.za, smp@freebsd.org
Subject:   Re: SMP on Intel XXpress 
Message-ID:  <199609060331.VAA00161@clem.systemsix.com>
In-Reply-To: Your message of "Thu, 05 Sep 1996 19:50:30 PDT." <199609060250.TAA05404@root.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
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-----




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199609060331.VAA00161>