Port-i386 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Interrupt routing patch for testing



On Sat, May 10, 2008 at 12:13:53AM +0200, Joerg Sonnenberger wrote:
> On Fri, May 09, 2008 at 10:33:57PM +0100, Andrew Doran wrote:
> > On Thu, May 08, 2008 at 11:12:19PM +0200, Joerg Sonnenberger wrote:
> > 
> > >  intr_allocate_slot_cpu(struct cpu_info *ci, struct pic *pic, int pin,
> > >                  int *index)
> > >  {
> > > - int start, slot, i;
> > > + int slot, i;
> > >   struct intrsource *isp;
> > >  
> > > - start = CPU_IS_PRIMARY(ci) ? NUM_LEGACY_IRQS : 0;
> > > - slot = -1;
> > > + if (pic == &i8259_pic) {
> > > +         if (!CPU_IS_PRIMARY(ci))
> > > +                 return EBUSY;
> > 
> > ENODEV is more accurate. I haven't checked the callers.
> 
> I think it just migrates up. I'll change it to ENODEV.
> 
> > FWIW, the locking in intr.c isn't very good. We'll also need to look at
> > having an IPI or other mechanism like RCU's patent-free predecessor make the
> > updates safe on a running system.
> 
> Yeah, I know. I'm thinking about dropping the linked list and just use a
> dynamic array. If you give me something to lazily free it e.g. after a
> roundtrip over all CPUs, we are done.

You can already do it !lazily, with a level of expense that is fine for
device attach or detach:

        where = xc_broadcast(0, (xcfunc_t)nullop, NULL, NULL);
        xc_wait(where);

I think the above falls under this now lapsed patent:

        http://www.google.com/patents?id=E14WAAAAEBAJ&dq=4809168

When reading 'processes' bear in mind that the patent isn't about Unix and
buried in the text it explicitly says that processes could mean CPUs.

Andrew


Home | Main Index | Thread Index | Old Index