
LPFC Driver Release Notes:

=============================================================================


                               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).

  In driver revisions 8.0.17 through 8.0.19, a single source tarball was
  provided which contained ifdefs to select the kernel state. A simple
  "make" assumed a 2.6.10 kernel, a "make ADVANCED=1" assumed a 2.6.10
  kernel plus the 1st patch.

  With release 8.0.20, 2 source tarballs are provided:

    lpfcdriver-2.6-8.0.20.tar :
        Contains no #ifdefs, and assumes that all of the above
        functionality and patches are in the kernel. This is an
        upstream-ready source snapshot.

    lpfcdriver-full-2.6-8.9.20.tar.gz 
        Contains #ifdefs so that it remains functional on an unpatched
        2.6.10 kernel. It is compiled as:
          make             : assumes base 2.6.10
          make ADVANCED=1  : assumes 2.6.10 kernel plus patch #1
          make ADVANCED=2  : assumes 2.6.10 kernel plus patches 1 and 2.
 
  Please heed these dependencies....


   ********************************************************************


The following information is provided for additional background on the
history of the driver as we push for upstream acceptance.

Cable pull and temporary device Loss:

  In older revisions of the lpfc driver, the driver internally queued i/o 
  received from the midlayer. In the cases where a cable was pulled, link
  jitter, or a device temporarily loses connectivity (due to its cable
  being removed, a switch rebooting, or a device reboot), the driver could
  hide the disappearance of the device from the midlayer. I/O's issued to
  the LLDD would simply be queued for a short duration, allowing the device
  to reappear or link come back alive, with no inadvertant side effects
  to the system. If the driver did not hide these conditions, i/o would be
  errored by the driver, the mid-layer would exhaust its retries, and the
  device would be taken offline. Manual intervention would be required to
  re-enable the device.

  The community supporting kernel.org has driven an effort to remove
  internal queuing from all LLDDs. The philosophy is that internal
  queuing is unnecessary as the block layer already performs the 
  queuing. Removing the queues from the LLDD makes a more predictable
  and more simple LLDD.

  As a potential new addition to kernel.org, the 8.x driver was asked to
  have all internal queuing removed. Emulex complied with this request.
  In explaining the impacts of this change, Emulex has worked with the
  community in modifying the behavior of the SCSI midlayer so that SCSI
  devices can be temporarily suspended while transport events (such as
  those described) can occur.  

  The proposed patch was posted to the linux-scsi mailing list. The patch
  is contained in the 2.6.10-rc2 (and later) patch kits. As such, this
  patch is part of the standard 2.6.10 kernel.

  By default, the driver expects the patches for block/unblock interfaces
  to be present in the kernel. No #define needs to be set to enable support.


Kernel Support

  This source package is targeted for the upstream kernel only. It relies
  on interfaces that are slowing migrating into the kernel.org kernel.

  A properly built kernel can be created via the patches distributed
  with this package.

  If a driver is needed for older kernels please utilize the 8.0.16
  driver sources.


Patches

  Please refer to the Introduction given above.

  The "-bk?" patches, as well as the outstanding patches to linux-scsi
  are contained within the "patches" subdirectory.  The subdirectory
  contains a README describing the order in which to apply the patches.

  Each patch contains a short intro section describing its modifications.

