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>