ncr53c8xx-3.0e ready for 2.2

Gerard Roudier (groudier@club-internet.fr)
Tue, 30 Jun 1998 22:07:06 +0200 (MET DST)


Hello,

I have made available a new patch against linux-2.1.107 at ftp.tux.org.
This patch allows to upgrade the stock ncr53c8xx driver to version 3.0e.
The main improvement of this version is that it supports up to 64 TAGS
per LUN, with low PCI traffic, optimized SCRIPTS and use O(1) command
management with regard to number of TAGs at C code level and at SCSI
SCRIPTS level as well. (driver 3.0d had obviously same features).
In brief, the driver has a very low latency, there is no latency penalty
in the driver due to tagged command queuing and the driver avoids trashing
uselessly L1/L2 cache lines and PCI bandwitch.
BTW, if we want the whole SCSI stack to scale the same way, we will have
to rewrite scsi.c/allocate_device()/request_queueable().

Common single-threaded benchmarks will not show significant differences
due to these changes, but I bet you that real work and especially RAID
things that deal with short IOs and modern fast disks will get benefits
of them.

ftp://ftp.tux.org/pub/roudier/ncr53c8xx-3.0e-for-linux-2.1.107.patch.gz

This patch will also be sent to Linus within 2 hour.

I will wait for some testing reports under 2.1.107++ before taking
decision to propose this driver version for 2.0.35.

Here is some advertising extracted from the ChangeLog :-)

1) Add a boot setup option that allows to set up device queue depths
at boot-up. This option is very usefull since Linux does not
allow to change scsi device queue depth once the system has been
booted up.

2) Support for up to 64 TAGS per LUN.

3) Rewrite the TARGET vs LUN capabilities management.
CmdQueue is now handled as a LUN capability as it shall be.

4) Add "setverbose" procfs driver command. It allows to tune
verbose level after boot-up. Setting this level to zero, for
example avoid flooding the syslog file.

5) Remove NVRAM detection config option. This option is now enabled
by default but can be disabled by editing the driver header file.

6) Add calls to new function mdelay() for milli-seconds delay if
kernel version >= 2.1.105.

7) Replace all printf(s) by printk(s). After all, the ncr53c8xx is
a driver for Linux.

8) Perform auto-sense on COMMAND TERMINATED. Not sure it is usefull.

9) Several aggressive SCRIPTS optimizations and changes:
Reselect SCRIPTS code rewritten.
Support for selection/reselection without ATN.

10) Remove all accesses to the on-chip RAM from the C code.
The on-chip RAM is now supported on ALPHA.

11) Split DATA_IN and DATA_OUT scripts into 2 sub-scripts.
80 segments are moved from on-chip RAM scripts.
If more segments, an additionnal script in main memory is used
for the additionnal segments.

12) Since the SCRIPTS processor continues SCRIPTS execution after
having won arbitration, do some stuff prior to testing any SCSI
phase on reselection. This should have the vertue to process
scripts in parallel with the SCSI core performing selection.

13) CCB DONE QUEUE written by the NCR on command completion.
Set to 24 entries. Avoid scanning all CCBs on INTFLY.

14) Resources management using doubly linked queues.

15) New AUTO-SENSE and QUEUE FULL handling that does not need to
stall the NCR queue any more (and ensures that REQUEST SENSE
is sent after the involved command prior to any other command
even when tagged command queueing in used).

16) Prepare CCBs for SCSI commands that cannot be queued, instead of
inserting these commands into the waiting list. The waiting list
is now only used while resetting and when memory for CCBs is not
yet available.

17) Heavy changes in the target/lun resources management to allow
the scripts to jump directly to the CCB on reselection instead
of walking on the lun CCBs list. Up to 32 tags per lun are now
supported without script processor and PCI traffic overhead.

Gerard.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu