Port-mips archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: wd33c93 cleanup patch set



Hi,

> I have four patches I'd like to be reviewed and considered for
> inclusion. There's one bug and some clean-ups based on what I'm doing
> in my local branch.

I'm not a SCSI guru, but most your patches seem reasonable.

> * patch-1 fixes a panic if the timed out command isn't currently
> active. This can happen if the device disconnects mid-transfer and the
> controller is then idle (or active on another transfer to another
> device.)

This seems correct fix, acb passed via callout should be used.

> * patch-2 adds a string parameter to wd33c93_error() so the caller can
> specify what the SCSI error was.

Looks reasonable debug info.

> * patch-3 adds a new debug flag to log submitted SCSI requests to the
> driver with some details about what the underlying request is (which i
> found useful for debugging transfer vs sync/async setup stuff.)

I wonder if how ADAPTER_REQ_GROW_RESOURCES should be handled
if the indivitual driver doesn't support it.

Many (most?) major SCSI drivers (ncr53x9c, ncr5390sbc, mb89352 etc.)
have been left with a comment "XXX: Not supported." since
thorpej_scsipi branch merge back in 2001:
 https://github.com/NetBSD/src/commit/937a7a3ed9796b6b06da5c5ae500672154ba4a0e

> * patch-4 splits wd33c93_timeout() into wd33c93_timeout() and
> wd33c93_timeout_callback(). It's being used both as a timeout and as a
> callback, and whilst tinkering with error handling locally I found it
> was useful to have them split so I could do stuff like abort/complete
> the transfer if it's a timeout as there's no subsequent code in that
> path that would actually complete the transfer.
 :
> I still have an outstanding question on the kern list about SCSI
> timeouts and where they're supposed to be handled - for patch-4, I
> don't think the scsipi layer is running its own timeouts on transfers
> - it's asking the driver to do it - and if the driver hits the timeout
> but never completes the transfer it will just be hung/lost for good.

>>  wd33c93: split wd33c93_timeout() into timeout and callback
>>  
>>  The code actually directly calls the same function for both
>>  processing a timeout (and thus sending an abort, bus reset, etc)
>>  and the callout running.
>>  
>>  However, the timeout code doesn't actually complete an acb.
>>  So if an acb times out, it seems to just .. be timed out.
>>  Forever.
>>  
>>  So in preparation for adding support for completing an acb with
>>  timeout, split wd33c93_timeout() into timeout and callout.
>>  
>>  This should be a no-op.

Maybe we should ask SCSI gurus (bouyer? thorpej?) about this, but
AFAICT there are several SCSI drivers that don't handle timeout
errors properly.

As you mentioned, calling a timeout function via callout is just
preparation for future support so it looks reasonable for me.

Thanks,
---
Izumi Tsutsui


Home | Main Index | Thread Index | Old Index