PERFORCE change 98153 for review
John Baldwin
jhb at freebsd.org
Fri Jun 2 07:28:50 PDT 2006
On Thursday 01 June 2006 20:26, Kip Macy wrote:
> > I'd rather avoid this for now as it will have to be backed out for
interrupt
> > filters.
>
> I don't know anything about interrupt filters, so please let me know
> what you have in mind. The whole of interrupt handling is far too
> heavyweight at the moment.
With interrupt filters you can have both an INTR_FAST style handler and a
threaded handler, and the INTR_FAST style handler will have a return value to
determine if it's associated ithread should be scheduled and to let the
calling code know if it has handled the interrupt so that it doesn't need to
be masked, or if the interrupt wasn't for this device at all.
> -Kip
>
> >
> > >
> > > 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
> >
>
--
John Baldwin
More information about the p4-projects
mailing list