[Fwd: Bug: 2.2.12 still hangs PPC after some PPP activity]
Geert Uytterhoeven
Geert.Uytterhoeven at sonycom.com
Wed Sep 29 17:39:01 EST 1999
Hi Lou,
> > > What might happen if a driver does:
> >
> > point A
> >
> > > save_flags(old_flags);
> > > cli();
> > > restore_flags(old_flags);
>
> point A2?
>
> > > save_flags(new_flags);
> > > cli();
> > > restore_flags(new_flags);
> >
> > point B
> >
> > > /* can't we be interupted here? Assume yes, if so */
> > > restore_flags(old_flags);
> >
> > point C
point A == point A2 == point B == point C
> > > . . .Opinions??? Please clue me in anyway... this stuff's a kick! :-)
> >
> > The interrupt mask register has the same contents at points A, B and C. Hence,
> > if we could be interrupt a point A, we can be interrupt at points B and C. . . .
>
> Looking in macserial.c's rs_write() function it can call transmit_chars(info) at
> point B which would seem to me to be able to be a point at which the interupt mask
> register could change. No? I have to admit I'm only now reading the various docs
> on kernel locks. So I just email'd you hoping you'd give me another hint ;-)
I don't know how the serial port hardware has to be programmed. But if
transmit_chars() must be called with interrupts disabled, it's indeed a bug.
Greetings,
Geert
--
Geert Uytterhoeven ----------------- Sony Suprastructure Center Europe (SUPC-E)
Geert.Uytterhoeven at sonycom.com ------------------- Sint Stevens Woluwestraat 55
Phone +32-2-7248648 Fax +32-2-7262686 ---------------- B-1130 Brussels, Belgium
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-dev
mailing list