LINUXOR.SK ... open source notes ...

Linux Storage - qla2xxx module listing

category: solutionz · date: 2013-12-31 · updated: 2026-10-03 · author: LALA

Linux Storage Solution · Config document · referenced from Linux HBA and SCSI inventory

The systool -m qla2xxx -v listing on HV01: the attributes, the parameters and the loaded sections of the QLogic FC driver module as it ran with the two QMH2572 ports. The notes do not type the module name; they find it with a nested command that reads PHYSDEVDRIVER out of the fc_transport class. Everything ran as root on HV01 and reads only; no parameter was changed.

ItemValue
Moduleqla2xxx, version 8.05.00.03.55.6-k, state live, reference count 11
On which hostHV01, the first blade (HP BL660c Gen8)
Run asroot
Toolsystool -m <module> -v from the sysfsutils package; the notes do not give its version
Parameters24, all at the values the listing shows; the notes do not show a modprobe.d file, so I take them for the driver's defaults, but the notes do not say so
Found withthe nested command below, which prints qla2xxx from the last PHYSDEVDRIVER= line of systool -c fc_transport -v

The command

The inner command in backquotes lists the fc_transport class, keeps the PHYSDEVDRIVER lines, takes what follows the =, keeps the last line and strips the one double quote that systool closes the uevent value with; the result, qla2xxx, becomes the argument of systool -m.

bash
$ systool -m `systool -c fc_transport -v | grep PHYSDEVDRIVER | awk -F'=' '{print $2}' | tail -n 1 | sed 's/"//'` -v

The listing

output 52 lines
Module = "qla2xxx"
  Attributes:
    initstate           = "live"
    refcnt              = "11"
    srcversion          = "4DA5A8C238B204974660A32"
    version             = "8.05.00.03.55.6-k"

  Parameters:
    ql2xallocfwdump     = "1"
    ql2xasynctmfenable  = "0"
    ql2xdbwr            = "1"
    ql2xdontresethba    = "0"
    ql2xenabledif       = "2"
    ql2xenablehba_err_chk= "2"
    ql2xetsenable       = "0"
    ql2xextended_error_logging= "0"
    ql2xfdmienable      = "1"
    ql2xfwloadbin       = "0"
    ql2xgffidenable     = "0"
    ql2xiidmaenable     = "1"
    ql2xloginretrycount = "0"
    ql2xlogintimeout    = "20"
    ql2xmaxlun          = "65535"
    ql2xmaxqdepth       = "32"
    ql2xmaxqueues       = "1"
    ql2xmdcapmask       = "31"
    ql2xmdenable        = "1"
    ql2xmultique_tag    = "0"
    ql2xplogiabsentdevice= "0"
    ql2xshiftctondsd    = "6"
    ql2xtargetreset     = "1"
    qlport_down_retry   = "0"

  Sections:
    .altinstr_replacement= "0xedf7773c"
    .altinstructions    = "0xedf87cb0"
    .bss                = "0xedf8df60"
    .data               = "0xedf88da0"
    .devinit.text       = "0xedf77920"
    .exit.text          = "0xedf77880"
    .gnu.linkonce.this_module= "0xedf8dde0"
    .init.text          = "0xedf99000"
    .rodata             = "0xedf79780"
    .rodata.str1.1      = "0xedf8482c"
    .rodata.str1.4      = "0xedf7b500"
    .smp_locks          = "0xedf87770"
    .strtab             = "0xedf9de6c"
    .symtab             = "0xedf9922c"
    .text               = "0xedf2b000"
    __bug_table         = "0xedf8819b"
    __mcount_loc        = "0xedf8843c"
    __param             = "0xedf8825c"

The three blocks

The listing is what /sys/module/qla2xxx/ holds, in three groups.

BlockWhat it is
Attributesthe module itself: initstate live (loaded and initialised), refcnt 11 (how many users hold it, which my understanding says is the two SCSI hosts and the devices under them), srcversion (a checksum of the source it was built from) and version
Parametersthe current values of the module parameters, /sys/module/qla2xxx/parameters/; they can be set at load time through modprobe or /etc/modprobe.d/, and the notes show nothing of the kind
Sectionsthe addresses at which the module's ELF sections were loaded into the kernel; of no use for storage work and kept only because the listing has them. The addresses have eight hex digits, so a 32-bit kernel address space, which as I remember it fits the XenServer control domain of the time; the notes do not say

