Re: [RFC][PATCH] i386: Per node IDT

From: Zwane Mwaikambo
Date: Mon Jul 11 2005 - 20:34:39 EST


Hello Oleg,

On Mon, 11 Jul 2005, Oleg Nesterov wrote:

> Zwane Mwaikambo wrote:
> >
> > --- linux-2.6.13-rc1-mm1/arch/i386/kernel/entry.S 3 Jul 2005 13:20:43 -0000 1.1.1.1
> > +++ linux-2.6.13-rc1-mm1/arch/i386/kernel/entry.S 10 Jul 2005 22:33:37 -0000
> > -
> > +/* Build the IRQ entry stubs */
> > vector=0
> > -ENTRY(irq_entries_start)
> > + .align IRQ_STUB_SIZE,0x90
> > +ENTRY(interrupt)
> > .rept NR_IRQS
> > ALIGN
> > -1: pushl $vector-256
> > + pushl $vector
> > jmp common_interrupt
> >
> > [...snip...]
> >
> > --- linux-2.6.13-rc1-mm1/arch/i386/kernel/irq.c 3 Jul 2005 13:20:43 -0000 1.1.1.1
> > +++ linux-2.6.13-rc1-mm1/arch/i386/kernel/irq.c 4 Jul 2005 21:39:56 -0000
> > @@ -53,8 +53,7 @@ static union irq_ctx *softirq_ctx[NR_CPU
> > */
> > fastcall unsigned int do_IRQ(struct pt_regs *regs)
> > {
> > - /* high bits used in ret_from_ code */
> > - int irq = regs->orig_eax & 0xff;
> > + int irq = regs->orig_eax;
>
> Could you explain this change? I think it breaks do_signal/handle_signal,
> they check orig_eax >= 0 to handle -ERESTARTSYS:
>
> /* Are we from a system call? */
> if (regs->orig_eax >= 0) {
> /* If so, check system call restarting.. */
> switch (regs->eax) {
> case -ERESTART_RESTARTBLOCK:
> case -ERESTARTNOHAND:

The change is so that we can send IRQs higher than 256 to do_IRQ. That
looks like it tries to check if we came in via system_call since we'd save
the system call number as orig_eax. Now that i think about it, doesn't
that path always get taken when we interrupt userspace and have pending
signals on return from interrupt?
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/