]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/commit
MFC r321502, r321714, r321733, r321737, r321799, r322364:
authorken <ken@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Fri, 18 Aug 2017 15:38:08 +0000 (15:38 +0000)
committerken <ken@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Fri, 18 Aug 2017 15:38:08 +0000 (15:38 +0000)
commitb9f38e78f04ba95ed0f26beef9c1495dc3d1f01b
treedeea465608d25cf3a2296434aecc52cd37d1ec15
parented888f5f2bd799e95f617da2c31cf7285ba4f4a1
MFC r321502, r321714, r321733, r321737, r321799, r322364:

  ------------------------------------------------------------------------
  r321502 | scottl | 2017-07-25 19:48:13 -0600 (Tue, 25 Jul 2017) | 2 lines

  Quiet a message that sounds far more dire than it really is.

  ------------------------------------------------------------------------
  r321714 | scottl | 2017-07-30 00:53:58 -0600 (Sun, 30 Jul 2017) | 13 lines

      Split the interrupt setup code into two parts: allocation and configuration.
      Do the allocation before requesting the IOCFacts message.  This triggers
      the LSI firmware to recognize the multiqueue should be enabled if available.
      Multiqueue isn't used by the driver yet, but this also fixes a problem with
      the cached IOCFacts not matching latter checks, leading to potential problems
      with error recovery.

      As a side-effect, fetch the driver tunables as early as possible.

  Reviewed by: slm
  Obtained from: Netflix
  Differential Revision: D9243

  ------------------------------------------------------------------------
  r321733 | scottl | 2017-07-30 16:34:24 -0600 (Sun, 30 Jul 2017) | 5 lines

  Change from using underbar function names to normal function names for
  the informational print functions.  Collapse the debug API a bit to be
  more generic and not require as much code duplication.  While here, fix
  a bug in MPS that was already fixed in MPR.

  ------------------------------------------------------------------------
  r321737 | scottl | 2017-07-30 18:05:49 -0600 (Sun, 30 Jul 2017) | 3 lines

      Don't re-parse PCI IDs in order to set card-specific flags, use
      the flags field in the PCIID table.

  ------------------------------------------------------------------------
  r321799 | scottl | 2017-07-31 10:55:56 -0600 (Mon, 31 Jul 2017) | 4 lines

  Fix a logic bug in the split PCI interrupt code that slipped through

  Reported by: Harry Schmalzbauer

  ------------------------------------------------------------------------
  r322364 | ken | 2017-08-10 08:59:17 -0600 (Thu, 10 Aug 2017) | 39 lines

  Changes to make mps(4) and mpr(4) handle reinit with reallocation.

  When the mps(4) and mpr(4) drivers need to reinitialize the
  firmware, they sometimes need to reallocate all of the memory
  allocated by the driver.  The reallocation happens whenever the IOC
  Facts change.  That should only happen after a firmware upgrade.

  If the reinitialization happens as a result of a timed out command
  sent to the card, the command that timed out and triggered the
  reinit may have been freed if iocfacts_allocate() reallocated all
  memory.  If the caller attempts to access the command after that,
  the kernel will panic because the caller will be dereferencing
  freed memory.

  The solution is to set a flag in the softc when we reallocate,
  and avoid dereferencing the command strucure if we've reallocated.

  The changes are largely the same in both drivers, since mpr(4) is a
  derivative of mps(4).

   o In iocfacts_allocate(), if the IOC Facts have changed and we
     need to reallocate, set the REALLOCATED flag in the softc.

   o Change wait_command() to take a struct mps_command ** instead of
     a struct mps_command *.  This allows us to NULL out the caller's
     command pointer if we have to reinit the controller and the data
     structures get reallocated.  (The REALLOCATED flag will be set
     in the softc if that has happened.)

   o In every place that calls wait_command(), make sure we handle
     the case where the command is NULL after the call.

   o The mpr(4) driver has mpr_request_polled() which can also
     reinitialize the card.  Also check for reallocation there.

  Reviewed by: scottl, slm
  Sponsored by: Spectra Logic

  ------------------------------------------------------------------------

Approved by: re (marius)

git-svn-id: svn://svn.freebsd.org/base/stable/10@322661 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
18 files changed:
sys/dev/mpr/mpr.c
sys/dev/mpr/mpr_config.c
sys/dev/mpr/mpr_pci.c
sys/dev/mpr/mpr_sas.c
sys/dev/mpr/mpr_sas_lsi.c
sys/dev/mpr/mpr_table.c
sys/dev/mpr/mpr_table.h
sys/dev/mpr/mpr_user.c
sys/dev/mpr/mprvar.h
sys/dev/mps/mps.c
sys/dev/mps/mps_config.c
sys/dev/mps/mps_pci.c
sys/dev/mps/mps_sas.c
sys/dev/mps/mps_sas_lsi.c
sys/dev/mps/mps_table.c
sys/dev/mps/mps_table.h
sys/dev/mps/mps_user.c
sys/dev/mps/mpsvar.h