[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-arm-kernel
Subject:    Re: [CFT] Mark IO as bufferable
From:       "Lothar Wassmann" <LW () KARO-electronics ! de>
Date:       2005-06-28 13:07:19
Message-ID: 17089.19335.435059.621460 () ipc1 ! karo
[Download RAW message or body]

Hi Russell,

Russell King - ARM Linux writes:
> Can people please test out the effect of this change.  Potentially it
> should get slightly better IO performance.  Or it could prevent the
> kernel booting.
> 
I've tested this patch on our PXA255 and PXA270 platforms with kernel
version 2.6.11-mm2.

> Please let me know what CPUs it works / does not work with, and
> also the outcome of the write buffer test on a kernel without this
> patch applied.  IOW, the line starting:
> 
PXA255:
The reaction depends on the CPU clock speed.
With 99.5MHz the kernel crashes:
---------------------
Linux version 2.6.11-mm2-karo (lothar@ipc1) (gcc version 3.4.3) #13 Tue Jun 28 \
                11:54:16 CEST 2005
CPU: XScale-PXA255 [69052d06] revision 6 (ARMv5TE)
CPU0: D VIVT undefined 5 cache
CPU0: I cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
CPU0: D cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
Machine: KARO electronics PXA255 processor module
Using buffered IO
Memory policy: ECC disabled, Data cache writeback
Memory clock: 99.53MHz (*27)
Run Mode clock: 99.53MHz (*1)
Turbo Mode clock: 99.53MHz (*1.0, inactive)
On node 0 totalpages: 4096
  DMA zone: 4096 pages, LIFO batch:1
  Normal zone: 0 pages, LIFO batch:1
  HighMem zone: 0 pages, LIFO batch:1
Built 1 zonelists
Kernel command line:  root=/dev/nfs nfsroot=192.168.1.225:/tftpboot/rootfs ip=bootp \
debug panic=5 console=ttyS0,38400 ro Unhandled fault: imprecise external abort \
(0xc06) at 0x40141d0c Unable to handle kernel NULL pointer dereference at virtual \
address 00000000 pgd = c0004000
[00000000] *pgd=00000000
Internal error: Oops: f5 [#1]
Modules linked in:
CPU: 0
PC is at kmem_cache_alloc+0x18/0x48
LR is at __sigqueue_alloc+0x60/0xd0
pc : [<c00632d8>]    lr : [<c0048ad4>]    Not tainted
sp : c01dfeb8  ip : c01dfecc  fp : c01dfec8
r10: a001f298  r9 : 800000d3  r8 : c01dff64
r7 : 00000000  r6 : c01e02c0  r5 : 00000007  r4 : 200000d3
r3 : c0225594  r2 : 200000d3  r1 : 00000020  r0 : 00000000
Flags: nzCv  IRQs off  FIQs off  Mode SVC_32  Segment kernel
Control: 397F  Table: A0004000  DAC: 00000017
Process swapper (pid: 0, stack limit = 0xc01de194)
Stack: (0xc01dfeb8 to 0xc01e0000)
fea0:                                                       c01e00c0 c01dfedc 
fec0: c01dfecc c0048ad4 c00632cc 00000001 c01dfefc c01dfee0 c0049478 c0048a80 
fee0: 00000001 c01e00c0 00000007 00000000 c01dff1c c01dff00 c0049624 c0049430 
ff00: c01e00c0 00000007 600000d3 00000001 c01dff3c c01dff20 c004970c c0049594 
ff20: 00000c06 c01de000 c01e1620 40141d0c c01dff60 c01dff40 c002ac24 c0049680 
ff40: ffffffff c01dff98 ffffffff c0231954 a001f2f8 c01dffbc c01dff64 c002349c 
ff60: c002abc4 00000003 f2e00000 00000010 00000000 00000000 c021ddc8 ffffffff 
ff80: c0231954 a001f2f8 69052d06 a001f298 c01dffbc c01dffc0 c01dffac f2d00000 
ffa0: c0011118 800000d3 ffffffff c021dda0 c01dffd8 c01dffc0 c000ebf4 c00110e4 
ffc0: 0000397d c021de40 c01e1034 c01dfffc c01dffdc c00086b4 c000eb9c c00082e4 
ffe0: c021de58 0000397d c021de40 c01e1034 00000000 c01e0000 a000809c c0008640 
Backtrace: 
[<c00632c0>] (kmem_cache_alloc+0x0/0x48) from [<c0048ad4>] \
(__sigqueue_alloc+0x60/0xd0)  r4 = C01E00C0 
[<c0048a74>] (__sigqueue_alloc+0x0/0xd0) from [<c0049478>] (send_signal+0x54/0x164)
 r4 = 00000001 
[<c0049424>] (send_signal+0x0/0x164) from [<c0049624>] \
(specific_send_sig_info+0x9c/0xec)  r7 = 00000000  r6 = 00000007  r5 = C01E00C0  r4 = \
00000001 [<c0049588>] (specific_send_sig_info+0x0/0xec) from [<c004970c>] \
(force_sig_info+0x98/0xa0)  r7 = 00000001  r6 = 600000D3  r5 = 00000007  r4 = \
C01E00C0 [<c0049674>] (force_sig_info+0x0/0xa0) from [<c002ac24>] \
(do_DataAbort+0x6c/0xa0)  r7 = 40141D0C  r6 = C01E1620  r5 = C01DE000  r4 = 00000C06
[<c002abb8>] (do_DataAbort+0x0/0xa0) from [<c002349c>] (__dabt_svc+0x3c/0x60)
 r8 = A001F2F8  r7 = C0231954  r6 = FFFFFFFF  r5 = C01DFF98
 r4 = FFFFFFFF 
[<c00110d8>] (pxa_init_irq+0x0/0x150) from [<c000ebf4>] (init_IRQ+0x64/0x78)
 r4 = C021DDA0 
[<c000eb90>] (init_IRQ+0x0/0x78) from [<c00086b4>] (start_kernel+0x80/0x1b4)
 r6 = C01E1034  r5 = C021DE40  r4 = 0000397D 
[<c0008634>] (start_kernel+0x0/0x1b4) from [<a000809c>] (0xa000809c)
 r6 = C01E1034  r5 = C021DE40  r4 = 0000397D 
Code: e24cb004 e10f4000 e3842080 e121f002 (e5902000) 
 Kernel panic - not syncing: Attempted to kill the idle task!
 Rebooting in 5 seconds..Reboot failed -- System halted
---------------------

With CPU frequency >99.5MHz the system boots:
> Calibrating delay loop... 397.31 BogoMIPS (lpj=1986560)
> Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
> CPU: Testing write buffer coherency: ok

but depending on the CPU clock speed I'm getting garbled output on the
serial console from userspace programs (kernel printk messages are not
affected):
> Setting the Sytem Clock usin the Hardware Clck as referenc... done.
> Configuring networ itrfce: done.
> server 192.168..25, stratum 16, offset 11199429.039729, delay 0.02623
> 1 a 01:00:29 ntpdate[521]: no serve suitable for synchronizatio fund

It seems like all clock combinations where SDRAM is running at 99.5MHz
and the PXBus is running at less or equal 99.5MHz show the above
behaviour while other combinations work.

An interesting point might be that 99.5MHz fails to boot, but works
well when switched to lateron.


PXA270:
independent of CPU clock I'm getting:
---------------------
Linux version 2.6.11-mm2-karo-mmx (lothar@ipc1) (gcc version 3.4.3) #77 Tue Jun 28 \
                12:38:28 CEST 2005
CPU: XScale-PXA270 [69054117] revision 7 (ARMv5TE)
CPU0: D VIVT undefined 5 cache
CPU0: I cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
CPU0: D cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
Machine: KARO electronics PXA270 processor module
Memory policy: ECC disabled, Data cache writeback
Run Mode clock: 104.00MHz (*8)
Turbo Mode clock: 104.00MHz (*1.0, active)
Memory clock: 104.00MHz (/1)
System bus clock: 104.00MHz 
On node 0 totalpages: 16384
  DMA zone: 16384 pages, LIFO batch:4
  Normal zone: 0 pages, LIFO batch:1
  HighMem zone: 0 pages, LIFO batch:1
Built 1 zonelists
Kernel command line:  root=/dev/nfs nfsroot=192.168.1.225:/tftpboot/rootfs ip=bootp \
panic=5 console=ttyS2,38400 ro Unhandled fault: imprecise external abort (0x406) at \
0xffffffff Unable to handle kernel NULL pointer dereference at virtual address \
00000048 pgd = c0004000
[00000048] *pgd=00000000
Internal error: Oops: f5 [#1]
Modules linked in:
CPU: 0
PC is at kmem_flagcheck+0x10/0x50
LR is at kmem_cache_alloc+0x1c/0xb8
pc : [<c006503c>]    lr : [<c0065718>]    Not tainted
sp : c01e5e9c  ip : c01e5eac  fp : c01e5ea8
r10: a001e9f0  r9 : 800000d3  r8 : c01e5f64
r7 : c004a3d4  r6 : 00000020  r5 : 00000007  r4 : 00000000
r3 : c022cfb4  r2 : 00000000  r1 : 00000020  r0 : 00000000
Flags: nZCv  IRQs off  FIQs off  Mode SVC_32  Segment kernel
Control: 397F  Table: A0004000  DAC: 00000017
Process swapper (pid: 0, stack limit = 0xc01e41a4)
Stack: (0xc01e5e9c to 0xc01e6000)
5e80:                                                                c01e5ec8 
5ea0: c01e5eac c0065718 c0065038 c01e60c0 00000007 c01e62c0 00000000 c01e5edc 
5ec0: c01e5ecc c004a3d4 c0065708 00000001 c01e5efc c01e5ee0 c004ad78 c004a380 
5ee0: 00000001 c01e60c0 00000007 00000000 c01e5f1c c01e5f00 c004af24 c004ad30 
5f00: c01e60c0 00000007 600000d3 00000001 c01e5f3c c01e5f20 c004b00c c004ae94 
5f20: 00000406 c01e4000 c01e7624 ffffffff c01e5f60 c01e5f40 c002c144 c004af80 
5f40: ffffffff c01e5f98 ffffffff c0239454 a001ea20 c01e5fbc c01e5f64 c002449c 
5f60: c002c0e4 00000003 00000000 00000000 f2e00000 00000000 c02256f8 ffffffff 
5f80: c0239454 a001ea20 69054117 a001e9f0 c01e5fbc f2d00000 c01e5fac 00100000 
5fa0: c001113c 800000d3 ffffffff c02256d0 c01e5fd8 c01e5fc0 c000ebf4 c00110d8 
5fc0: 0000397d c0225770 c01e7034 c01e5ffc c01e5fdc c00086b4 c000eb9c c00082e4 
5fe0: c0225788 0000397d c0225770 c01e7034 00000000 c01e6000 a000809c c0008640 
Backtrace: 
[<c006502c>] (kmem_flagcheck+0x0/0x50) from [<c0065718>] (kmem_cache_alloc+0x1c/0xb8)
[<c00656fc>] (kmem_cache_alloc+0x0/0xb8) from [<c004a3d4>] \
(__sigqueue_alloc+0x60/0xd0)  r7 = 00000000  r6 = C01E62C0  r5 = 00000007  r4 = \
C01E60C0 [<c004a374>] (__sigqueue_alloc+0x0/0xd0) from [<c004ad78>] \
(send_signal+0x54/0x164)  r4 = 00000001 
[<c004ad24>] (send_signal+0x0/0x164) from [<c004af24>] \
(specific_send_sig_info+0x9c/0xec)  r7 = 00000000  r6 = 00000007  r5 = C01E60C0  r4 = \
00000001 [<c004ae88>] (specific_send_sig_info+0x0/0xec) from [<c004b00c>] \
(force_sig_info+0x98/0xa0)  r7 = 00000001  r6 = 600000D3  r5 = 00000007  r4 = \
C01E60C0 [<c004af74>] (force_sig_info+0x0/0xa0) from [<c002c144>] \
(do_DataAbort+0x6c/0xa0)  r7 = FFFFFFFF  r6 = C01E7624  r5 = C01E4000  r4 = 00000406
[<c002c0d8>] (do_DataAbort+0x0/0xa0) from [<c002449c>] (__dabt_svc+0x3c/0x60)
 r8 = A001EA20  r7 = C0239454  r6 = FFFFFFFF  r5 = C01E5F98
 r4 = FFFFFFFF 
[<c00110cc>] (pxa_init_irq+0x0/0x1a4) from [<c000ebf4>] (init_IRQ+0x64/0x78)
 r4 = C02256D0 
[<c000eb90>] (init_IRQ+0x0/0x78) from [<c00086b4>] (start_kernel+0x80/0x1b4)
 r6 = C01E7034  r5 = C0225770  r4 = 0000397D 
[<c0008634>] (start_kernel+0x0/0x1b4) from [<a000809c>] (0xa000809c)
 r6 = C01E7034  r5 = C0225770  r4 = 0000397D 
Code: e1a0c00d e92dd800 e24cb004 e2112001 (e5903048) 
 Kernel panic - not syncing: Attempted to kill the idle task!
 Rebooting in 5 seconds..Reboot failed -- System halted
---------------------



Lothar Wassmann

-------------------------------------------------------------------
List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
FAQ:        http://www.arm.linux.org.uk/mailinglists/faq.php
Etiquette:  http://www.arm.linux.org.uk/mailinglists/etiquette.php


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic