Commit Graph

21 Commits

Author SHA1 Message Date
Scott Long
2fdaa90df8 Sync driver with Yahoo:
- Implement MSI support (MSIX support was already there)
- Use a table to drive MSI/MSIX exceptions
- Pre-calculate the command address instead of wasting cycles doing the
  calculation on every i/o.
2009-09-16 23:27:14 +00:00
Scott Long
b23be3e0a6 Make MSI and PERFORMANT interrupts work correctly. Only require the minimum
number of MSIX interrupts that are needed, and don't strictly check for 4.
Enable enough interrupt mask bits so that the controller will generate
interrupts in PERFORMANT mode.  This fixes the hang-on-boot issues that
people were seeing with newer controllers.
2009-09-16 23:10:10 +00:00
Scott Long
d69c9c7867 Work again to fix the interrupt masking problems. We now recognize
that there are 3 different interrupt enable bits, 2 for different
families of cards, and 1 for when MSI is used.  Also apply a big
hammer backstop for cards that aren't recognized.  This should fix
all of the interrupt issues at boot.
2008-08-29 01:23:16 +00:00
Scott Long
8792c6abd8 Correctly set the interrupt enable and disable bits. The previous
code interfered with Performant mode and legacy interrupts.  Also
remove a register read operation on the Simplq code that was
effectively a time-wasting no-op.
2008-08-02 13:04:26 +00:00
Scott Long
22657ce129 A number of significant enhancements to the ciss driver:
1.  The FreeBSD driver was setting an interrupt coalesce delay of 1000us
for reasons that I can only speculate on.  This was hurting everything
from lame sequential I/O "benchmarks" to legitimate filesystem metadata
operations that relied on serialized barrier writes.  One of my
filesystem tests went from 35s to complete down to 6s.

2.  Implemented the Performant transport method.  Without the fix in
(1), I saw almost no difference.  With it, my filesystem tests showed
another 5-10% improvement in speed.  It was hard to measure CPU
utilization in any meaningful way, so it's not clear if there was a
benefit there, though there should have been since the interrupt handler
was reduced from 2 or more PCI reads down to 1.

3.  Implemented MSI-X.  Without any docs on this, I was just taking a
guess, and it appears to only work with the Performant method.  This
could be a programming or understanding mistake on my part.  While this
by itself made almost no difference to performance since the Performant
method already eliminated most of the synchronous reads over the PCI
bus, it did allow the CISS hardware to stop sharing its interrupt with
the USB hardware, which in turn allowed the driver to become decoupled
from the Giant-locked USB driver stack.  This increased performance by
almost 20%.  The MSI-X setup was done with 4 vectors allocated, but only
1 vector used since the performant method was told to only use 1 of 4
queues.  Fiddling with this might make it work with the simpleq method,
not sure.  I did not implement MSI since I have no MSI-specific hardware
in my test lab.

4.  Improved the locking in the driver, trimmed some data structures.
This didn't improve test times in any measurable way, but it does look
like it gave a minor improvement to CPU usage when many
processes/threads were doing I/O in parallel.  Again, this was hard to
accurately test.
2008-07-11 21:20:51 +00:00
Paul Saab
7a0c10de8d There's no reason to check the valence. This allows ciss to work
on the P600.
2005-08-09 20:53:51 +00:00
Paul Saab
17c0792df6 Provide a way to soft reset a proxy controller such as an MSA20 or
MSA500.  This is useful if you need to reset one of the storage
arrays on reboot.
2005-04-19 06:11:16 +00:00
Paul Saab
4788ab3312 Clean up structure packing. 2004-07-29 08:06:22 +00:00
Scott Long
1fe6c4ee54 Add SCSI passthrough support to CISS. This allows devices like tape drives
that are on a CISS bus to be exported up to CAM and made available as normal
devices.  This will typically add one or two buses to CAM, which will be
numbered starting at 32 to allow room for CISS proxy buses.  Also, the CISS
firmware usually hides disk devices, but these can also be exposed as 'pass'
devices if you set the hw.ciss.expose_hidden_physical tunable.

Sponsored by:	Tape Laboratories, Inc.
MFC After: 3 days
2004-06-21 20:18:40 +00:00
Paul Saab
a54e98d365 Document the 64bit version of blocks_to_recover for logical drive status.
Pad the struct to 1024 bytes as defined in the firmware spec.
2004-06-05 18:31:04 +00:00
Paul Saab
bbfb452827 Update logical drive structure 2004-06-04 17:22:13 +00:00
Paul Saab
10672bdf56 Define another HOTPLUG event. 2004-05-28 00:49:57 +00:00
Paul Saab
a891a3bf7c Turn SCSI pre-fetch ON. This is mainly for 64XX and 64X based
controllers and allows the controller to prefetch 1-2k on certain
PCI memory reads to the host.  The spec says this should only be
used for IA32 based systems.

Informed of feature by:	John Cagle <first.last@hp.com>
2004-05-17 17:27:38 +00:00
Paul Saab
256588d2c4 define some new fields in the physical drive structure and pad the
structure to 512 bytes.
2004-04-22 06:23:47 +00:00
Paul Saab
c61314601b Add support for the HP Modular Smart Array 20 & 500 storage arrays.
Logical volumes on these devices show up as LUNs behind another
controller (also known as proxy controller).  In order to issue
firmware commands for a volume on a proxy controller, they must be
targeted at the address of the proxy controller it is attached to,
not the Host/PCI controller.

A proxy controller is defined as a device listed in the INQUIRY
PHYSICAL LUNS command who's L2 and L3 SCSI addresses are zero.  The
corresponding address returned defines which "bus" the controller
lives on and we use this to create a virtual CAM bus.

A logical volume's addresses first byte defines the logical drive
number.  The second byte defines the bus that it is attached to
which corresponds to the BUS of the proxy controller's found or the
Host/PCI controller.

Change event notification to be handled in its own kernel thread.
This is needed since some events may require the driver to sleep
on some operations and this cannot be done during interrupt context.
With this change, it is now possible to create and destroy logical
volumes from FreeBSD, but it requires a native application to
construct the proper firmware commands which is not publicly
available.

Special thanks to John Cagle @ HP for providing remote access to
all the hardware and beating on the storage engineers at HP to
answer my questions.
2004-04-16 23:00:01 +00:00
Paul Saab
a32168b78e Whitespace cleanup. 2004-04-16 21:03:38 +00:00
Paul Saab
307e04602c Correct the READ/WRITE CDB direction definition.
Submitted by:	John Cagle <john.cagle@hp.com>
2003-12-08 23:12:57 +00:00
Paul Saab
aaf8327b2d Define RAID 5+1 and RAID ADG fault tolerances 2003-12-08 16:07:35 +00:00
Paul Saab
440baa08c3 Properly get the drive geometry from the controller. This should
fix booting off of volumes > 255GB.
2003-02-05 08:43:46 +00:00
Alfred Perlstein
4f492bfab5 use __packed. 2002-09-23 18:54:32 +00:00
Mike Smith
3a31b7eb32 Add the 'ciss' driver, which supports the Compaq SmartRAID 5* family of
RAID controllers (5300, 532, 5i, etc.)

Thanks to Compaq and Yahoo! for support during the development of this
driver.

MFC after:	1 week
2001-11-27 23:08:37 +00:00