
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.

  The proposed modifications to the transport layer for FC remote ports
  and extended attribute support is now part of the upstream kernel
  as of 2.6.12. We no longer need to provide patches for this support,
  nor a *full* version which has old an new kernel support.
  
  The driver now requires a 2.6.12 (if pre-release, 2.6.12-rc1) or later
  kernel.
  
  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 inadvertent 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. (See notes
  at the top of this file). It relies on interfaces that are slowing
  migrating into the kernel.org kernel.

  At this time, the driver requires the 2.6.12 (if pre-release, 2.6.12-rc1)
  kernel.

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


Patches

  Thankfully, at this time, patches are not needed.