The parameters worth a sentence

The meanings below are my understanding of the driver's own parameter descriptions (modinfo qla2xxx), not something the notes explain; where I am not sure I say so.

ParameterValueMy understanding
ql2xmaxqdepth32the queue depth the driver sets for each LUN, that is how many commands may be outstanding to one LUN at a time
qlport_down_retry0how many times a command to a port that reports PORT-DOWN is retried; with 0 the driver takes the port-down retry count stored in the HBA's NVRAM, and that count also becomes the dev_loss_tmo of the remote ports, which is why they show 16 (the mechanism is in the driver source, see below)
ql2xlogintimeout20the login timeout in seconds
ql2xloginretrycount0an alternate login retry count; 0 leaves the value stored in the HBA's NVRAM
ql2xmaxlun65535the highest LUN number the driver probes for; it covers LUN 254, the SES enclosure device
ql2xmaxqueues1the number of request queues; 1 is a single queue, the multiqueue mode is off
ql2xfdmienable1the port registers its HBA details with the fabric's management server (FDMI), which is where a switch gets the host's HBA model and driver version from
ql2xiidmaenable1iIDMA on: the HBA adjusts its data rate per target to the speed the target port logged in with
ql2xenabledif2T10 data integrity (DIF) support level; 2 is the highest the driver offered, as I read it, and it only matters with an array and a kernel that use it
ql2xenablehba_err_chk2the HBA checks the T10 guard tags on read and write; it belongs with the parameter above
ql2xextended_error_logging0the extended driver logging is off; it is the first parameter to raise when a path problem has to be debugged
ql2xtargetreset1the driver may issue a target reset as part of error recovery

The rest (ql2xallocfwdump, ql2xasynctmfenable, ql2xdbwr, ql2xdontresethba, ql2xetsenable, ql2xfwloadbin, ql2xgffidenable, ql2xmdcapmask, ql2xmdenable, ql2xmultique_tag, ql2xplogiabsentdevice, ql2xshiftctondsd) are firmware dump, firmware loading, debugging and minidump switches that were not touched and that I would not touch without a reason from the vendor.

Checked against qla2xxx 10.02.10.100-k in Linux 7.2 and the HPE host guides

As builtToday
qla2xxx 8.05.00.03.55.6-kThe in-kernel driver is 10.02.10.100-k in Linux 7.0 to 7.2 and 12.00.00.2607b2 in the development tree, maintained by Marvell. The QMH2572's chip, ISP2532, is still in the driver's PCI table and its firmware file ql2500_fw.bin is at 8.08.207 in linux-firmware
24 parameters19 still exist. Gone: ql2xmaxqueues and ql2xmultique_tag (Linux 4.10, replaced by ql2xmqsupport, default on), ql2xtargetreset (Linux 5.16), ql2xiidmaenable and ql2xetsenable (Linux 6.16, as unused: the last use of ql2xiidmaenable went in 2017). New since then include ql2xnvmeenable (FC-NVMe, default on), ql2xsmartsan, ql2xenableclass2 and ql2xsecenable
ql2xmaxqdepth 32The default is now 64. HPE's 3PAR and Primera guides set options qla2xxx qlport_down_retry=14 ql2xmaxqdepth=16, the Alletra MP B10000 guide qlport_down_retry=10 ql2xmaxqdepth=16; the HP RHEL guide of 2013 already asked for ql2xmaxqdepth=16 qlport_down_retry=10 ql2xloginretrycount=30, none of which this host had
ql2xasynctmfenable 0The default is now 1
qlport_down_retry 0Still exists with default 0; the driver still copies the resulting port-down retry count into the remote ports' dev_loss_tmo (see systool fc_transport and fc_remote_ports)
the other 16 valuesUnchanged defaults: ql2xallocfwdump 1, ql2xdbwr 1, ql2xdontresethba 0, ql2xenabledif 2, ql2xenablehba_err_chk 2, ql2xextended_error_logging 0, ql2xfdmienable 1, ql2xfwloadbin 0, ql2xgffidenable 0, ql2xloginretrycount 0, ql2xlogintimeout 20, ql2xmaxlun 65535, ql2xmdcapmask 31, ql2xmdenable 1, ql2xplogiabsentdevice 0, ql2xshiftctondsd 6

That the as-built values match today's defaults in 17 of 19 surviving parameters is the best evidence I have that the host ran the driver's defaults; the notes themselves do not say so.

← solutionz