I am trying to configure a PC104/16C550 modem which has jumpers to set the port address(8 ports) & irq(from 3 thru 7). The host is an Arcom Viper
(PC104, Linux viper 2.6.16.28-arcom1-1-viper #1 Wed Sep 13 11:29:51 BST 2006 armv5tel unknown). This comptuer has 5 serial ports by default:
Code:
Serial: 8250/16550 driver $Revision: 1.90 $ 64 ports, IRQ sharing enabled
serial8250.0: ttyS0 at MMIO 0x40100000 (irq = 15) is a XScale
serial8250.0: ttyS1 at MMIO 0x40200000 (irq = 14) is a XScale
serial8250.0: ttyS2 at MMIO 0x40700000 (irq = 13) is a XScale
serial8250.0: ttyS3 at MMIO 0x14300010 (irq = 27) is a XR16850
serial8250.0: ttyS4 at MMIO 0x14300000 (irq = 26) is a XR16850
...so I set the port to 0x2A8 (6th port) and irq is set as 7 with setserial:
Code:
# setserial /dev/ttyS5 baud_base 115200 port 0x2a8 irq 7 uart 16550
but this always results in a deadlock & a lot of debugging info is displayed below
Code:
Unable to handle kernel NULL pointer dereference at virtual address 000002aa
pgd = c30b8000
[000002aa] *pgd=a311a031, *pte=00000000, *ppte=00000000
Internal error: Oops: 817 [#1]
Modules linked in: serial_cs isp116x_hcd usbcore pxa2xx_cs pxa2xx_core pcmcia pcmcia_core firmware_class ds1307
CPU: 0
PC is at serial_out+0x78/0x80
LR is at 0x1
pc : [<c00e4f44>] lr : [<00000001>] Not tainted
sp : c30a5c40 ip : 00000000 fp : c30a5c4c
r10: 00000000 r9 : 00000000 r8 : 00000001
r7 : 00000000 r6 : c02b112c r5 : c01c9c38 r4 : 00000000
r3 : 000002a8 r2 : 00000001 r1 : 00000002 r0 : c01c9c38
Flags: Nzcv IRQs on FIQs on Mode SVC_32 Segment user
Control: 397F Table: A30B8000 DAC: 00000015
Process setserial (pid: 718, stack limit = 0xc30a4198)
Code:
Backtrace:
[<c00e4ecc>] (serial_out+0x0/0x80) from [<c00e5c20>] (serial8250_startup+0xd4/0x3a8)
[<c00e5b4c>] (serial8250_startup+0x0/0x3a8) from [<c00e24a4>] (uart_startup+0xa0/0x19c)
r6 = C02B112C r5 = C01C9C38 r4 = C38DFC60
[<c00e2404>] (uart_startup+0x0/0x19c) from [<c00e3324>] (uart_ioctl+0x5a4/0xa44)
r8 = BEF30CB8 r7 = 00000000 r6 = C02B112C r5 = 00000000
r4 = C01C9C38
[<c00e2d80>] (uart_ioctl+0x0/0xa44) from [<c00d2c3c>] (tty_ioctl+0xcc0/0xd64)
[<c00d1f7c>] (tty_ioctl+0x0/0xd64) from [<c0076bfc>] (do_ioctl+0x78/0x88)
[<c0076b84>] (do_ioctl+0x0/0x88) from [<c0076e9c>] (vfs_ioctl+0x290/0x2b0)
r6 = 00000003 r5 = BEF30CB8 r4 = C397D4E0
[<c0076c0c>] (vfs_ioctl+0x0/0x2b0) from [<c0076efc>] (sys_ioctl+0x40/0x5c)
r7 = 00000036 r6 = 0000541F r5 = FFFFFFF7 r4 = C397D4E0
[<c0076ebc>] (sys_ioctl+0x0/0x5c) from [<c0018ce0>] (ret_fast_syscall+0x0/0x2c)
r6 = BEF30ECA r5 = 000132DC r4 = 0000A058
Code: e5903004 e7832001 e89da800 e5903000 (e7c3e001)
==========================================
[ BUG: lock recursion deadlock detected! |
------------------------------------------
setserial/718 is trying to acquire this lock:
[c02b1144] {uart_register_driver}
.. held by: setserial: 718 [c03cd820, 117]
... acquired at: uart_ioctl+0x1ec/0xa44
... trying at: uart_close+0x38/0x1d4
------------------------------
| showing all locks held by: | (setserial/718 [c03cd820, 117]):
------------------------------
#001: [c02b1144] {uart_register_driver}
... acquired at: uart_ioctl+0x1ec/0xa44
Code:
Showing all blocking locks in the system:
S init: 1 [c0284d60, 116] (not blocked on mutex)
S ksoftirqd/0: 2 [c0284ac0, 134] (not blocked on mutex)
S watchdog/0: 3 [c0284820, 0] (not blocked on mutex)
S events/0: 4 [c0284580, 110] (not blocked on mutex)
S khelper: 5 [c02842e0, 110] (not blocked on mutex)
S kthread: 6 [c0284040, 115] (not blocked on mutex)
S kblockd/0: 25 [c02fed60, 120] (not blocked on mutex)
S pdflush: 48 [c0335040, 120] (not blocked on mutex)
S pdflush: 49 [c0349d60, 115] (not blocked on mutex)
S aio/0: 51 [c0349820, 120] (not blocked on mutex)
S kswapd0: 50 [c0349ac0, 125] (not blocked on mutex)
S mtdblockd: 200 [c02c02e0, 125] (not blocked on mutex)
S jffs2_gcd_mtd2: 258 [c03cd040, 135] (not blocked on mutex)
S pccardd: 482 [c03cd2e0, 115] (not blocked on mutex)
S khubd: 511 [c02d6ac0, 110] (not blocked on mutex)
S portmap: 606 [c02c0580, 115] (not blocked on mutex)
S syslogd: 627 [c02d62e0, 116] (not blocked on mutex)
R klogd: 630 [c03cd580, 116] (not blocked on mutex)
S rpc.statd: 635 [c02d6820, 120] (not blocked on mutex)
S inetd: 662 [c02b3820, 120] (not blocked on mutex)
R thttpd: 667 [c02c0820, 116] (not blocked on mutex)
S sshd: 674 [c03ff580, 116] (not blocked on mutex)
S cron: 679 [c02fe820, 115] (not blocked on mutex)
S getty: 680 [c3c16d60, 116] (not blocked on mutex)
S sshd: 681 [c0349580, 115] (not blocked on mutex)
S sh: 685 [c03492e0, 115] (not blocked on mutex)
R setserial: 718 [c03cd820, 117] (not blocked on mutex)
I am however able to repeat the above command successfully but I have to exclude the uart option and setserial returns instantly. The settings were verified as being set, however any operation with the port (/dev/ttyS5) results in an I/O error (even a simple cat < /dev/ttyS5).
I've removed all gettys on serial ports...what could be the problem?