Re: VM86 interrupt emulation breakage and FIXes for 2.6.x kernel series

Alan Cox
2004-12-11T15:23:37Z

On Sad, 2004-12-11 at 04:21, Linus Torvalds wrote:
> Alan, what _are_ you arguing about? That "disable_irq()" is absolutely
> rquired, because:
> - not having it locks up the machine if the irq happens to be level.
> - not having it means that the "enable_irq()" that happens when the irq
> is reported to user space is unbalanced.

That part I missed.

> > Putting a single disable_irq in doesn't change the fact it doesn't work
> > because the IRQ is never re-enabled.
>
> Did you actually test the code? Did you ever _look_ at it?

Yes I tested it. It worked in my test code, unfortunately the enable_irq
part of it didn't show up because the other patches in that test set
included ones for dynamically detecting interrupt routing errors and
they hid it.

Alan

ps: Pavel - the X folks played with several ideas for handling
interrupts
from user space that could be shared, forwarded to user space and
handled and it always came back to either a small kernel module or an
interpretable set of
descriptions of how to test for and mask the IRQ, and in some cases to
save
several values. Something like

struct descriptor {
u8 type:2; /* 0 PCI cfg, 1 mem, 2 I/O */
u8 width:2;
u32 offset;
u32 mask;
u32 value;
}

struct irq_descriptor {
char name[16]; /* For request irq */
struct descriptor test;
struct descriptor mask;
struct descriptor save[4];
};

although nobody ever implemented it. This would also have been outside
of just vm86 as the main user would be X.