[2443] in linux-scsi channel archive

home help back first fref pref prev next nref lref last post

Re: aic7xxx patch

daemon@ATHENA.MIT.EDU (Robert J. Block)
Fri Sep 12 10:13:26 1997

Date: 	Thu, 11 Sep 1997 00:10:41 -0700
From: "Robert J. Block" <rob.block@Sun.COM>
To: Doug Ledford <dledford@dialnet.net>
CC: linux-kernel@vger.rutgers.edu, linux-scsi@vger.rutgers.edu,
        Rob Block <rob.block@Sun.COM>

I've been using this patch for over a week now with good results.
The problem I previously reported with my Umax scanner turned out to be
a termination problem, and I fixed that problem after installing the
patch,
so I don't actually know what difference, if any, the patch would have
made
if the scanner had been properly terminated in the first place.

But the bottom line is: the scanner works great with this driver.  I can
even
turn the scanner off and on at will and still be able to scan  (the
aic7xxx
driver is compiled into the kernel).

Notes:

1) the scanner is the only thing attached to the controller.  nothing
else on
the bus (probably makes things easier).

2) the scanner does occasionally lock up when I try to scan, but
power-cycling
the unit always works, I've never had to reboot the machine.

3) I'm able to get only 300dpi resolution, not the max. 600 that the S12
supports.
When I try more than 300, the scanner tries to scan but freezes up.

All in all, I'm having a loads of fun with the scanner now and really
appreciate
the great work you guys did on the driver.  The interface is sooo much
nicer than
the Adobe/Windows software that came with the unit,  and best of all, I
nEVER
have to boot Windows anymore.  Every piece of hardware I own works with
Linux!

I didn't have much luck getting the tk/tcl gui to work (didn't try very
hard),
but I was able to set up a simple alias to turn my scanner/printer combo
into
an instant b&w copy machine:

alias	xerox   umax-cli -R300 -l | pbmtolps -dpi 300 | lpr

I'll report any more glitches that I find, but this mostly works great.

Regards,
Rob

-- 
Robert J. Block      | Sun Microsystems Inc.
rob.block@sun.com    | <URL: http://www.ncsa.uiuc.edu/People/rblock>
"I do have a cause. It's obscenity. I'm for it." -Tom Lehrer

Doug Ledford wrote:
> 
> As many of you may recall, I've recently been working on a patch to the
> aic7xxx driver to improve several aspects of that driver's reliability.  At
> this point, I think I've reached a decent place to stop current development
> and only make changes to the driver as any bug reports in the current patch
> filter in.  The current version of the patch is aic7xxx-abort-Sep05, and a
> diffstat on the patch looks like this:
> 
>  Documentation/Configure.help |   78 +
>  drivers/scsi/Config.in       |    4
>  drivers/scsi/aic7xxx.c       | 2273 ++++++++++++++++++++++++++-------------
>  drivers/scsi/aic7xxx.h       |    5
>  drivers/scsi/aic7xxx_proc.c  |  224 +---
>  5 files changed, 1663 insertions, 921 deletions
> 
> People interested in trying this patch can find it at ftp.dialnet.net in
> /pub/linux/aic7xxx.  Included here as well is the readme file associated
> with this patch to give an idea of what changes exactly have taken place,
> what problems were fixed, and a list of the current known bugs.
> 
> [ aic7xxx-abort-Sep05.README ]
> 
> I would like to thank all of the people that have been testing out these
> patches for me.  This verion represents what is very nearly a "finished"
> work (if that can be acheived).  Here is a run down of this patch:
> 
> Note: this patch applies against kernel 2.0.31-pre-7
> 
> Changes:
> 
> aic7xxx_abort():  Totally re-written from the ground up.  I think the only
>         original code remaining is the prototye, the open and close brace,
>         and a few variable definitions.
> aic7xxx_reset():  See above.
> Internal helper functions for aic7xxx_{abort,reset}:  In some cases, these
>         are totally re-written as well, in others, they are just modified
>         to fit the new abort/reset schema.
> aic7xxx_handle_seqint():  Modified to handle new abort/reset code as well as
>         improving the QUEUE_FULL and BUSY condition error handling.  Corrected
>         handling of CHECK_CONDITION when we are sending an SDTR or WDTR
>         message to the target.
> aic7xxx_handle_scsiint():  Modifications to the BUS_FREE handler as part of
>         abort/reset fixes.
> aic7xxx_handle_device_reset():  Modified for new reset schema.
> aic7xxx_bus_device_reset():  Modified for new schema, simplified due to a
>         a reduced set of conditions under which this function can be called.
> aic7xxx_isr():  Slight modifications to the CMDOUTCNT variable handling to
>         avoid some race conditions that were causing problems.
> aic7xxx_queue():  Modified to handle devices with delayed SCB queues.
> aic7xxx_run_waiting_queues():  See above.
> aic7xxx_timer():  New function added as part of QUEUE_FULL and BUSY handling.
> aic7xxx_detect():  Added a boot time message, fixed an off by one memory
>         scribble, and added some new initialization code for new variables.
> aic7xxx_proc.c:  New file from Heinz Mauelshagen incorporated to fix a
>         serious memory overflow error, then later modified by me to remove
>         the need to make two passes through our structures and calls to
>         sprintf in order to determine buffer size.
> aic7xxx_done():  Modified for new handling of abort/reset scbs and the added
>         variables brought out by QUEUE_FULL and BUSY handling.
> aic7xxx_search_qinfifo():  Modified to allow an arbitrary destination queue
>         for SCBs that need to be requeued.  Also modified to preserve the
>         SCB_RECOVERY_SCB flag regardless of passed in SCB flags.
> aic7xxx_buildscb():  Modified to create fake SCSI commands to perform
>         negotiation with if the real SCSI command is not a TEST_UNIT_READY
>         command.
> aic7xxx_fake_scsi_done():  Used to free the fake commands we created in
>         aic7xxx_buildscb().
> aic7xxx.c:  Increased MAX_SG from 27 to 122 for performance reasons.  Changes
>         to printk's throughout in order to better organize messages according
>         to the selected aic7xxx=verbose level.  Incremented version level in
>         order to differentiate this code from the stock aic7xxx driver.
> aic7xxx.h:  Added back our support for the aic7xxx_abort function.
> Config.in:  Changed the default settings for the aic7xxx driver to reflect
>         things that used to be broken but now work reliably.
> Configure.help:  Added help items for the aic7xxx config options.
> 
> Probably others that I can't remember right now, and I don't want to go
> looking through the diff file just to list them here.
> 
> Problems fixed:
> 
> 1.  Abort/reset loops and machine lockups should be greatly reduced with this
>         patch.  Actually, loops should be gone, but it is still possible to
>         hang a machine if the drive simply goes away (not really a driver
>         issue).
> 2.  QUEUE_FULL handling should work much better now.  No more drives simply
>         refusing to live any longer because we slammed them with commands
>         so quickly that they could never finish they ones they already had
>         in their full queues.
> 3.  BUSY condition handling, see above.
> 4.  Driver blows up on certain devices during negotiation.  Shouldn't happen
>         any more.  Also shouldn't matter any more if a person enables wide
>         negotiation with early devices that don't know what wide busses are.
>         The analogous situation for synchronous transfers should also be
>         true.
> 5.  Memory overflows from aic7xxx_proc.c should be gone.
> 6.  Memory scribble during init is gone.
> 7.  We no longer show transfer stats on devices that don't exist when
>         proc statistics is enabled.
> 8.  aic7xxx=verbose setting is no longer on/off, but is instead cumulative
>         such that higher verbosity levels result in more printed messages.
>         I recommend the setting aic7xxx=verbose:1 for general use and
>         aic7xxx=verbose:2 or 3 for debugging.
> 9.  Spurious CMDCMPLT with no CMD for SCB messages should be gone.
> 
> Known bugs:
> 
> 1.  A rare command underflow bug with certain brand/model of drives.  This
>         most likely won't get fixed without a SCSI bus analyzer.
> 2.  A rare condition with certain brand/model drives that can cause an
>         outgoing command to fail with an unexpected BUSFREE condition.  We
>         handle this in the driver, but would need to change the sequencer
>         to actually solve the problem.  I've only seen this one once in about
>         30 days of hard testing, so it may not even be worth fixing.
> 
> --
> *****************************************************************************
> * Doug Ledford                      *   Unix, Novell, Dos, Windows 3.x,     *
> * dledford@dialnet.net    873-DIAL  *     WfW, Windows 95 & NT Technician   *
> *   PPP access $14.95/month         *****************************************
> *   Springfield, MO and surrounding * Usenet news, e-mail and shell account.*
> *   communities.  Sign-up online at * Web page creation and hosting, other  *
> *   873-9000 V.34                   * services available, call for info.    *
> *****************************************************************************

home help back first fref pref prev next nref lref last post