All times are UTC-06:00




Post new topic  Reply to topic  [ 5 posts ] 
Author Message
 Post subject: MPC5200 SDMA/PIO driver
PostPosted: Sun Dec 17, 2006 4:41 am 
Offline

Joined: Sun Oct 24, 2004 7:37 am
Posts: 37
I wonder anyone was able to use it ? As I can see it's disabled in kernel from efika.de, but I guess it can help a bit with poor ATA performance on Efika (IMHO performance is not so big problem the CPU usage with libata driver is)

I disabled PATA_MPC52xx and enabled BLK_DEV_MPC52XX_ATAPIO, BLK_DEV_MPC52XX_ATAPIO_SDMA, BLK_DEV_MPC52XX_ATAPIO_MAXPIO and as result I get only a kernel OOPS on startup:

MPC52xx/OpenFirmware: 13696 kB of free SRAM
Call Trace:
[C04A3B20] [C000841C] show_stack+0x50/0x184 (unreliable)
[C04A3B40] [C026EAE4] schedule+0x48/0x608
[C04A3B70] [C026F7A4] io_schedule+0x30/0x54
[C04A3B90] [C0051004] sync_page+0x60/0x74
[C04A3BA0] [C026FB90] __wait_on_bit_lock+0x68/0xcc
[C04A3BC0] [C0050F6C] __lock_page+0x64/0x78
[C04A3C00] [C00536CC] read_cache_page+0x138/0x1b8
[C04A3C20] [C00B6F0C] read_dev_sector+0x34/0xac
[C04A3C40] [C00B78C4] msdos_partition+0x50/0x590
[C04A3CA0] [C00B72E0] rescan_partitions+0x11c/0x204
[C04A3CD0] [C009FD50] do_open+0x2bc/0x3a8
[C04A3E10] [C009FEA4] blkdev_get+0x68/0x7c
[C04A3F40] [C00B7134] register_disk+0x1b0/0x240
[C04A3F60] [C012B2B0] add_disk+0x58/0x74
[C04A3F80] [C02FC0EC] kernelcall_init+0x348/0x3dc
[C04A3FA0] [C0003D8C] init+0x9c/0x268
[C04A3FF0] [C0013028] kernel_thread+0x44/0x60
BUG: scheduling while atomic: swapper/0xffffffff/0
Call Trace:
[C0351F50] [C000841C] show_stack+0x50/0x184 (unreliable)
[C0351F70] [C026EAE4] schedule+0x48/0x608
[C0351FA0] [C0009398] cpu_idle+0xd4/0xd8
[C0351FB0] [C0003F80] rest_init+0x28/0x38
[C0351FC0] [C02DF6C4] start_kernel+0x208/0x21c
[C0351FF0] [00003860] 0x3860
Call Trace:
[C04A3B20] [C000841C] show_stack+0x50/0x184 (unreliable)
[C04A3B40] [C026EAE4] schedule+0x48/0x608
[C04A3B70] [C026F7A4] io_schedule+0x30/0x54
[C04A3B90] [C0051004] sync_page+0x60/0x74
[C04A3BA0] [C026FB90] __wait_on_bit_lock+0x68/0xcc
[C04A3BC0] [C0050F6C] __lock_page+0x64/0x78
[C04A3C00] [C00536CC] read_cache_page+0x138/0x1b8
[C04A3C20] [C00B6F0C] read_dev_sector+0x34/0xac
[C04A3C40] [C00B7538] amiga_partition+0x170/0x328
[C04A3CA0] [C00B72E0] rescan_partitions+0x11c/0x204
[C04A3CD0] [C009FD50] do_open+0x2bc/0x3a8
[C04A3E10] [C009FEA4] blkdev_get+0x68/0x7c
[C04A3F40] [C00B7134] register_disk+0x1b0/0x240
[C04A3F60] [C012B2B0] add_disk+0x58/0x74
[C04A3F80] [C02FC0EC] kernelcall_init+0x348/0x3dc
[C04A3FA0] [C0003D8C] init+0x9c/0x268
[C04A3FF0] [C0013028] kernel_thread+0x44/0x60
BUG: scheduling while atomic: swapper/0x00000001/1
Call Trace:
[C04A3DF0] [C000841C] show_stack+0x50/0x184 (unreliable)
[C04A3E10] [C026EAE4] schedule+0x48/0x608
[C04A3E40] [C026F2B4] wait_for_completion+0x8c/0xf8
[C04A3E70] [C0031198] call_usermodehelper_keys+0xdc/0xf8
[C04A3F00] [C0134470] kobject_uevent+0x3bc/0x408
[C04A3F40] [C00B7158] register_disk+0x1d4/0x240
[C04A3F60] [C012B2B0] add_disk+0x58/0x74
[C04A3F80] [C02FC0EC] kernelcall_init+0x348/0x3dc
[C04A3FA0] [C0003D8C] init+0x9c/0x268
[C04A3FF0] [C0013028] kernel_thread+0x44/0x60
BUG: scheduling while atomic: swapper/0x00000001/1
Call Trace:
[C04A3DF0] [C000841C] show_stack+0x50/0x184 (unreliable)
[C04A3E10] [C026EAE4] schedule+0x48/0x608
[C04A3E40] [C026F2B4] wait_for_completion+0x8c/0xf8
[C04A3E70] [C0031198] call_usermodehelper_keys+0xdc/0xf8
[C04A3F00] [C0134470] kobject_uevent+0x3bc/0x408
[C04A3F40] [C00B718C] register_disk+0x208/0x240
[C04A3F60] [C012B2B0] add_disk+0x58/0x74
[C04A3F80] [C02FC0EC] kernelcall_init+0x348/0x3dc
[C04A3FA0] [C0003D8C] init+0x9c/0x268
[C04A3FF0] [C0013028] kernel_thread+0x44/0x60
BUG: scheduling while atomic: swapper/0x00000001/1
Call Trace:
[C04A3DF0] [C000841C] show_stack+0x50/0x184 (unreliable)
[C04A3E10] [C026EAE4] schedule+0x48/0x608
[C04A3E40] [C026F2B4] wait_for_completion+0x8c/0xf8
[C04A3E70] [C0031198] call_usermodehelper_keys+0xdc/0xf8
[C04A3F00] [C0134470] kobject_uevent+0x3bc/0x408
[C04A3F40] [C00B718C] register_disk+0x208/0x240
[C04A3F60] [C012B2B0] add_disk+0x58/0x74
[C04A3F80] [C02FC0EC] kernelcall_init+0x348/0x3dc
[C04A3FA0] [C0003D8C] init+0x9c/0x268
[C04A3FF0] [C0013028] kernel_thread+0x44/0x60
BUG: scheduling while atomic: swapper/0x00000001/1
Call Trace:
[C04A3DF0] [C000841C] show_stack+0x50/0x184 (unreliable)
[C04A3E10] [C026EAE4] schedule+0x48/0x608
[C04A3E40] [C026F2B4] wait_for_completion+0x8c/0xf8
[C04A3E70] [C0031198] call_usermodehelper_keys+0xdc/0xf8
[C04A3F00] [C0134470] kobject_uevent+0x3bc/0x408
[C04A3F40] [C00B718C] register_disk+0x208/0x240
[C04A3F60] [C012B2B0] add_disk+0x58/0x74
[C04A3F80] [C02FC0EC] kernelcall_init+0x348/0x3dc
[C04A3FA0] [C0003D8C] init+0x9c/0x268
[C04A3FF0] [C0013028] kernel_thread+0x44/0x60
BUG: scheduling while atomic: swapper/0x00000001/1
Call Trace:
[C04A3DF0] [C000841C] show_stack+0x50/0x184 (unreliable)
[C04A3E10] [C026EAE4] schedule+0x48/0x608
[C04A3E40] [C026F2B4] wait_for_completion+0x8c/0xf8
[C04A3E70] [C0031198] call_usermodehelper_keys+0xdc/0xf8
[C04A3F00] [C0134470] kobject_uevent+0x3bc/0x408
[C04A3F40] [C00B718C] register_disk+0x208/0x240
[C04A3F60] [C012B2B0] add_disk+0x58/0x74
[C04A3F80] [C02FC0EC] kernelcall_init+0x348/0x3dc
[C04A3FA0] [C0003D8C] init+0x9c/0x268
[C04A3FF0] [C0013028] kernel_thread+0x44/0x60
BUG: scheduling while atomic: swapper/0x00000001/1
Call Trace:
[C04A3DF0] [C000841C] show_stack+0x50/0x184 (unreliable)
[C04A3E10] [C026EAE4] schedule+0x48/0x608
[C04A3E40] [C026F2B4] wait_for_completion+0x8c/0xf8
[C04A3E70] [C0031198] call_usermodehelper_keys+0xdc/0xf8
[C04A3F00] [C0134470] kobject_uevent+0x3bc/0x408
[C04A3F40] [C00B718C] register_disk+0x208/0x240
[C04A3F60] [C012B2B0] add_disk+0x58/0x74
[C04A3F80] [C02FC0EC] kernelcall_init+0x348/0x3dc
[C04A3FA0] [C0003D8C] init+0x9c/0x268
[C04A3FF0] [C0013028] kernel_thread+0x44/0x60
BUG: scheduling while atomic: swapper/0x00000001/1
Call Trace:
[C04A3DF0] [C000841C] show_stack+0x50/0x184 (unreliable)
[C04A3E10] [C026EAE4] schedule+0x48/0x608
[C04A3E40] [C026F2B4] wait_for_completion+0x8c/0xf8
[C04A3E70] [C0031198] call_usermodehelper_keys+0xdc/0xf8
[C04A3F00] [C0134470] kobject_uevent+0x3bc/0x408
[C04A3F40] [C00B718C] register_disk+0x208/0x240
[C04A3F60] [C012B2B0] add_disk+0x58/0x74
[C04A3F80] [C02FC0EC] kernelcall_init+0x348/0x3dc
[C04A3FA0] [C0003D8C] init+0x9c/0x268
[C04A3FF0] [C0013028] kernel_thread+0x44/0x60
MPC52xx ATA/PIO: MPC52xx ATA/PIO (Version 0.7 - Compiled date Dec 16 2006 at 21:09:03)
initcall at 0xc02fbda4: kernelcall_init+0x0/0x3dc(): returned with preemption imbalance


Top
   
PostPosted: Sun Dec 17, 2006 8:37 am 
Offline
Site Admin

Joined: Fri Sep 24, 2004 1:39 am
Posts: 1589
Location: Austin, TX
Quote:
MPC52xx ATA/PIO: MPC52xx ATA/PIO (Version 0.7 - Compiled date Dec 16 2006 at 21:09:03)
initcall at 0xc02fbda4: kernelcall_init+0x0/0x3dc(): returned with preemption imbalance
Disable preemption?

_________________
Matt Sealey


Top
   
 Post subject:
PostPosted: Sun Dec 17, 2006 9:41 am 
Offline

Joined: Sun Oct 24, 2004 7:37 am
Posts: 37
Tired with and without preemption enabled with same result.


Top
   
 Post subject:
PostPosted: Tue Dec 26, 2006 12:21 pm 
Offline

Joined: Tue Nov 02, 2004 6:17 am
Posts: 28
Hi,

now I am also running the kernel vom efika.de
in a Debian. 2.6.19-rc6-g9468d500-dirty ATM.

HDparm reports about 4MB/s, so DMA is non-functional?
hdparm -d /dev/sda does not give me the usual answer
about DMA.

Will build an own 2.6.19 and report if that works.

Regards,
Peter


Top
   
 Post subject:
PostPosted: Tue Dec 26, 2006 2:16 pm 
Offline
Site Admin

Joined: Fri Sep 24, 2004 1:39 am
Posts: 1589
Location: Austin, TX
Quote:
Hi,

now I am also running the kernel vom efika.de
in a Debian. 2.6.19-rc6-g9468d500-dirty ATM.

HDparm reports about 4MB/s, so DMA is non-functional?
hdparm -d /dev/sda does not give me the usual answer
about DMA.

Will build an own 2.6.19 and report if that works.

Regards,
Peter
Note that due to the way the MPC5200B handles ATA it's not entirely safe to do DMA in the same way you get with UDMA drivers on the PC or other chipset solutions; the DMA mode we recommend is the DMA-PIO operation where PIO operations are assisted by the DMA engine for register transfers and other data. It's DMA between the host controller and the rest of the system, and not between the drive and some buffer managed by the host controller.

4MB/s is probably a good rate to have; remember at 4200rpm and fairly average data densities laptop drives do NOT have miraculous 70MB/s sustained transfer rates - 16-25MB/s is about normal at the high end. Remember you have an SoC ATA controller (designed for more embedded CompactFlash or MTD discs), and limited performance available on the processor side.

There is a lot that could be done on the ATA driver for sure, a lot of it may be down to simply inefficient code (MPC5200 support was originally for Linux 2.4.x and has been ported across with little special optimization for any new driver API tweaks). The SCSI layer through libata also adds a small overhead (larger than anyone might expect, but not noticable on very well coded drivers).

If the driver loaded, it IS doing DMA of some kind. The purpose of DMA is not to increase performance, but to reduce CPU load/interference on transfers.

_________________
Matt Sealey


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 5 posts ] 

All times are UTC-06:00


Who is online

Users browsing this forum: No registered users and 8 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
PowerDeveloper.org: Copyright © 2004-2012, Genesi USA, Inc. The Power Architecture and Power.org wordmarks and the Power and Power.org logos and related marks are trademarks and service marks licensed by Power.org.
All other names and trademarks used are property of their respective owners. Privacy Policy
Powered by phpBB® Forum Software © phpBB Group