Emulex Linux Drivers / News: Recent posts

This site is largely defunct now

We achieved many of our goals and the need for this site is no longer necessary.

The lpfc driver has been upstream for ~8yrs now. Sources can easily found on kernel.org, the emulex.com website, or on various OEM websites.

Target mode kits may be found at kernel.org, the SCST sourceforge product, or via emulex.com as part of the "OneCore Storage" project.

Thank You.

Posted by James Smart 2014-02-11

SCST Target Mode Support Added!

A new lpfc driver kit supporting SCST has been released. Emulex FC adapters can now be used with SCST to provide Target Mode operation.

Posted by James Smart 2009-07-07

NPIV Upstream Review - 8.2.0

The 8.2.0 driver has been posted to SourceForge for review for upstream inclusion!!

Posted by James Smart 2007-05-01

IPFC for RHEL4/SLES9 Released

The IPFC driver kit for RHEL4/SLES9 has been released.

The kit provides IP over Fibre Channel support for the Emulex Fibre Channel Host Bus Adapter driver.

The following distributions of Linux are supported by the Emulex LPFC IPFC Module:
* Red Hat Enterprise Linux 4 (Update 3 or later)
* SuSE Linux Enterprise Server 9 (Service Pack 2 or later)
This release supports the Intel x86, Intel EM64T, Intel Itanium2 and AMD64 platforms.... read more

Posted by James Smart 2006-09-28

ChangeLog-8.1.1

Known issues :
* Please read the associated RELEASE-NOTES file !!!
* This source release intended for upstream kernel releases only!

Changes from 8.1.0 to 8.1.1
* Miscellaneous Cleanups
* Correct some 8bit to 16bit field conversions/comparisons
* Fixes for short cable pulls
* Adjust use of scsi_block_requests and interaction w/ FC transport
* Remove locking wrappers around error handlers
* Fixes to error handlers
* Add support for more members of the Light Pulse 11xxx (4Gb) family
* Bring model descriptions in sync with Emulex standard generic names.
* Add polled-mode support to the driver:
* Added code to adjust lun queue depth to avoid target overloading.
* Change version number to 8.1.1... read more

Posted by James Smart 2006-01-06

ChangeLog-8.1.0

Known issues :
* Please read the associated RELEASE-NOTES file !!!
* This source release intended for upstream kernel releases only!

Changes from 8.0.30 to 8.1.0
* Cleanup code in lpfc_get_stats().
* Update to Emulex hba model names
* Return -EINVAL, -EPERM, and -EIO instead of 0 from sysfs callbacks
* Add range checking for attributes passed as options at load time.
* Fix comments for nodev_tmo
* Fix for "Unknown IOCB command Data: x0 x3 x0 x0" messages
* Restore HEX safe bahavior of the sysfs xxx_store functions.
* Remove RPI hash from the driver.
* Fix for "command completion for iotax x?? not found" messages
* Replace lpfc_sli_issue_iocb_wait_high_priority with
lpfc_sli_issue_iocb_wait.
* Adjust lpfc_scsi_buf allocation to account for lun_queue_depth and
error handling
* Remove unneeded IOCB_t * cast from lpfc_sli_handle_fast_ring_event
* Return FAILED from eh_ routines if command(s) is(are) not completed
* Add owner field to struct pci_driver
* Change version number to 8.1.0
* Add ifdefs for kernel rev to address deltas for upcoming changes
(assumed to arrive in 2.6.15) which are in upstream git pools.... read more

Posted by James Smart 2005-11-18

ChangeLog-8.0.30

Changes from 8.0.29 to 8.0.30
* Fix handling of the dev_loss and nodev timeouts
* Clear task management bits when preparing SCSI commands
* IOCB not getting fully initialized during reuse
* Fix panic on lip and cable pull
* Fix panic in lpfc_get_stats()
* Replace use of lpfc_put_lun with midlayer's int_to_scsilun
* Change version to 8.0.30
* Add ifdefs for kernel rev to address deltas between 2.6.12
and 2.6.13 kernels (will not be in driver contained in upstream
kernel).... read more

Posted by James Smart 2005-08-31

ChangeLog-8.0.28

Known issues :
* Please read the associated RELEASE-NOTES file !!!
* This source release intended for upstream kernel releases only!

Changes from 20050323 to 20050413

* Changed version number to 8.0.28
* Fixed build warning for 2.6.12-rc2 kernels: mempool_alloc now
requires a function which takes an unsigned int for gfp_flags.
* Removed pci dma sync calls to coherent/consistent pci memory.
* Merged patch from Christoph Hellwig <hch@lst.de>: split helpers
for fabric and nport logins out of lpfc_cmpl_els_flogi.
* Removed sysfs attributes that are used to dump the various
discovery lists.
* Fix for issue where not all luns are seen. Search all lists
other than unmap list in lpfc_find_target(). Otherwise INQUIRY
to luns on nodes in NPR or other relevant states (PLOGI,
PRLI...) are errored back and scan() terminates.
* Removed FC_TRANSPORT_PATCHESxxx defines. They're in 2.6.12-rc1.
* Compare return value of lpfc_scsi_tgt_reset against SCSI
midlayer codes SUCCESS/FAILED which that function returns rather
than SLI return code.
* Removed extraneous calls to lpfc_sli_next_iotag which should
only be called from lpfc_sli_submit_iocb. Also make
lpfc_sli_next_iotag static.
* Added PCI ID for LP10000-S.
* Changes in lpfc_abort_handler(): Return SUCCESS if we did not
find command in both TX and TX completion queues. Return ERROR
if we timed out waiting for command to complete after abort was
issued.
* Zero-out response sense length in lpfc_scsi_prep_cmnd to prevent
interpretation of stale sense length when the command completes
- was causing spurious 0710 messages.
* Moved clearing of host_scribble inside host_lock in IO
completion path.
* Fixed a bunch of mixed tab/space indentation.
* Allow hex format numbers in sysfs attribute setting. Fix
application hang when invalid numbers are used in sysfs
settings.
* Removed extra iotag allocation by lpfc_abort_handler.
* Clear host_scribble in the scsi_cmnd structure when failing in
queuecommand.
* Changed logic at top of lpfc_abort_handler so that if the
command's host_scibble field is NULL, return SUCCESS because the
driver has already returned the command to the midlayer.... read more

