Fibre Channel Adapter and Converged Network Adapter Inbox Driver Update for Linux Kernel 2.6.x

QLogic Corporation
All rights reserved

Table of Contents

1.
Package Contents
2.
OS Support
3.
Supported Features
4.
Deploying the Driver
  4.1 Building the Driver for RHEL 5.x Linux
  4.2 Building the Driver for SLES 10 SP2 Linux
  4.3 Building the Driver for SLES 11 Linux
5.
Driver System Parameters
6.
Additional Notes
  6.1 Booting from SAN
  6.2 Firmware Installation
  6.3 Dynamically Modifying SCSI Blacklist Entries
7.
Contacting Support

1. Package Contents

The Fibre Channel Adapter and Converged Network Adapter Inbox Driver for Linux Kernel 2.6.x package contains the following files:

File Name Description
qla2xxx-src-x.xx.xx.xx.xx.xx-k.tar.gz Compressed package that contains the driver for Red Hat RHEL 5.4 and 5.5.
qla2xxx-src-vx.xx.xx.xx.xx.xx-k4.tar.gz Compressed package that contains the driver for Novell SLES 10 SP2 and SLES 11.

NOTE: xx represents the driver package version number.

2. OS Support

The Fibre Channel Adapter and Converged Network Adapter Inbox Driver for Linux is compatible with the following OS platforms:

  • Red Hat RHEL AS 5.x (32-bit, 64-bit) on Intel x86, Intel 64, AMD64
  • Novell SLES 10 SP2 (32-bit, 64-bit) on Intel x86, Intel 64, AMD64
  • Novell SLES 11 (32-bit, 64-bit) on Intel x86, Intel 64, AMD64

3. Supported Features

  • FCAL - direct attach loop, point-to-point, and fabric topologies
  • Initiator mode only
  • Fibre Channel tape
  • MSI-X interrupts
  • N_Port ID Virtualization (NPIV)
  • Device mapper
  • Support for sysfs interface
  • Adapter API support

4. Deploying the Driver

This section provides procedures for deploying the driver on various Linux versions, including the following:

4.1 Building the Driver for RHEL 5.x Linux

  1. In the directory that contains the source driver file, qla2xxx-src-x.xx.xx.xx.xx.xx-k.gz, issue the following commands:

    # tar -xzvf qla2xxx-src-x.xx.xx.xx.xx.xx-k.tar.gz

    # cd qla2xxx-src-x.xx.xx.xx.xx.xx-k
  2. Build and install the driver modules from the source code by executing the build.sh script as follows:

    # ./extras/build.sh install

    The build.sh script does the following:
    • Builds the driver .ko files.
    • Copies the .ko files to the appropriate /lib/modules/2.6.../extra/qlgc-qla2xxx directory.
    • Adds the appropriate directive in the modprobe.conf (if applicable).
  3. Manually load the driver for Linux Using insmod or modprobe.
    • To directly load the driver from the local build directory, issue the following insmod commands in order:

      # insmod /lib/modules/2.6.../kernel/drivers/scsi/ scsi_transport_fc.ko

      # insmod qla2xxx.ko
    • To load the driver using modprobe, issue the following command:

      # modprobe -v qla2xxx
    • To unload the driver using modprobe, issue the following command:

      # modprobe -r qla2xxx
  4. Automatically load the driver by rebuilding the RAM disk to include the driver as follows:
    1. Edit the /etc/modprobe.conf file and add the following entry (if they are not present):

      alias scsi_hostadapterX qla2xxx

      where, X is based on the order of the SCSI modules being loaded.
    2. Create a backup copy of the RAMDISK image by issuing the following commands:

      # cd /boot

      # cp initrd-[kernel version].img initrd-[kernel version].img.bak

      # mkinitrd -f initrd-[kernel version].img `uname -r`

      NOTE: Depending on the server hardware, the RAMDISK file name may be different.
    3. To load the driver, reboot the host.

4.2 Building the Driver for SLES 10 SP2 Linux

  1. In the directory that contains the source driver file, qla2xxx-src-vx.xx.xx.xx.xx.x-k4.tar.gz, issue the following commands:

    # tar -xzvf qla2xxx-src-vx.xx.xx.xx.xx.x-k4.tar.gz

    # cd qla2xxx-x.xx.xx.xx.xx.x-k4
  2. Build and install the driver modules from the source code by executing the build.sh script as follows:

    # ./extras/build.sh install

    The build.sh script does the following:
    • Builds the driver .ko files.
    • Copies the .ko files to the appropriate /lib/modules/2.6.../updates directory.
    • Adds the appropriate directive in the modprobe.conf (if applicable).
  3. Manually load the driver for Linux Using insmod or modprobe.
    • To directly load the driver from the local build directories, issue the following insmod commands in order:

      # insmod /lib/modules/2.6.../kernel/drivers/scsi/ scsi_transport_fc.ko (if not already loaded)

      # insmod /lib/modules/2.6.../kernel/drivers/base/ firmware_class.ko (if not already loaded)

      # insmod /lib/modules/2.6.../updates/qla2xxx.ko
    • To load the driver using modprobe, issue the following command:

      # modprobe -v qla2xxx
    • To unload the driver using modprobe, issue the following command:

      # modprobe -r qla2xxx
  4. Automatically load the driver by rebuilding the RAM disk to include the driver as follows:
    1. Edit the /etc/sysconfig/kernel file to modify the INITRD_MODULES directive and append qla2xxx to the string.

      For example:

      INITRD_MODULES=".... qla2xxx"

      where, qla2xxx is appended to the end of the directive.
    2. Create a backup copy of the RAMDISK image by issuing the following commands:

      # cd /boot

      # cp initrd-[kernel version] initrd-[kernel version].bak

      # mkinitrd

      NOTE: Depending on the server hardware, the RAMDISK file name may be different.
    3. To load the driver, reboot the host.

4.3 Building the Driver for SLES 11 Linux

  1. In the directory that contains the source driver file, qla2xxx-src-vx.xx.xx.xx.xx.xx-k4.tar.gz, issue the following commands:

    # tar -xzvf qla2xxx-src-vx.xx.xx.xx.xx.xx-k4.tar.gz

    # cd qla2xxx-x.xx.xx.xx.xx.xx-k4
  2. Build and install the driver modules from the source code by executing the build.sh script as follows:

    # ./extras/build.sh install

    The build.sh script does the following:
    • Builds the driver .ko files.
    • Copies the .ko files to the appropriate /lib/modules/2.6.../updates directory.
    • Adds the appropriate directive in the modprobe.conf (if applicable).
  3. Manually load the driver for Linux Using insmod or modprobe.
    • Edit the /etc/modprobe.d/unsupported_modules file to make the following change:

      allow_unsupported_modules 1 (replace 0 by 1)
    • To directly load the driver from the local build directories, issue the following insmod commands in order:

      # insmod /lib/modules/2.6.../kernel/drivers/scsi/scsi_tgt.ko (if not already loaded)

      # insmod /lib/modules/2.6.../kernel/drivers/scsi/ scsi_transport_fc.ko (if not already loaded)

      # insmod /lib/modules/2.6.../updates/qla2xxx.ko
    • To load the driver using modprobe, issue the following command:

      # modprobe -v qla2xxx
    • To unload the driver using modprobe, issue the following command:

      # modprobe -r qla2xxx
  4. Automatically load the driver by rebuilding the RAM disk to include the driver.
    • Edit the /etc/modprobe.d/unsupported_modules file to make the following change:

      allow_unsupported_modules 1 (replace 0 by 1)
    • Create a copy of the current RAMDISK by issuing the following commands:

      # cd /boot

      # cp initrd-[kernel version].img initrd-[kernel version].img.bak

      # mkinitrd

      NOTE: Depending on the server hardware, the RAMDISK file name may be different.
    • To load the driver, reboot the host.

5. Driver System Parameters

This section describes the driver parameters. (Where appropriate, format parameters into a table to identify parameter names, descriptions, value ranges, and default values.)

The driver gets its parameters when specified with the insmod command.

For example:

# insmod qla2xxx.ko ql2xextended_error_logging=1


If using the modprobe command, you must specify the parameters in the /etc/modprobe.conf file for RHEL and /etc/modprobe.conf.local for SLES.

For example:

options qla2xxx ql2xextended_error_logging=1


Parameters for the Linux driver include the following:

  • ql2xlogintimeout – Defines the login timeout value in seconds during the initial login. Default: 20 seconds.
  • qlport_down_retry – Defines how long to wait for a port that returns a PORT-DOWN status before returning I/O back to the OS. Default: 30 seconds.
  • ql2xplogiabsentdevice – Enables PLOGI to devices that are not present after a Fabric scan. This is needed for several broken switches. Default is 0 – no PLOGI. 1 – perfom PLOGI.
  • ql2xloginretrycount – Specifies an alternate value for the NVRAM login retry count. Default is 8.
  • ql2xallocfwdump – Enables allocation of memory for a firmware dump during initialization. Memory allocation requirements vary by type. Default is 1 – allocate memory.
  • ql2xextended_error_logging – Defines whether the driver prints verbose logging information. 0 to disable; 1 to enable. Default: 0.
  • ql2xfdmienable – Enables FDMI registrations Default is 0 – no FDMI. 1 – perfom FDMI.
  • ql2xmaxqdepth – Defines the maximum queue depth reported to SCSI mid-level per device. The Queue depth specifies the number of outstanding requests per LUN. Default is 32.
  • ql2xqfullrampup – Number of seconds to wait to begin to ramp-up of the queue depth for a device after a queue-full condition has been detected. Default is 120 seconds.
  • ql2xqfulltracking – Controls whether the driver tracks queue full status returns and dynamically adjusts a SCSI device's queue depth. Default is 1 to perform tracking. Set to 0 to disable tracking and adjustment of queue.
  • ql2xfwloadbin – Specifies location from which to load ISP firmware. 2 – load firmware via the request_firmware() interface. 1 – load firmware from Flash. 0 – use default semantics.

To view a comprehensive list of parameters, enter the following command:

# /sbin/modinfo qla2xxx

6. Additional Notes

The following sections contain additional information:

6.1 Booting from SAN

Booting from SAN means booting to the OS from a Fibre Channel target device. We recommend using the QLogic inbox driver to install the OS to a Fibre Channel target device that is attached to a QLogic adapter. If there is no QLogic inbox driver that supports the adapter, you should use a DD-kit to boot from SAN.

RHEL 5.x Boot from SAN Installation on Non-LUN 0 LUN

NOTE: The following procedure is for the RHEL 5 distribution only.

When installing to a LUN other than LUN 0 and LUN 0 is present, follow these steps to successfully boot from the LUN:

  1. On the Boot Loader Configuration screen, select the Configure Advance Boot Loader Option, and then click Next.
  2. On the Advanced Boot Loader Configuration screen, select Change Drive Order.
  3. On the Edit Drive Order window, move the entry for the boot LUN.
  4. To continue, click OK.
  5. Continue with the OS installation as usual.

6.2 Firmware Installation

To install the firmware on a SLES10/11 machine:

  1. Save original firmwares in /lib/firmware:

    $ cd /
    $ cp /lib/firmware/ql2400_fw.bin /lib/firmware/ql2400_fw.bin.orig
    $ cp /lib/firmware/ql2500_fw.bin /lib/firmware/ql2500_fw.bin.orig
  2. Extract firmware:

    $ cd /
    $ tar xvfz /tmp/qla2xxx-fw-apex-v5.03.02.tar.gz

The SLES10/11 drivers should report 4Gb and 8Gb firmware versions 5.03.02.

6.3 Dynamically Modifying SCSI Blacklist Entries

On 2.6.x kernels, you can dynamically change the SCSI blacklist, either by writing to a /proc entry or using the scsi_mod module parameter, which allows persistence across reboot.

This requires the SCSI Vendor/Model information for the SCSI device, available at /proc/scsi/scsi.

Blacklist entries are in the following form:

vendor:model:flags[v:m:f]

Where flags can be the following integer values:

0x001    /* Only scan LUN 0 */
0x002    /* Known to have LUNs, force scanning, deprecated: Use max_luns=N */
0x004    /* Flag for broken handshaking */
0x008    /* unlock by special command */
0x010    /* Do not use LUNs in parallel */
0x020    /* Buggy Tagged Command Queuing */
0x040    /* Non-consecutive LUN numbering */ - -> value need to be passed to "flags" variable for sparse LUN
0x080    /* Avoid LUNS >= 5 */
0x100    /* Treat as (removable) CD-ROM */
0x200    /* LUNs past 7 on a SCSI-2 device */
0x400    /* override additional length field */
0x800    /* ... for broken inquiry responses */
0x1000   /* do not do automatic start on add */
0x2000   /* do not send ms page 0x08 */
0x4000   /* do not send ms page 0x3f */
0x8000   /* use 10 byte ms before 6 byte ms */
0x10000  /* 192 byte ms page 0x3f request */
0x20000  /* try REPORT_LUNS even for SCSI-2 devs (if supports more than 8 LUNs) */
0x40000  /* don't try REPORT_LUNS scan (SCSI-3 devs) */
0x80000  /* don't use PREVENT-ALLOW commands */
0x100000 /* device is actually for RAID config */
0x200000 /* select without ATN */
0x400000 /* retry HARDWARE_ERROR */

For example:

# echo <VENDOR>:<MODEL>:040 > /proc/scsi/device_info

To enable persistence across reboots:

  1. Edit the following file (based on distribution):

    /etc/modprobe.conf for RHEL 5
  2. Add the following line to the file:

    options scsi_mod dev_flags=<VENDOR>:<MODEL>:<FLAGS>
  3. Rebuild the RAMDISK (refer to section 4.3, step 4).

7. Contacting Support

Please feel free to contact your QLogic approved reseller or QLogic Technical Support at any phase of integration for assistance. QLogic Technical Support can be reached by the following methods:

Web: http://support.qlogic.com

E-mail: support@qlogic.com

Go to Top