Problem of concurrency in arch/ppc/8260_io/uart.c
Steffen Rumler
Steffen.Rumler at siemens.com
Mon Sep 15 20:18:10 EST 2003
Hi,
I have seen a similar problem for the 2.4.20.
When I force a lot of console output via the following command:
while true; do cd /; ls -R; done
and type-in some letters in parallel, the console
becomes crazy.
I have added some instrumentation in order to dump the
TX Buffer Descriptor Table. I have found that the
hardware pointer (TBPTR) and the software pointer (tx_cur)
are not more synchronized together:
>> make new rlogin session <<
/root# cd /proc/driver
/root# cat uart-bdtables; cat mpc82xx/smc1_pram | grep SMC1_PRAM_TBPTR
TX BD table
(000 at 0xfff005f0) status: 0x1000 len: 0001 addr: 0x001bb084
(001 at 0xfff005f8) status: 0x1000 len: 0001 addr: 0x001bb0a4
* (002 at 0xfff00600) status: 0x1000 len: 0001 addr: 0x001bb0c4
(003 at 0xfff00608) status: 0x3000 len: 0004 addr: 0x001bb0e4
SMC1_PRAM_TBPTR 0x20 2 0600
--> hardware and software pointer still synchronized
>> force console to become crazy (see above) <<
/root# cat uart-bdtables; cat mpc82xx/smc1_pram | grep SMC1_PRAM_TBPTR
TX BD table (tbptr: 0x00000088)
(000 at 0xfff005f0) status: 0x1000 len: 0003 addr: 0x001bb084
* (001 at 0xfff005f8) status: 0x1000 len: 0021 addr: 0x001bb0a4
(002 at 0xfff00600) status: 0x1000 len: 0001 addr: 0x001bb0c4
(003 at 0xfff00608) status: 0x3000 len: 0001 addr: 0x001bb0e4
SMC1_PRAM_TBPTR 0x20 2 0600
--> hardware and software pointer NOT more synchronized
>> make additional console output: echo foo >/dev/console <<
/root# cat uart-bdtables; cat mpc82xx/smc1_pram | grep SMC1_PRAM_TBPTR
* (000 at 0xfff005f0) status: 0x1000 len: 0003 addr: 0x001bb084
(001 at 0xfff005f8) status: 0x9000 len: 0004 addr: 0x001bb0a4
(002 at 0xfff00600) status: 0x1000 len: 0001 addr: 0x001bb0c4
(003 at 0xfff00608) status: 0x3000 len: 0001 addr: 0x001bb0e4
SMC1_PRAM_TBPTR 0x20 2 05f0
--> hardware pointer hangs at 0x5f0 because R-Bit not set, but
at 0x5f8
Inside uart.c, there are the following output routines:
rs_8xx_put_char()
rs_8xx_write()
rs_8xx_send_xchar()
my_console_write()
I think there must be a synchronization accessing the
TX BD table. I suggest the patch attached.
Best Regards
Steffen
--
--------------------------------------------------------------
Steffen Rumler
ICN CP D NT SW 7
Siemens AG
Hofmannstr. 51 Email: Steffen.Rumler at siemens.com
D-81359 Munich Phone: +49 89 722-44061
Germany Fax : +49 89 722-36703
--------------------------------------------------------------
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: uart.c.patch
Url: http://ozlabs.org/pipermail/linuxppc-embedded/attachments/20030915/d1e62942/attachment.txt
More information about the Linuxppc-embedded
mailing list