Posted by James Smart 2005-04-14

ChangeLog-8.0.27

Known issues :
* Please read the associated RELEASE-NOTES file !!!
* This source release intended for upstream kernel releases only!

Changes from 20050308 to 20050323

* Changed version number to 8.0.27
* Changed a few lines from patch submitted by Christoph Hellwig
(3/19). MAILBOX_WSIZE * (uint32_t) is replaced with an
equivalent MAILBOX_CMDSIZE macro.
* Merged patch from Christoph Hellwig (3/19): some misc patches
against the latest drivers:
- stop using volatile. if you need special ordering use memory
barriers but that doesn't seem to be the case here
- switch lpfc_sli_pcimem_bcopy to take void * arguments.
- remove typecast for constants - a U postfix marks them
unsigned int in C
- add a MAILBOX_CMD_SIZE macro, as most users of
MAILBOX_CMD_WSIZE didn't really want the word count
- kill struct lpfc_scsi_dma_buf and embedded the two members
directly in struct lpfc_scsi_buf
- don't call dma_sync function on allocations from
pci_pool_alloc - it's only for streaming mappings (pci_map_*)
* Merged patch from Christoph Hellwig (3/19) - nlp_failMask isn't
ever used by the driver, just reported to userspace (and that in
a multi-value file which is against the sysfs guidelines).
* Change pci_module_init to pci_register_module() with appropriate
ifdefs.
* Added #include <linux/dma-mapping.h> as required by the DMA
32bit and 64bit defines on some archs.
* Merged patch from Christoph Hellwig (03/19) - fix initialization
order - scsi_add_host must happen last from scsi POV. Also some
minor style/comment fixups.
* Fixed use of TRANSPORT_PATCHES_V2 by changing to
FC_TRANSPORT_PATCHES_V2.... read more

Posted by James Smart 2005-03-24

ChangeLog-8.0.26

Known issues :
* Please read the associated RELEASE-NOTES file !!!
* This source release intended for upstream kernel releases only!

Changes from 20050223 to 20050308

* Changed version number to 8.0.26
* Revise TRANSPORT_PATCHES_V2 so that lpfc_target is removed and
rport data is used instead. Removed device_queue_hash[].
* Changed RW attributes of scan_down, max_luns and fcp_bind_method
to R only.
* Fixed RSCN handling during initial link initialization.
* Fixed issue with receiving PLOGI handling when node is on NPR
list and marked for ADISC.
* Fixed RSCN timeout issues.
* Reduced severity of "SCSI layer issued abort device" message to
KERN_WARNING.
* Feedback from Christoph Hellwig (on 2/5) - In the LPFC_EVT_SCAN
case the caller already has the target ID handly, so pass that
one in evt_arg1.
* Fix compile warning/resultant panic in
lpfc_register_remote_port().... read more

Posted by James Smart 2005-03-09

ChangeLog-8.0.25

Known issues :
* Please read the associated RELEASE-NOTES file !!!
* This source release intended for upstream kernel releases only!
* The ADVANCED=2 build for upstream current does not function
as the remote port patch is in-between states on linux-scsi.

Changes from 20050215 to 20050223

* Changed version number to 8.0.25
* Add appropriate comments to lpfc_sli.c.
* Use DMA_64BIT_MASK and DMA_32BIT_MASK defines instead of
0xffffffffffffffffULL & 0xffffffffULL respectively. Use pci
equivalents instead of dma_set_mask and also modify condition
clause to actually exit on error condition.
* Restart els timeout handler only if txcmplq_cnt. On submission,
mod_timer the els_tmofunc. This prevents the worker thread from
waking up the els_tmo handler un-necessarily. The thread was
being woken up even when there were no pending els commands.
* Added new typedefs for abort and reset functions.
* Collapsed lpfc_sli_abort_iocb_xxx into a single function.
* Collapsed lpfc_sli_sum_iocb_xxx into a single function.
* Removed TXQ from all abort and reset handlers since it is never
used.
* Fixed Oops panic in 8.0.23 (reported on SourceForge). The
driver was not handling LPFC_IO_POLL cases correctly in
fast_ring_event and was setting the tgt_reset timeout to 0 in
lpfc_reset_bus_handler. This 0 timeout would not allow the FW
to timeout ABTS's on bad targets and allow the driver to have an
iocb on two lists. Also split the lpfc_sli_ringtxcmpl_get
function into two routines to match the fast and slow completion
semantics - ELS completions worked for the wrong reasons. Also
provided new log message number - had two 0326 entries.
* Removed unused #define LPFC_SCSI_INITIAL_BPL_SIZE.
* Removed unused struct lpfc_node_farp_pend definition.
* Removed unused #define LPFC_SLIM2_PAGE_AREA.
* Changed zeros used as pointers to NULL.
* Removed unneeded braces around single line in lpfc_do_work.
* Close humongous memory leak in lpfc_sli.c - driver was losing 13
iocbq structures per LIP.
* Removed last of GFP_ATOMIC allocations.
* Locks are not taken outside of nportdisc, hbadisc, els and most
of the init, sli, mbox and ct groups of functions
* Fix comment for lpfc_sli_iocb_cmd_type to fit within 80 columns.
* Replaced wait_event() with wait_event_interruptible().
wait_event() puts the woker thread in an UNINTERRUPTIBLE state
causing it to figure in load average calculations. Also add a
BUG_ON to the ret code of wait_event_interruptible() since the
premise is that the worker thread is signal-immune.... read more

