Bug 27866

Summary: Fast interrupts handled via interrupt threads
Product: Base System Reporter: peter.jeremy <peter.jeremy>
Component: alphaAssignee: freebsd-alpha (Nobody) <alpha>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: 5.0-CURRENT   
Hardware: Any   
OS: Any   
Attachments:
Description Flags
file.diff none

Description peter.jeremy 2001-06-04 01:10:00 UTC
	`Fast' interrupts can be handled synchronously by calling
	the bus and device interrupt handler directly from
	/sys/alpha/alpha/interrupt.c:alpha_dispatch_intr(), whereas
	other interrupts are scheduled as interrupt threads.

	Unfortunately, the test for fast interrupts in interrupt.c
	incorrectly uses INTR_FAST instead of IH_FAST, so fast
	interrupts aren't detected.  This significantly increases
	latencies for fast interrupts and can lead to SILO overflows.

	This was detected by some code I added to determine what was
	contributing to sio interrupt latencies.  I discovered that
	the `fast interrupt found' probe was not being triggered.

Fix: [This fix has been tested on my Multia, but the following is
	a re-type of the fix]
How-To-Repeat: 	Code inspection:  If alpha_setup_intr() is called with
	INTR_FAST specified in <flags>, this will be passed onto
	ithread_add_handler() where it will be mapped to
	(IH_FAST | IH_EXCLUSIVE) in (struct intrhand).ih_flags.

	When the interrupt occurs, alpha_dispatch_intr() tests
	(struct intrhand).ih_flags against INTR_FAST and so fails
	to detect that it is a fast interrupt.
Comment 1 mjacob 2001-06-04 01:16:00 UTC
Good eye. WHy no mail to alpha@?
Comment 2 Matt Jacob freebsd_committer freebsd_triage 2001-06-04 01:52:39 UTC
State Changed
From-To: open->closed

Easy and correct fix. Applied.