Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 2 Jun 2006 10:22:43 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        kmacy@fsmware.com
Cc:        Perforce Change Reviews <perforce@freebsd.org>, Kip Macy <kmacy@freebsd.org>
Subject:   Re: PERFORCE change 98153 for review
Message-ID:  <200606021022.44509.jhb@freebsd.org>
In-Reply-To: <b1fa29170606011726r78303d84y3d0116cff2174009@mail.gmail.com>
References:  <200605301926.k4UJQkgt055284@repoman.freebsd.org> <200605311657.44921.jhb@freebsd.org> <b1fa29170606011726r78303d84y3d0116cff2174009@mail.gmail.com>

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



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