Posted by James Smart 2005-03-02

ChangeLog-8.0.24

Known issues :
* Please read the associated RELEASE-NOTES file !!!
* This source release intended for upstream kernel releases only!
* The ADVANCED=2 build for upstream current does not function
as the remote port patch is in-between states on linux-scsi.

Changes from 20050208 to 20050215

* Changed version number to 8.0.24
* Fixed a memory leak of iocbq structure. For ELS solicited iocbs
sli layer now frees the response iocbs after processing it.
* Closed large memory leak -- we were losing 13 iocbq structures
per LIP.
* Changing EIO and ENOMEM to -EIO and -ENOMEM respectively.
* Cleanup of lpfc_sli_iocb_cmd_type array and typing of iocb type.
* Implemented Christoph Hellwig's feedback from 02/05: Remove
macros putLunHigh, putLunLow. Use lpfc_put_lun() inline instead.
* Integrated Christoph Hellwig's feedback from 02/05: Instead of
cpu_to_be32(), use swab16((uint16_t)lun). This is the same as
"swab16() on LE" and "<<16 on BE".
* Added updates for revised FC remote port patch (dev_loss_tmo
moved to rport, hostdata renamed dd_data, add fc_remote_host()
on shutdown).
* Removed unnecessary function prototype.
* Added code to prevent waking up worker thread after the exit of
worker thread. Fixes panic seen with insmod/rmmod testing with
70 disks.
* Integrated Christoph Hellwig's patch from 1/30: Make some
variables/code static (namely lpfcAlpaArray and
process_nodev_timeout()).
* Integrated Christoph Hellwig's patch from 1/30: Use
switch...case instead of if...else if...else if while decoding
JDEC id.... read more

Posted by James Smart 2005-02-15

ChangeLog-8.0.23

Known issues :
* Please read the associated RELEASE-NOTES file !!!
* This source release intended for upstream kernel releases only!

Changes from 20050201 to 20050208

* Changed version number to 8.0.23
* Make lpfc_work_done, lpfc_get_scsi_buf,
lpfc_mbx_process_link_up, lpfc_mbx_issue_link_down and
lpfc_sli_chipset_init static.
* Cleaned up references to list_head->next field in the driver.
* Replaced lpfc_discq_post_event with lpfc_workq_post_event.
* Implmented Christoph Hellwig's review from 2/5: Check for return
values of kmalloc.
* Integrated Christoph Hellwig's patch from 1/30: Protecting
scan_tmo and friends in !FC_TRANSPORT_PATCHES_V2 &&
!USE_SCAN_TARGET.
* Integrated Christoph Hellwig's patch from 1/30: Some fixes in
the evt handling area.
* Integrated Christoph Hellwig's patch from 1/30: Remove usage of
intr_inited variable. The interrupt initilization from OS side
now happens in lpfc_probe_one().
* Integrated Christoph Hellwig's patch from 1/30: remove shim
lpfc_alloc_transport_attr - remove shim lpfc_alloc_shost_attrs -
remove shim lpfc_scsi_host_init - allocate phba mem in scsi's
hostdata readjust code so that they are no use after free's
(don't use after scsi_host_put) - make lpfc_alloc_sysfs_attr
return errors
* Fixed panic in lpfc_probe_one(). Do not delete in a list
iterator that is not safe.
* Clean up fast lookup array of the fcp_ring when aborting iocbs.
* Following timeout handlers moved to the lpfc worker thread:
lpfc_disc_timeout, lpfc_els_timeout, lpfc_mbox, lpfc_fdmi_tmo,
lpfc_nodev_timeout, lpfc_els_retry_delay.
* Removed unused NLP_NS_NODE #define.
* Integrated Christoph Hellwig's patch from 1/30: remove unused
lpfc_hba_list; remove unused lpfc_rdrev_wd30; remove
lpfc_get_brd_no and use Linux provided IDR.
* Changed board reset procedure so that lpfc_sli_send_reset()
writes the INITFF bit and leaves lpfc_sli_brdreset() to clear
the bit.
* Removed outfcpio sysfs device attribute.
* VPD changes: 1) Modify driver to use the model name and
description from the VPD data if it exists 2) Rework use of DUMP
mailbox command to support HBAs with 256 bytes of SLIM.
* Fixed compile error for implicit definition of struct
scsi_target... read more

Posted by James Smart 2005-02-09

ChangeLog-8.0.22

Known issues :
* Please read the associated RELEASE-NOTES file !!!
* This source release intended for upstream kernel releases only!

Changes from 20050124 to 20050201

* Changed version number to 8.0.22
* Moved discovery timeout handler to worker thread. There are
function calls in this function which are not safe to call from
HW interrupt context.
* Removed free_irq from the error path of HBA initialization.
This will fix the free of uninitialised IRQ when config_port
fails.
* Make sure function which processes unsolicited IOCBs on ELS ring
still is called with the lock held.
* Clear LA bit from work_ha when we are not supposed to handle LA.
* Fix double locking bug in the error handling part of
lpfc_mbx_cmpl_read_la.
* Implemented fast IOCB processing for FCP ring.
* Since mboxes are now unconditionally allocated outside of the
lock, free them in cases where they are not used.
* Moved out a couple of GFP_ATOMICs in lpfc_disc_timeout, to
before locks so that they can GFP_KERNEL instead. Also cleaned
up code.
* Collapsed interrupt handling code into one function.
* Removed event posting and handling of solicited and unsolicited
iocbs.
* Remove ELS ring handling leftovers from the lpfc_sli_inter().
* ELS ring (any slow ring) moved from the lpfc_sli_inter() into a
worker thread. Link Attention, Mbox Attention, and Error
Attention, as well as slow rings' attention is passed to the
worker thread via worker thread copy of Host Attention
register. Corresponding events are removed from the event queue
handling.
* Add entries to hba structure to delegate some functionality from
the lpfc_sli_inter() to a worker thread.
* Reduced used of GFP_ATOMIC for memory allocations.
* Moved locks deeper in order to change GFP_ATOMIC to GFP_KERNEL.
* IOCB initialization fix for Raw IO.
* Removed qcmdcnt, iodonecnt, errcnt from lpfc_target and from
driver.
* Added call to lpfc_els_abort in lpfc_free_node. Modified
lpfc_els_abort to reset txq and txcmplq iterator after a
iocb_cmpl call.
* Fixed a use after free issue in lpfc_init.c.
* Defined default mailbox completion routine and removed code in
the sli layer which checks the mbox_cmpl == 0 to free mail box
resources.
* In lpfc_workq_post_event, clean up comment formatting and remove
unneeded cast of kmalloc's return.
* Removed loop which calls fc_remote_port_unblock and
fc_remote_port_delete for every target as this same effect is
accomplished by the scsi_remove_host call.
* Minor cleanup of header files. Stop header files including
other header files. Removed sentinels which hide multiple
inclusions. Removed unneeded #include directives.
* Fixed memory leaks in mailbox error paths.
* Moved lock from around of lpfc_work_done to lpfc_work_done
itself.
* Removed typedef for LPFC_WORK_EVT_t and left just struct
lpfc_work_evt to comply with linux_scsi review coding style.
* Fixed some trailing whitespaces, spaces used for indentation and
ill-formatting multiline comments.
* Bug fix for Raw IO errors. Reuse of IOCBs now mandates setting
of ulpPU and fcpi_parm to avoid incorrect read check of Write IO
and incorrect read length.... read more

Posted by James Smart 2005-02-02

ChangeLog-8.0.21

Known issues :
* Please read the associated RELEASE-NOTES file !!!
* This source release intended for upstream kernel releases only!

Changes from 20050110 to 20050124

* Changed version number to 8.0.21
* Removed unpleasant casting in the definition and use of
lpfc_disc_action function pointer array.
* Makefile cleanup. Use ?= operator for setting default
KERNELVERSION and BASEINCLUDE values. Use $(PWD) consistently.
* Removed call to lpfc_sli_intr from lpfc_config_port_post. All
Linux systems will service hardware interrupts while bringing up
the driver.
* Christoph Hellwig change request: Reorg of contents of
lpfc_hbadisc.c, lpfc_scsi.h, lpfc_init.c, lpfc_sli.c,
lpfc_attr.c, lpfc_scsi.c.
* Renamed discovery thread to lpfc_worker thread. Moved handling
of error attention and link attention and mbox event handler to
lpfc_worker thread.
* Removed .proc_info and .proc_name from the driver template and
associated code.
* Removed check of FC_UNLOADING flag in lpfc_queuecommand to
determine what result to return.
* Move modification of FC_UNLOADING flag under host_lock.
* Fix IOERR_RCV_BUFFER_WAITING handling for CT and ELS subsystem.
* Workaround firmware bug for IOERR_RCV_BUFFER_WAITING on ELS
ring.
* Fixed a couple lpfc_post_buffer problems in lpfc_init.c.
* Add missing spaces to the parameter descriptions for
lpfc_cr_delay, lpfc_cr_count and lpfc_discovery_threads.
* Lock before calling lpfc_sli_hba_down().
* Fix leak of "host" in the error path in the remove_one() path.
* Fix comment for lpfc_cr_count. It defaults to 1.
* Fix issue where we are calling lpfc_disc_done() recursively from
lpfc_linkdown(), but list_for_each_entry_safe() is not safe for
such use.
* Bump lpfc_discovery_threads (count of outstading ELS commands in
discovery) to 32
* If the SCSI midlayer tries to recover from an error on a lun
while the corresponding target is in the NPR state, lpfc driver
will reject all the resets. This will cause the target to be
moved to offline state and block all the I/Os. The fix for this
is to delay the lun reset to a target which is not in MAPPED
state until the target is rediscovered or nodev timeout is
fired.... read more

Posted by James Smart 2005-01-25

ChangeLog-8.0.20

IMPORTANT:

Starting in the 8.0.17 release, the driver began to be targeted strictly
toward the upstream kernel. As such, we removed #ifdefs for older kernels
(pre 2.6.10). The 8.0.16 release should be used if the driver is to be
run on one of the older kernels.

Unfortunately, what is "an older kernel" is still in a state of flux.
In general, the most important modification that was needed, support for
target block/unblock in the FC transport (see Cable Pull below), was added
to the kernel as of the 2.6.10 kernel. However, there are still patches
for the fc transport outstanding to the 2.6.10 kernel. The patches cover:
1 : The addition of new host-level attributes and statistics.
This patch has been incorporated into the kernel, in one of the
first -bk? updates to 2.6.10 (meaning, it will be fully contained
in 2.6.11)
2 : The addition of remote FC port attributes (and a couple of last
host-level attributes).... read more

Posted by James Smart 2005-01-11

ChangeLog-8.0.19

Known issues :
* Please read the associated RELEASE-NOTES file !!!
* This source release intended for upstream kernel releases only!

Changes from 20041220 to 20041229

* Changed version number to 8.0.19
* Fixed bug for handling RSCN type 3. Terminate RSCN mode
properly after ADISC handling completes.
* Add list_remove_head macro. Macro cleans up memory allocation
list handling. Also clean up lpfc_reset_bus_handler - routine
does not need to allocate its own scsi_cmnd and scsi_device
structures.
* Fixed potential discovery bug, nlp list corrutpion fix potential
memory leak
* Part 1 of the memory allocation rework request by linux-scsi.
This effort fixes the number of bdes per scsi_buf to 64, makes
the scatter-gather count a module parameter, builds a linked
list of scsi_bufs, and removes all dependencies on lpfc_mem.h.
* Reverted lpfc_do_dpc, probe_one, remove_one to original
implementation. Too many problems (driver not completing
initial discovery, and IO not starting to disks). Backs out
kthread patch.
* Fix race condition in lpfc_do_dpc. If wake_up interrupt occurs
while lpfc_do_dpc is running disc_done and the dpc list is
empty, the latest insertion is missed and the schedule_timeout
does not wakeup. The sleep interval is MAX_SCHEDULE_TIMEOUT
defined as ~0UL >> 1, a very large number. Hacked it to 5*HZ
for now.
* Fixed bug introduced when discovery thread implementation was
moved to kthread. kthread_stop() is not able to wake up thread
waiting on a semaphore and "modprobe -r lpfc" is not always
(most of the times) able to complete. Fix is in not using
semaphore for the interruptable sleep.
* Small Makefile cleanup - Remove remnants of 2.4 vs. 2.6
determination.... read more

Posted by James Smart 2005-01-02

ChangeLog - 8.0.17

Known issues in 8.0.17
* Please read the associated RELEASE-NOTES file !!!
* This source release intended for upstream kernel releases only!

Changes from 20041207 to 20041213

