Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Jun 2006 17:26:18 -0700
From:      "Kip Macy" <kip.macy@gmail.com>
To:        "John Baldwin" <jhb@freebsd.org>
Cc:        Perforce Change Reviews <perforce@freebsd.org>, Kip Macy <kmacy@freebsd.org>
Subject:   Re: PERFORCE change 98153 for review
Message-ID:  <b1fa29170606011726r78303d84y3d0116cff2174009@mail.gmail.com>
In-Reply-To: <200605311657.44921.jhb@freebsd.org>
References:  <200605301926.k4UJQkgt055284@repoman.freebsd.org> <200605311657.44921.jhb@freebsd.org>

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


 -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
>



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