LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Hardware (http://www.linuxquestions.org/questions/linux-hardware-18/)
-   -   DMA works but not by default (despite "use DMA by default" kernel) (http://www.linuxquestions.org/questions/linux-hardware-18/dma-works-but-not-by-default-despite-use-dma-by-default-kernel-312004/)

mehlkelm 04-11-2005 10:28 AM

DMA works but not by default (despite "use DMA by default" kernel)
 
I find this very strange:

Recently I realized that I could make my Computer faster by enabling DMA. So I figured out which modules I needed and recompiled the kernel. Now I can use hdparm with -d1 /dev/hda. That works.
But it never does so at boot, I always have to do this manually.

This is the part of config that seems to be the important one here:

Code:

#
# IDE chipset support/bugfixes
#
CONFIG_BLK_DEV_CMD640=m
# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
# CONFIG_BLK_DEV_ISAPNP is not set
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_BLK_DEV_GENERIC=m
# CONFIG_IDEPCI_SHARE_IRQ is not set
CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_OFFBOARD is not set
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
CONFIG_IDEDMA_PCI_AUTO=y
# CONFIG_IDEDMA_ONLYDISK is not set
CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_IDEDMA_PCI_WIP is not set
# CONFIG_BLK_DEV_ADMA100 is not set
# CONFIG_BLK_DEV_AEC62XX is not set
# CONFIG_BLK_DEV_ALI15X3 is not set
# CONFIG_WDC_ALI15X3 is not set
CONFIG_BLK_DEV_AMD74XX=m
# CONFIG_AMD74XX_OVERRIDE is not set
# CONFIG_BLK_DEV_ATIIXP is not set
# CONFIG_BLK_DEV_CMD64X is not set
# CONFIG_BLK_DEV_TRIFLEX is not set
# CONFIG_BLK_DEV_CY82C693 is not set
# CONFIG_BLK_DEV_CS5530 is not set
# CONFIG_BLK_DEV_HPT34X is not set
# CONFIG_HPT34X_AUTODMA is not set
# CONFIG_BLK_DEV_HPT366 is not set
CONFIG_BLK_DEV_PIIX=m
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_OPTI621 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
# CONFIG_PDC202XX_BURST is not set
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
# CONFIG_BLK_DEV_RZ1000 is not set
# CONFIG_BLK_DEV_SC1200 is not set
# CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIIMAGE is not set
# CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_CHIPSETS is not set
CONFIG_IDEDMA_AUTO=y
# CONFIG_IDEDMA_IVB is not set
# CONFIG_DMA_NONPCI is not set
# CONFIG_BLK_DEV_ATARAID is not set
# CONFIG_BLK_DEV_ATARAID_PDC is not set
# CONFIG_BLK_DEV_ATARAID_HPT is not set
# CONFIG_BLK_DEV_ATARAID_MEDLEY is not set
# CONFIG_BLK_DEV_ATARAID_SII is not set

I also tried editing /etc/hdparm.conf (debian) but uncomenting lines there didnt succeed either.

Stefan

whansard 04-11-2005 11:03 AM

add your hdparm command to the end of your last bootscript, and figure it out later.

as far as the kernel config, it's the one called use pci dma by default when available.

mehlkelm 04-11-2005 11:06 AM

Hmm.. why not.
Which is my last bootscript? :D :confused:
You mean the /etc/init.d/whatever scripts (the debian way)?

whansard 04-11-2005 11:10 AM

it's something with local in the name probably.
mine is /etc/rc.d/rc.local
debian is different, and i can't remember it.
find /etc -name "*local*" -print
may find it for you.

also, this will find references to hdparm in /etc
/etc# grep -r hdparm *

whansard 04-11-2005 11:19 AM

we both keep adding stuff to our posts about when the other posts.

mehlkelm 04-11-2005 11:37 AM

There is a debian tool "update-rc.d" that lets you add symlinks in the rc.* directories to the actual bootscripts.
Code:

update-rc.d hdparm defaults
tells me that the links to hdparm are already there.
Maybe I should just find the right way of configuring this file (/etc/hdparm):

Code:

## This is the default configuration for hdparm for Debian.  It is a
## rather simple script, so please follow the following guidelines :)
## Any line that begins with a comment is ignored - add as many as you
## like.  Note that an in-line comment is not supported.  If a line
## consists of whitespace only (tabs, spaces, carriage return), it will be
## ignored, so you can space control fields as you like.  ANYTHING ELSE
## IS PARSED!!  This means that lines with stray characters or lines that
## use non # comment characters will be interpreted by the initscript. 
## This has probably minor, but potentially serious, side effects for your
## hard drives, so please follow the guidelines.  Patches to improve
## flexibilty welcome.  Please read /usr/share/doc/hdparm/README.Debian for
## notes about known issues, especially if you have an MD array.
##
## Note that if the init script causes boot problems, you can pass 'nohdparm'
## on the kernel command line, and the script will not be run.
##
## Uncommenting the options below will cause them to be added to the DEFAULT
## string which is prepended to options listed in the blocks below.
##
## If an option is listed twice, the second instance replaces the first.
##
## /sbin/hdparm is not run unless a block of the form:
##      DEV {
##        option
##        option
##        ...
##      }
## exists.  This blocks will cause /sbin/hdparm OPTIONS DEV to be run.
## Where OPTIONS is the concatenation of all options previously defined
## outside of a block and all options defined with in the block.

# -q be quiet
quiet
# -a sector count for filesystem read-ahead
#read_ahead_sect = 12
# -A disable/enable the IDE drive's read-lookahead feature
#lookahead = on
# -b bus state
#bus = on
# -B apm setting
#apm = 255
# -c enable (E)IDE 32-bit I/O support - can be any of 0,1,3
#io32_support = 1
# -d disable/enable the "using_dma" flag for this drive
#dma = off
# -D enable/disable the on-drive defect management
#defect_mana = off
# -E cdrom speed
#cd_speed = 16
# -k disable/enable the "keep_settings_over_reset" flag for this drive
#keep_settings_over_reset = off
# -K disable/enable the drive's "keep_features_over_reset" flag
#keep_features_over_reset = on
# -m sector count for multiple sector I/O
#mult_sect_io = 32
# -P maximum sector count for the drive's internal prefetch mechanism
#prefetch_sect = 12
# -r read-only flag for device
#read_only = off
# -S standby (spindown) timeout for the drive
#spindown_time = 24
# -u interrupt-unmask flag for the drive
#interrupt_unmask = on
# -W Disable/enable the IDE drive's write-caching feature
#write_cache = off
# -X IDE transfer mode for newer (E)IDE/ATA2 drives
#transfer_mode = 34
# -y force to immediately enter the standby mode
#standby
# -Y force to immediately enter the sleep mode
#sleep
# -Z Disable the power-saving function of certain Seagate drives
#disable_seagate
# -M Set the acoustic management properties of a drive
#acoustic_management
# -p Set the chipset PIO mode
# chipset_pio_mode

# Root file systems.  Please see README.Debian for details
# ROOTFS = /dev/hda

## New note - you can use straight hdparm commands in this config file
## as well - the set up is ugly, but it keeps backwards compatibility
## Additionally, it should be noted that any blocks that begin with
## the keyword 'command_line' are not run until after the root filesystem
## is mounted.  This is done to avoid running blocks twice.  If you need
## to run hdparm to set parameters for your root disk, please use the
## standard format.

#Samples follow:
#First three are good for devfs systems, fourth one for systems that do
#not use devfs.  The fifth example uses straight hdparm command line
#syntax.  Any of the blocks that use command line syntax must begin with
#the keyword 'command_line', and no attempt is made to validate syntax. 
#It is provided for those more comfortable with hdparm syntax.

#/dev/discs/disc0/disc {
#        mult_sect_io = 16
#        write_cache = off
#        spindown_time = 240
#}

#/dev/discs/disc1/disc {
#        mult_sect_io = 32
#        spindown_time = 36
#        write_cache = off
#}

#/dev/cdroms/cdrom0 {
#        dma = on                 
#        interrupt_unmask = on
#        io32_support = 0
#}

#/dev/hda {
#        mult_sect_io = 16
#        write_cache = off
#        dma = on
#}

#command_line {
#      hdparm -q -m16 -q -W0 -q -d1 /dev/hda
#}

I wasnt successfull in uncommenting the dma specific line the right way so far.

stefan

whansard 04-11-2005 12:21 PM

since it says that whole file is parsed, i would move it to "hdparm.old" and make a new hdparm with just
hdparm -q -m16 -q -W0 -q -d1 /dev/hda
in it.

mehlkelm 04-11-2005 04:29 PM

Solved
 
I have found the problem: hdparm does it's thing before the ide and other necessary modules are loaded.
There is a debian specific hdparm readme (/usr/share/doc/hdparm/README.Debian) that helps. It says to either compile these drivers into the kernel or create a second link to the hdparm script that gets executed later during the boot process.
I recompiled the kernel and it works. Great!

Stefan


All times are GMT -5. The time now is 08:59 PM.