Hello Zwane, Zwane Mwaikambo wrote: > > > On Mon, 11 Jul 2005, Oleg Nesterov wrote: > > > > 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?
As far as I can see, we always have orig_eax < 0 on interrupt, because irq_entries_start: pushl $vector-256 <----- orig_eax jmp common_interrupt and NR_IRQS < 256. So if we have pending signals on return from interrupt, do_signal() will not corrupt userspace registers when regs->eax == -ERESTART... accidentally. Probably it makes sense to change it to pushl $vector - 0xFFFF - 1 and in do_IRQ() int irq = regs->orig_eax & 0xFFFF if you need to send IRQs higher than 256 to do_IRQ. Oleg. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/