[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#306634: kernel: Cannot set DMA on any disk (HDs or CD-drives)



I have found a solution for the DMA access,

The disc controllers should be integrated on kernel, does not work as modules.

I will explain more now,

PROBLEM:
I have a motherboard with the IDE controllers:

# lspci | grep IDE
0000:00:1f.1 IDE interface: Intel Corp. 82801EB/ER (ICH5/ICH5R) Ultra ATA 100
Storage Controller (rev 02)
0000:00:1f.2 IDE interface: Intel Corp. 82801EB (ICH5) Serial ATA 150 Storage
Controller (rev 02)

With the “lsmod” utility we can find the corresponding modules:
Ultra ATA with module “piix” and Serial ATA with scsi module “ata_piix”.

With the standard kernel we cannot activate DMA:

# hdparm -d1 /dev/hdc

/dev/hdc:
  setting using_dma to 1 (on)
  HDIO_SET_DMA failed: Operation not permitted
  using_dma    =  0 (off)

SOLUTION: 
It is necessary to build the kernel with the following configuration:

# diff /boot/config-2.6.12-6-686-smp /usr/src/linux/.config
< CONFIG_IDE=m   > CONFIG_IDE=y
< CONFIG_BLK_DEV_IDE=m  > CONFIG_BLK_DEV_IDE=y
< CONFIG_SCSI=m   > CONFIG_SCSI=y

observe that for the specific disc controllers we can mantain their config 
values:
CONFIG_BLK_DEV_PIIX=m
CONFIG_SCSI_ATA_PIIX=m

When the new kernel starts, DMA is activated automatically, but is better 
install the hdparm service to set the best configuration in the devices.
In my case, there are two cdrom devices,  (hda is a DVD-RW and hdc is a 
CD-RW),
append to the bottom of “/etc/hdparm.conf”:

/dev/hda {
         mult_sect_io = 16
         dma = on
         io32_support = 1
         interrupt_unmask = on
}

/dev/hdc {
         mult_sect_io = 16
         dma = on
         io32_support = 1
         interrupt_unmask = on
}

now the cdrom devices are working at full speed.

I hope that will be useful,

Jordi Pujol



Reply to: