[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4af2d03a0704140952w6e2338c4g3037f4ba03e2fb1d@mail.gmail.com>
Date: Sat, 14 Apr 2007 18:52:01 +0200
From: "Jiri Slaby" <jirislaby@...il.com>
To: "Jan Yenya Kasprzak" <kas@...muni.cz>
Cc: linux-kernel@...r.kernel.org, osv@...ad.com
Subject: Re: [RFC 1/1] Char: mxser_new, fix recursive locking
On 4/14/07, Jan Yenya Kasprzak <kas@...muni.cz> wrote:
> Works for me, altough it spits tons of (bogus, in this case)
> warnings about possibly uninitialized variable "flags".
This is a gcc problem. I has been thinking about flags = 0
initialization, but developers dislike this shutting gcc up.
> Additionally, I think it is overzealous to wrap _all_
> spin_lock_irqsave/irqrestore() with if (!in_interrupt()). Some of them are
> never called from the interrupt context (mxser_block_till_ready(), for example
> - it can block, so if it is ever called from the interrupt context, we have
> a different, an order of magnitude worse problem here :-)
Yes, I had a patch, which changed only some of locks, but there were
only 2 or 3 spin_locks remaining. It's not a problem to test it
everywhere for little overhead, but maybe yes, I'll remove it from
open, close and block_til_whatever for the final patch.
> I have another problem with the driver - it probably sometimes
> drops DCD signal on the serial line or something like that:
> when the traffic on the serial console is heavy, it sometimes disconnects
> me from the remote shell, and cu(1) displays the login prompt from the new
> instance of mgetty of the remote machine. However, it does so both with
> mxser.o and mxser_new.o (in 2.6.21-rc6, I think it worked in 2.6.19,
> but I have to retest it). So this is another problem, different from
> the one we are trying to solve now.
There were some changes, however nothing significant in mxser.c, maybe
some of tty or ldisc layer changes (but there is only termios ->
ktermios switch + some other things), this would probably be hard to
find without bisecting if 2.6.19 is really OK for you.
The only idea I have right now is to nohup process, which will
int fd = open("/dev/ttyMIXX", O_RDONLY | O_NONBLOCK);
while (1) {
ioctl(fd, TIOCMIWAIT, TIOCM_CD);
ioctl(fd, TIOCMGET, &ret);
printf("%ld: carrier has changed: %u\n", time(NULL), !!(ret & TIOCM_CD));
}
to prove, if the carrier really becomes low.
regards,
--
http://www.fi.muni.cz/~xslaby/ Jiri Slaby
faculty of informatics, masaryk university, brno, cz
e-mail: jirislaby gmail com, gpg pubkey fingerprint:
B674 9967 0407 CE62 ACC8 22A0 32CC 55C3 39D4 7A7E
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists