Thanks to the hints from the Scientific Linux mailing list I got the Adaptec aic79xx driver running.
Here is the HOWTO
The aic79xx driver V1.3 supplied by Scientific Linux does not work if U320 SCSI devices run on the same channel of an Adaptec card with other SCSI devices with different speed.
Adaptec supplies a corrected aic79xx driver V.2.0 as source and as rpm, but the rpm suitable for Scientific Linux 4.2 is not yet available.
To use this HOWTO on a 64-bit system (Opteron, Xeon EM64T), replace all i686 occurences by x86_64
Compile aic79xx driver V.2.0.15 for i386 on Scientific Linux 4.2 (kernel 2.6.9-22.0.1) HOWTO
# Get the kernel source rpm and copy it to /install:
# ftp://ftp.scientificlinux.org/disk/disk1/linux/scientific/4x/SRPMS/vendor/errata/kernel-2.6.9-22.0.1.EL.src.rpm
#
# Create the kernel source tree
rpm -ivh /install/kernel-2.6.9-22.0.1.EL.src.rpm
cd /usr/src/redhat/SPECS/
rpmbuild -bp --target=i686 kernel-2.6.spec
#
# Save the old aic7xxx directory
mv /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/drivers/scsi/aic7xxx \
/usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/drivers/scsi/aic7xxx_sav
#
# Clean the kernel source tree
cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9
make mrproper
#
# Get the aic79xx driver source code for Linux kernel 2.6 and copy it to /install:
#http://www.adaptec.com/worldwide/support/driverdetail.jsp?sess=no&language=English+US&cat=/Product/ASC-39320A-R&filekey=aic7Yxx-2.0.15-6.3.11-linux-2.6.tgz
#
# Insert aic79xx source into kernel source
cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/drivers/scsi/
tar xzf /install/aic7Yxx-2.0.15-6.3.11-linux-2.6.gz
#
# Get config file from active kernel
cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9
cp -p --reply=yes /usr/src/kernels/2.6.9-22.0.1.EL-smp-i686/.config \
/usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/
#
# Save Makefile
cp -p /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/Makefile \
/usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/Makefile_sav
#
# Adjust aic79xx parameters in config file
sed -i "/^# CONFIG_SCSI_AIC79XX.*/s/^# CONFIG_SCSI_AIC79XX.*/CONFIG_SCSI_AIC79XX=m/" \
/usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
if grep -q CONFIG_AIC79XX_CMDS_PER_DEVICE /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
then
sed -i "/CONFIG_AIC79XX_CMDS_PER_DEVICE.*/s/^.*CONFIG_AIC79XX_CMDS_PER_DEVICE.*/CONFIG_AIC79XX_CMDS_PER_DEVICE=32/" \
/usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
else
sed -i "/CONFIG_SCSI_AIC79XX=m/a\CONFIG_AIC79XX_CMDS_PER_DEVICE=32" \
/usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
fi
if grep -q CONFIG_AIC79XX_RESET_DELAY_MS /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
then
sed -i "/CONFIG_AIC79XX_RESET_DELAY_MS.*/s/^.*CONFIG_AIC79XX_RESET_DELAY_MS.*/CONFIG_AIC79XX_RESET_DELAY_MS=15000/" \
/usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
else
sed -i "/CONFIG_SCSI_AIC79XX=m/a\CONFIG_AIC79XX_RESET_DELAY_MS=15000" \
/usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
fi
if grep -q CONFIG_AIC79XX_DEBUG_MASK /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
then
sed -i "/^# CONFIG_AIC79XX_DEBUG_MASK.*/s/^# CONFIG_AIC79XX_DEBUG_MASK.*/CONFIG_AIC79XX_DEBUG_MASK=0/" \
/usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
else
sed -i "/CONFIG_SCSI_AIC79XX=m/a\CONFIG_AIC79XX_DEBUG_MASK=0" \
/usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/.config
fi
#
# Define extraversion in Makefile according to the kernel
if uname -r | grep -q smp
then
sed -i "/^EXTRAVERSION/s/-prep/smp/" /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/Makefile
else
sed -i "/^EXTRAVERSION/s/-prep//" /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/Makefile
fi
#
# Make the module
make
#
if uname -r | grep -q smp
then
# Save the old aic79xx smp kernel module
if [ -f /lib/modules/2.6.9-22.0.1.ELsmp/kernel/drivers/scsi/aic7xxx/aic79xx.ko ] ; then
cp -p --reply=yes /lib/modules/2.6.9-22.0.1.ELsmp/kernel/drivers/scsi/aic7xxx/aic79xx.ko \
/lib/modules/2.6.9-22.0.1.ELsmp/kernel/drivers/scsi/aic7xxx/aic79xx.ko_sav
fi
#
# Copy the new smp module to its destination and adjust protection
cp -p --reply=yes /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/drivers/scsi/aic7xxx/aic79xx.ko \
/lib/modules/2.6.9-22.0.1.ELsmp/kernel/drivers/scsi/aic7xxx/aic79xx.ko
chmod 744 /lib/modules/2.6.9-22.0.1.ELsmp/kernel/drivers/scsi/aic7xxx/aic79xx.ko
#
# Create new smp initrd
cp -p --reply=yes /boot/initrd-2.6.9-22.0.1.ELsmp.img /boot/initrd-2.6.9-22.0.1.ELsmp.img.sav
mkinitrd -f /boot/initrd-2.6.9-22.0.1.ELsmp.img 2.6.9-22.0.1.ELsmp
else
#
# Save the old aic79xx kernel module
if [ -f /lib/modules/2.6.9-22.0.1.EL/kernel/drivers/scsi/aic7xxx/aic79xx.ko ] ; then
cp -p --reply=yes /lib/modules/2.6.9-22.0.1.EL/kernel/drivers/scsi/aic7xxx/aic79xx.ko \
/lib/modules/2.6.9-22.0.1.EL/kernel/drivers/scsi/aic7xxx/aic79xx.ko_sav
fi
#
# Copy the new module to its destination and adjust protection
cp -p --reply=yes /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/drivers/scsi/aic7xxx/aic79xx.ko \
/lib/modules/2.6.9-22.0.1.EL/kernel/drivers/scsi/aic7xxx/aic79xx.ko
chmod 744 /lib/modules/2.6.9-22.0.1.EL/kernel/drivers/scsi/aic7xxx/aic79xx.ko
#
# Create new initrd
cp -p --reply=yes /boot/initrd-2.6.9-22.0.1.EL.img /boot/initrd-2.6.9-22.0.1.EL.img.sav
mkinitrd -f /boot/initrd-2.6.9-22.0.1.EL.img 2.6.9-22.0.1.EL
fi
Dr. Peter Stauffert
Boehringer Ingelheim Pharma GmbH & Co. KG
Department of Lead Discovery
Computational Chemistry
D-88397 Biberach / Germany