Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 31 May 2006 16:57:44 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        Kip Macy <kmacy@freebsd.org>
Cc:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   Re: PERFORCE change 98153 for review
Message-ID:  <200605311657.44921.jhb@freebsd.org>
In-Reply-To: <200605301926.k4UJQkgt055284@repoman.freebsd.org>
References:  <200605301926.k4UJQkgt055284@repoman.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 30 May 2006 15:26, Kip Macy wrote:
> http://perforce.freebsd.org/chv.cgi?CH=98153
> 
> Change 98153 by kmacy@kmacy_storage:sun4v_work on 2006/05/30 19:25:49
> 
> 	for fast interrupts  call fast interrupt handler directly 
> 	if there are no collisions on a vector

I'd rather avoid this for now as it will have to be backed out for interrupt 
filters.

> 
> Affected files ...
> 
> .. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/intr_machdep.c#8 edit
> 
> Differences ...
> 
> ==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/intr_machdep.c#8 
(text+ko) ====
> 
> @@ -205,9 +205,15 @@
>  
>  	ps = intr_disable();
>  	if (vec != -1) {
> -		intr_vectors[vec].iv_func = ivf;
> -		intr_vectors[vec].iv_arg = iva;
> -		intr_vectors[vec].iv_pri = pri;
> +		if ((char *)intr_vectors[vec].iv_func == (char *)intr_stray_level) {
> +			intr_vectors[vec].iv_func = ivf;
> +			intr_vectors[vec].iv_arg = iva;
> +		} else {
> +			intr_vectors[vec].iv_func = intr_execute_handlers;
> +			intr_vectors[vec].iv_arg = &intr_vectors[vec];
> +		}
> +		if (pri > intr_vectors[vec].iv_pri)
> +			intr_vectors[vec].iv_pri = pri;
>  		intr_vectors[vec].iv_vec = vec;
>  	}
>  	snprintf(pilname, MAXCOMLEN + 1, "pil%d: %s", pri, pil_names[pri]);
> @@ -315,8 +321,9 @@
>  	struct intr_vector *iv;
>  	struct intr_event *ie;		/* descriptor for the IRQ */
>  	struct intr_event *orphan;
> -	int errcode;
> -
> +	int errcode, pil;
> +	iv_func_t *ivf;
> +	void *iva;
>  	/*
>  	 * Work around a race where more than one CPU may be registering
>  	 * handlers on the same IRQ at the same time.
> @@ -347,8 +354,11 @@
>  	if (errcode)
>  		return (errcode);
>  	
> -	intr_setup(flags & INTR_FAST ? PIL_FAST : PIL_ITHREAD, intr_fast, vec,
> -	    intr_execute_handlers, iv);
> +	pil = (flags & INTR_FAST) ? PIL_FAST : PIL_ITHREAD;
> +	ivf = (flags & INTR_FAST) ? handler : intr_execute_handlers;
> +	iva = (flags & INTR_FAST) ? arg : iv;
> +
> +	intr_setup(pil, intr_fast, vec, ivf, iva);
>  
>  	intr_stray_count[vec] = 0;
>  
> 

-- 
John Baldwin



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