# DMA just wont work.

## pyrobob

I cannot for the life of me to get DMA working on my new hard drive.  here is my setup:

-an old P2-450MHz with 128 MB of ram and a small hard drive with my system on it on the onboard IDE controller.

-new Maxtor Ultra ATA/133 160GB harddrive (for my /home directory)

    formatted with one ext3 partition that fills up the entire drive. 

-new Maxtor Ultra ATA/133 PCI card (Says for windows only, but is a promise PDC20269 chipset so it should work fine)

-new Extreme IO AP-1680 ATA133 IDE RAID PCI controller (says works in linux, CMD680 chipset so it should work fine)

-new IDE cable marked for "ATA 133" (under 18 inches so that shouldnt be the problem)

-several old unmarked IDE cables

Support for both cards is compiled into the kernel

(v2.4.20-gentoo-r5 kernel)

[*] Generic PCI IDE chipset support

[*]    Sharing PCI IDE interrupts support

[*]    Generic PCI bus-master DMA support

[*]    CMD64X and CMD680 chipset support

[*]    CMD680 chipset tuning support

[*]     Promise PDC202{46|62|65|67:69:70} support

I have tried to use:

[*]    Use PCI DMA by default when avaliable

however,  booth hangs at "Checking partitions"  for the new drive (it handles the old drive with the onboard IDE controller fine in this partition check) and the only way I can get it to boot up is with the kernel paramater "ide=nodma"

using hdparm, I can turn on DMA for hda(my old drive) fine and everything works,  however with the new drive:

-when not mounted, when i enable DMA for the drive when it is plugged into either card, it will then not mount

-when mounted, when i enable DMA for the drive when it is plugged into either card, it will work for a minute or so but when i try to do "ls" in a large directory, run fsck, or use "hdparm -tT /dev/hd.." it will lock up and not respond to ^C or let me kill the process.

at various times my dmesg gets filled with "invalidate: busy buffer"

as long as DMA is off, everything works properly but transfer speed for the new hard drive is around 90MB/s for buffer-cache reads of 128 MB and for buffered disk reads is around 2 MB/S for 64 MB.  This is a little slow for an 7200 Ultra133 Hard drive on either Ultra133 controller card.

no combination of the new drive, the controllers, and the cables seems to work. any help would be greatly appreciated. thanks!

----------

## pyrobob

well, I am new to this hdparm thing.  Looking through the man page for it i found out about the -X option.

here is the info for my drive:

 /dev/hdi:                      

Model=Maxtor 6Y160P0, FwRev=YAR41BW0, SerialNo=Y41KJVZE       

Config={ Fixed }                       

RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=57                 

BuffType=DualPortCache, BuffSize=7936kB, MaxMultSect=16, MultSect=off           

CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=268435455           

IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}                

PIO modes:  pio0 pio1 pio2 pio3 pio4                      

DMA modes:  mdma0 mdma1 mdma2                       

UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 udma6                  

AdvancedPM=yes: disabled (255) WriteCache=enabled                    

Drive conforms to: (null):  1 2 3 4 5 6 7         

i still dont know what to do but this may help someone out there figure out how to help me. thanks.

----------

## Petyr

Also you might want to check around in your BIOS. Especially the BIOS's for those cards

There might be a setting in there that's mucking with stuff.

Failing that if you've tried a lot of possible software fixes (and it sounds like that's the case) you might want to try removing one or the other IDE card. It's a long shot, but one of them might be conflicting with the other in some arcane way *shrug*

Petyr Rahl

----------

## pyrobob

So I booted up off of the 1.4_rc4 cd and it was able to enable DMA on the drive.  The performance is still awful, but DMA is on.  So I looked at lsmod and dmesg after booting up the cd and figured out what modules it was loading and compiled all of those (for raid, lvm, evms) into my kernel.   Now the kernel boots fine but the system will hang right after starting metalog or apache (seems to randomly pick on).   sshd does not get started and I dont know how to see what is going on with my system at that point.

So, I am back to using the "ide=nodma" kernel paramater and I am back where I started. (works fine and slow with no dma).

I tried to figure out how to get into the bios for the two cards but could not figure out how to get into either one of them.  

I got everything booted up with no dma and tried:

```
hdparm -X udma6 -d1 /dev/hdi
```

which worked, and i could cd around a bit and then list the contents of a large directory, but shortly after that the system froze and I could not ssh in or switch to another virtual console.

I am off to try other kernel sources besides the gentoo one...

----------

## paranode

Yeah you might try ac-sources or gs-sources.  Usually they have better exotic hardware support.

----------

## pyrobob

I tried the 1.4_rc4 CD which seemed to work, however,  using xfs-sources and my own compile, it still hangs after apache/metalog with DMA, then with ide=nodma, will boot fine.  I am going to try gc-sources and then ac-sources, but if xfs works on the cd (for the most part) I am thinking that something else is wrong.  Ill check back once the kernel has recompiled a few more times.

----------

## pyrobob

I looked in this thread and found the following:  

```
hdparm -d1 -A1 -m16 -u1 -a64 /dev/hd_
```

   this seemed to work, but when i remounted the drive,  the whole system froze (ironically i was compiling gs-sources with this and it stopped on "dma.c"

Does DMA need to be enabled at boot to be able to use hdparm this way?  do i need to do 

```
hdparm -X umda6 -d1 -A1 -m16 -u1 -a64 /dev/hd_
```

 instead?

----------

## ckdake

(different screen name, same me)

So now i have DMA off in the kernel by default

i pass ide3=dma to my kernel from grub

then i have 

```
disc1_args="-c3 -d1 -m16 -X70"
```

in /etc/conf.d/hdparm and hdparm on runlevel default.

None of that worked and I upgraded to mm-sources-2.5.74 and set up my kernel with all of the same options and everything just kinda worked.

now:

```

#hdparm -tT /dev/hdi

/dev/hdi:

 Timing buffer-cache reads:      128 MB in  1.15 seconds = 111.61 MB/sec

 Timing buffered disk reads:     64 MB in   1.54 seconds = 41.59 MB/sec

```

which is much better than the 2.something MB/sec values I was getting originally.  The speed of my file server and my web server is much much faster, thanks for everyones input.

----------