* Changed version number to 8.0.17
* Fix sparse warnings by adding __iomem markers to lpfc_compat.h.
* Fix some sparse warnings -- 0 used as NULL pointer.
* Make sure there's a space between every if and it's (.
* Fix some overly long lines and make sure hard tabs are used for
indentation.
* Remove all trailing whitespace.
* Integrate Christoph Hellwig's patch for 8.0.14: if
pci_module_init fails we need to release the transport template.
(also don't print the driver name at startup, linux drivers can
be loaded without hardware present, and noise in the log for
that case is considered unpolite, better print messages only for
hardware actually found).
* Integrate Christoph Hellwig's patch for 8.0.14: Add missing
__iomem annotations, remove broken casts, mark functions static.
Only major changes is chaning of some offsets from word-based to
byte-based so we cans simply do void pointer arithmetics (gcc
extension) instead of casting to uint32_t.
* Integrate Christoph Hellwig's patch for 8.0.14: flag is always
LPFC_SLI_ABORT_IMED, aka 0 - remove dead code.
* Modified preprocessor #ifdef, #if, #ifndef to reflect upstream
kernel submission. Clean build with make clean;make and make
clean;make ADVANCED=1 on SMP x86, 2.6.10-rc2 on RHEL 4 Beta
1. IO with a few lips and a long cable pull behaved accordingly.
* Implement full VPD support.
* Abort handler will try to wait for abort completion before
returning. Fixes some panics in iocb completion code path.... read more

Posted by James Smart 2004-12-16

ChangeLog - 8.0.14

Known issues in 8.0.14
* Please read the associated RELEASE-NOTES file

Changes from 20041018 to 20041123

* Changed version number to 8.0.14
* Added new function "iterator" lpfc_sli_next_iocb_slot() which
returns pointer to iocb entry at cmdidx if queue is not full.
It also updates next_cmdidx, and local_getidx (but not cmdidx)
* lpfc_sli_submit_iocb() copies next_cmdidx into cmdidx. Now it is
the only place were we are updating cmdidx.
* lpfc_sli_update_ring() is split in to two --
lpfc_sli_update_ring() and lpfc_sli_update_full_ring().
* lpfc_sli_update_ring() don't to read back correct value of
cmdidx.
* Simplified lpfc_sli_resume_iocb() and its use.
* New static function lpfc_sli_next_iocb(phba, pring, &piocb) to
iterate through commands in the TX queue and new command (at the
end).
* Reduced max_lun to 256 (due to issues reported to some arrays).
Fixed comment, and macro values so def=256, min=1, max=32768.
* Fix an obvious typo/bug: kfree was used to free lpfc_scsi_buf
instead of mempool_free in lpfc_scsiport.c.
* Suppress nodev_tmo message for FABRIC nodes.
* Fixed some usage of plain integer as NULL pointer.
* Bug fix for FLOGI cmpl, lpfc_els_chk_latt error path code
cleanup.
* Fixup lpfc_els_chk_latt() to have Fabric NPorts go thru
discovery state machine as well.
* Fixes to lpfc_els_chk_latt().
* Use DID not SCSI target id as a port_id and add some missing
locks in lpfc_fcp.c.
* Changed eh_abort_handler to return FAILED if command is not
found in driver.
* Fix crash: paging request at virtual address 0000000000100108 -
a result of removing from the txcmpl list item which was already
removed (100100 is a LIST_POISON1 value from the next pointer
and 8 is an offset of the "prev") Driver runs out of iotags and
does not handle that case well. The root of the proble is in the
initialization code in lpfc_sli.c
* Changes to work with proposed linux kernel patch to support
hotplug.
* Zero out seg_cnt in prep_io failure path to prevent double sg
unmap calls.
* Fix setting of upper 32 bits for Host Group Ring Pointers if in
SLIM. Old code was inappropriately masking off low order bits.
* Use scsi_[activate|deactivate]_tcq calls provided in scsi_tcq.h.
* Integrated patch from Christoph Hellwig (hch@lst.de): don't call
pci_dma_sync_* on coherent memory. pci_dma_sync_* is need and
must be used only with streaming dma mappings pci_map_*, not
coherent mappings. Note: There are more consistent mappings
that are using pci_dma_sync calls. Probably these should be
removed as well.
* Modified lpfc_free_scsi_buf to accomodate all three scsi_buf
free types to alleviate miscellaneous panics with cable pull
testing.
* Set hotplug to default 0 and lpfc_target_remove to not remove
devices unless hotplug is enabled.
* Fixed discovery bug: plogi cmpl uses ndlp after its freed.
* Fixed discovery bug: rnid acc cmpl, can potentially use ndlp
after its freed.
* Modularize code path in lpfc_target_remove().
* Changes to support SCSI hotplug (ifdef'ed out because they need
kernel support USE_SCAN_TARGET requires kernel support to export
the interface to scsi_scan_target and to move the SCAN_WILD_CARD
define to a general scsi header file. USE_RESCAN_HOST requires
kernel support to export an interface to scan_scsi_host() with
the rescan flag turned on).
* Removed redundant variable declaration of lpfc_linkdown_tmo.
* Fix for large port count remove test.
* Added check to see if BAR1 register is valid before using BAR1
register for programming config_port mail box command.
* Added lpfc_scsi_hotplug to enable/disable driver support of SCSI
hotplug.
* Changed lpfc_disc_neverdev() to lpfc_disc_illegal() and changed
lpfc_disc_nodev() to lpfc_disc_noop(). Adjusted appropriate
events to use these routines.
* Add support for SCSI device hotplug.
* Take dummy lpfc_target's into account for lpfc_slave_destroy().
* Bug fix to store WWPN / WWNN in NameServer / FDMI lpfc_nodelist
entries.
* Added slavecnt in lpfc_target for diagnostic purposes.
* Added lpfc_hba load/unload flags to take care of special cases
for add/remove device.
* Have target add/remove delay before scanning.
* Have rmmod path cleanup blocked devices before scsi_remove_host.
* Added a #define for msleep for 2.6.5 kernels.
* In reset bus handler if memory allocation fails, return FAILED
and not SUCCESS.
* Have lpfc eh handlers, bus_reset and lun_reset, wait for all
associated I/Os to complete before returning.
* Fix memset byte count in lpfc_hba_init so that
LP1050 would initialize correctly.
* Backround nodev_timeout processing to DPC This enables us to
unblock (stop dev_loss_tmo) when appopriate.
* Fix array discovery with multiple luns. The max_luns was 0 at
the time the host structure was intialized. lpfc_cfg_params
then set the max_luns to the correct value afterwards.
* Remove unused define LPFC_MAX_LUN and set the default value of
lpfc_max_lun parameter to 512.
* Reduced stack usage of lpfc_hba_init.
* Cleaned up the following warning generated by
scripts/checkincludes.pl lpfc_fcp.c: scsi/scsi_cmnd.h is
included more than once.
* Replaced "set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(timeout)" with "msleep(timeout)".
* Fixnode was loosing starget when rediscovered. We saw messages
like: lpfc 0000:04:02.0: 0:0263 Cannot block scsi target as a
result. Moved starget field into struct lpfc_target which is
referenced from the node.
* Add additional SLI layer logging in lpfc_sli.c.
* Ignore more unexpected completions in lpfc_nportdisc.c.
* Can not call lpfc_target_unblock from the soft interrupt
context. It seems to be not nessasery to unblock target from
nodev timeout.
* Introduce and use less lethal event handler for unexpected
events in lpfc_nportdisc.c.
* Can not call fc_target_(un)block() functions with interrupts
disabled in lpfc_scsiport.c.
* Added new configuration parameter, lpfc_max_luns range 1-32768,
default 32768.
* Allow lpfc_fcp.c to call lpfc_get_hba_sym_node_name().
* Increase nodev timeout from 20 seconds to 30 seconds.
* Replace some kfree((void*)ptr) with kfree(ptr).
* Make 3 functions static: lpfc_get_hba_sym_node_name,
lpfc_intr_prep and lpfc_setup_slim_access. Move lpfc_intr_prep
and lpfc_setup_slim_access so they're defined before being used.
* Remove an unecessary list_del() in lpfc_hbadisc.c.
* Set nlp_state before calling lpfc_nlp_list() since this will
potentially call fc_target_unblock which may cause a race in
queuecommand by releasing host_lock.
* Since lpfc_nodev_tmo < dev_loss_tmo remove queuecommand
DID_BAD_TARGET return for now.
* Fix a problem with rcv logo.
* Remove unused portstatistics_t structure.
* Remove #if 0 and unnecessary checks in lpfc_fcp.c.
* Simplify lpfc_issue_lip: Extra layer of protection removed.
* Grab lock before calling lpfc_sli_issue_mbox(phba, pmb,
MBX_NOWAIT) in lpfc_sli_issue_mbox_wait().... read more

Posted by James Smart 2004-11-24

ChangeLog - 20041018

Known issues in 8.0.13
* Please read the associated RELEASE-NOTES file

Changes from 20040920 to 20041018

* Changed version number to 8.0.13
* Modify Makefile to make BUILD_FC_TRANS=0 will build driver
for 2.6.5 kernel with block/unblock patch.
* Modified #ifdef names.
* Added support for proposed FC transport host attributes (which
replaces some of the attributes we had local to the driver).
Removed the binary statistics sysfs attribute.
* Added extra ELS verbose logging for ELS responses.
* Added recognition for BUILD_FC_TRANS=2 to Makefile to define
FC_TRANS_VER2.
* Add a pointer for link stats allocation.
* Exported lpfc_get_hba_sym_node_name for use by FC_TRANS_VER2
sysfs routines.
* Fix discovery problem in lip testing: if device sends an ELS cmd
(i.e. LOGO) before our FLOGI completes it should be LS_RJT'ed.
* Moved #defines around to provide target_add/remove for upstream
kernel deliverables. Provided ifdefs to #include
target_block/unblock only if FC_TRANS_VER1.
* Add sanity check in lpfc_nlp_list move setting nlp_Target
outside #ifdef.
* Added a blocked member to the lpfc_target structure for
block/unblock. This member allows the driver to know when to
unblock for pci_remove_one or pci_add_one. #ifdef'd some more
block/unblock stuff and removed some defensive checks from
target_block/unblock.
* Moved + 5 second window to dev_loss_tmo setting and updated
comments.
* Removed NULL target check from target_block/unblock and fixed up
a few comments.
* Enable sysfs attributes on 2.6.5 kernels and remove extra
compatibility code.
* Remove any and all trailing whitespace.
* Added message 0718 and return error when dma_map_single fails.
* Changed the fcpCntl2 commands to include an FCP_ prefix to get
rid of build warnings on later 2.6.9-rc kernels. Build
conflicts with scsi/scsi.h. Remove inclusions of scsi/scsi.h
from hbadisc.c, sli.c, and fcp.c since these modules had no
dependencies on scsi.h.
* Fixed a bug with RSCN handling. A RSCN received on one device,
shouldn't affect other devices not referenced by the RSCN.
* Moved #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,6) to include
lpfc_jedec_to_ascii to prevent warning in older 2.6.5 kernels.
* Update Makefile to account for older 2.6.5 and scsi-target upstream
kernels.
* This checkin provides block/unblock hooks for the upstream scsi
target kernel and 2.6.5 variants with the block/unblock
patch.
* Discovery changes regarding setting targetp->pnode and
ndlp->nlp_Target Ensure fc_target_* routines are called properly
from discovery. Remove list_del's from lpfc_cleanup(). Ensure
all the lpfc_consistent_bind_* routines don't set any driver
structure objects.
* Fix for timeout of READ_LA or READ_SPARAM mailbox command
causing panic.
* Cleanup list_del()'s for Discovery ndlp lists.
* Bug fixes for some insmod/rmmod crashes, link down crashes and
device loss crashes.
* Removed NLP_SEARCH_DEQUE.
* Call lpfc_target_unblock only if the targetp is nonNull and with
the host_lock held.
* Added qcmdcnt back along with misc bug fixes to discovery.
* Changed tgt_io to outfcpio lpfc_fcp.c.
* Fixed errors caused by LIP and cable pulls both with and without
block/unblock patch.
* For now we have to call fc_target_unblock and fc_target_block
with interrupts enabled.
* Save seg_cnt from dma_map_sg. Save scatter-gather start address
and pass back to dma_unmap_sg in error with seg_cnt.
* Incorporating block/unblock calls into driver with ifdefs. This
change is supported by scsi-target-2.6 kernel and forward only.
* Merged in some discovery bug fixes and added tgt io counters.
* Added sysfs attributes/interfaces: read only attribute
"management_version" and write only attribute "issue_lip".
* Fix build on big endian machines: while #if was OK with
__BIG_ENDIAN which defined as 4321, __BIG_ENDIAN_BITFIELD has to
be tested with #ifdef because it does not have any value, it is
either defined or not.
* Add fabric_name and port_type attributes.
* Change mdelay to msleep. mdelay works, but wastefully uses cpu
resources without a lock held. Revert to msleep. Tested with
sg_reset for bus and three attached targets.
* Added the customary #ifndef...#define...#endif to
lpfc_version.h.
* Integrate patches from Christoph Hellwig: two new helpers common
to lpfc_sli_resume_iocb and lpfc_sli_issue_iocb - singificant
cleanup of those two functions - the unused SLI_IOCB_USE_TXQ is
gone - lpfc_sli_issue_iocb_wait loses it's flags argument
totally.
* Fix in lpfc_sli.c: we can not store a 5 bit value in a 4-bit
field.
* Moved some routines out of lpfc_fcp.c into more appropriate
files.
* Whitespace cleanup: remove all trailing whitespace.
* Make lpfc_disc_ndlp_show static to lpfc_fcp.c.
* Remove leftover printk and replace some with
printk(KERN_WARNING)
* Trivial: fix a few long lines and a soft tab.
* Remove warnings generated by Sparse against driver (make
C=1). Mostly these are "using integer as pointer warnings"
i.e. use NULL instead of 0.
* Integrated patch from Christoph Hellwig: Quite a lot of changes
here, the most notable is that the phba->slim2p lpfc_dmabuf goes
away in favour of a typede pointer and a dma_addr_t. Due to the
typed pointer lots of the cast mess can go away, and while at it
I also replaced the messy SLI2_SLIM_t with a simple struct
lpfc2_sli2_slim that only contains the part of the union we care
about while using SLI2_SLIM_SIZE for all size calculations
directly.
* Integrated patch from Christoph Hellwig: This streamlines the
I/O completion path a little more, especially taking care of
fast-pathing the non-error case. Also removes tons of dead
members and defines from lpfc_scsi.h - e.g. lpfc_target is down
to nothing more then the lpfc_nodelist pointer.
* Added binary sysfs file to issue mbox commands
* Replaced #if __BIG_ENDIAN with #if __BIG_ENDIAN_BITFIELD for
compatibility with the user space applications.
* Decrease the amount of data in proc_info.
* Condense nodelist flag members.
* Expand INFO for discovery sysfs shost entries.
* Notify user if information exceeds 4k sysfs limit.
* Removed a bunch of unused #defines.
* Added initial sysfs discovery shost attributes.
* Remove unused #defines lpfc_disc.h.
* Fixed failMask nodelist settings.
* Cleanup some old comments / unused variables.
* Add LP101 to list of recognized adapters.... read more

Posted by James Smart 2004-10-19

ChangeLog-20040920

Known Issues in 8.0.12:

* The system will not survive cable pulls, link events, etc. The
driver has reverted to not insulating the i/o failures and
reporting them directly to the kernel. The kernel retries, but
the retries typically fail prior to the device restoring. This
will be addressed with the kernel. A SCSI midlayer patch has
been proposed to resolve this issue.

* All ifdef's for older kernels (such as 2.6.5) have been removed.
The driver is becoming more dependent on the latest kernel from
kernel.org.... read more

Posted by James Smart 2004-09-21

ChangeLog - 20040908

Known Issues in 8.0.11:

* The system will not survive cable pulls, link events, etc. The
driver has reverted to not insulating the i/o failures and
reporting them directly to the kernel. The kernel retries, but
the retries typically fail prior to the device restoring. This
will be addressed with the kernel. A SCSI midlayer patch has
been proposed to resolve this issue.

* Support remains, in ifdef's, to support 2.6.5. This was readded
so that this driver can compile and run on SLES9.... read more

Posted by James Smart 2004-09-08

ChangeLog - 20040823

Known Issues in 8.0.10:

* The system will not survive cable pulls, link events, etc. The
driver has reverted to not insulating the i/o failures and
reporting them directly to the kernel. The kernel retries, but
the retries typically fail prior to the device restoring. This
will be addressed with the kernel. A SCSI midlayer patch has
been proposed to resolve this issue.

* Support remains, in ifdef's, to support 2.6.5. This was readded
so that this driver can compile and run on SLES9.... read more

Posted by Jamie Wellnitz 2004-08-23

ChangeLog - 20040811

Known Issues in 8.0.9:

* The system will not survive cable pulls, link events, etc. The
driver has reverted to not insulating the i/o failures and
reporting them directly to the kernel. The kernel retries, but
the retries typically fail prior to the device restoring. This
will be addressed with the kernel. A SCSI midlayer patch has
been proposed to resolve this issue.

* Support remains, in ifdef's, to support 2.6.5. This was readded
so that this driver can compile and run on SLES9.... read more

Posted by James Smart 2004-08-11

ChangeLog - 20040730

Known Issues in 8.0.8:

* The system will not survive cable pulls, link events, etc. The
driver has reverted to not insulating the i/o failures and
reporting them directly to the kernel. The kernel retries, but
the retries typically fail prior to the device restoring. This
will be addressed with the kernel.

* There is a known crash due to a null pointer in a lun access
function. This problem is specific to a particular target.... read more

Posted by James Smart 2004-08-04