cvs commit: src/sys/dev/iir iir.c iir.h iir_pci.c
scottl at FreeBSD.org
Tue Feb 28 23:24:41 PST 2006
scottl 2006-03-01 07:24:39 UTC
FreeBSD src repository
sys/dev/iir iir.c iir.h iir_pci.c
Big update to the iir driver:
- Don't use a common buffer in the softc to store per-command data. Reserve
a buffer in the command itself.
- Don't allocate DMA memory for the kernel command structures when all you
really need is DMA memory for the scratch buffer embedded in them. Instead
allocate a slab for the scratch buffers and divide it up as needed.
- Call bus_dmamap_unload() at the completion of commands.
- Preserve and clear the CAM CCB status flags at completion.
- Reorder some low-level command operations to try to close races.
- Limit the simq to 32 commands for now. There are some serious problems
with the driver under load that are not well understood, so keeping the
simq lower helps avoid this. It has been tested at a higher value, but
this is a safe value that doesn't show much performance degredation.
These changes allow the driver to work reliably with >4GB of memory on i386
and amd64, and also work around deadlocks seen under very high load in
certain situations. The work-around is far from ideal, but without and
documentation it is hard to know what the right fix is.
Revision Changes Path
1.14 +153 -156 src/sys/dev/iir/iir.c
1.15 +8 -7 src/sys/dev/iir/iir.h
1.16 +8 -7 src/sys/dev/iir/iir_pci.c
More information about the cvs-all