From owner-freebsd-scsi Fri Mar 19 11:41:36 1999 Delivered-To: freebsd-scsi@freebsd.org Received: from narnia.plutotech.com (narnia.plutotech.com [206.168.67.130]) by hub.freebsd.org (Postfix) with ESMTP id CF34C14FDD for ; Fri, 19 Mar 1999 11:40:51 -0800 (PST) (envelope-from gibbs@narnia.plutotech.com) Received: (from gibbs@localhost) by narnia.plutotech.com (8.9.1/8.7.3) id MAA15479; Fri, 19 Mar 1999 12:31:27 -0700 (MST) Date: Fri, 19 Mar 1999 12:31:27 -0700 (MST) From: "Justin T. Gibbs" Message-Id: <199903191931.MAA15479@narnia.plutotech.com> To: mjacob@feral.com Cc: scsi@FreeBSD.org Subject: Re: SCSI resets in CAM during startup.... X-Newsgroups: pluto.freebsd.scsi In-Reply-To: User-Agent: tin/pre-1.4-980818 ("Laura") (UNIX) (FreeBSD/4.0-CURRENT (i386)) Sender: owner-freebsd-scsi@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org In article you wrote: > > (yes, I know I'm supposed to be working on tape stuff, but I had to put on > another hat today...gawd, my head aches....) > > > I'd like to make a request- I'd like the initial SCSI reset done currently > by the CAM probe framework to be: > > a) The responsibility/discretion of the hba driver to perform. Hmm. I've added the ability for the HBA to request that the initial bus reset not occur a little while ago. Take a look at the PIM_NOBUSRESET flag for the path inquiry ccb. This flag only effects bus reset requests during initial probe situations. I added it for target mode. > b) Config option'ed off (for a CAM_MULTI_INITIATOR) option. I agree that you should be able to indicate that a particular bus is connected to multiple initiators, but I don't know that a single option switch affecting all busses is the right solution. Before anything can happen here, the probe code in cam_xpt needs to be modified so that, in the case of no bus reset, the controller is told to perform negotiation with the first command on the bus. Otherwise outstanding transfer negotiations left over by the BIOS will screw things up. This is on my white board. > One reason for #a is that the Fibre Channel equivalent of this is > pretty heavy weight. For Fiber Channel, the initial bus reset is not necessary as no transfer negotiation ever occurs. The proper solution here is for the code in cam_xpt.c to query the controller to see if negotiation is possible on that controller and to only perform the bus reset if there is the posiblity of a stale negotiation. This should be an easy thing to fix. > If I implement this in the Qlogic as the BUS_RESET command, it basically > then has to traverse the entire loop and send a FCP CMND_IU to all logged > in targets with the RESET_TARGET task management function. This can be > really problematic for a lot of loop configurations, as well as being > completely unnecessary from a state point of view. > > If I implement this as a Loop Reset or a LIP, that's even more drastic. > > What I've been doing up until now is ignoring the XPT_RESET_BUS for Fibre > Channel, but that's not right either. > > This also plays all into #b, where you really don't want to issue bus > resets at all if you can help it. The current Qlogic parallel SCSI code > actually forces async/narrow as it's first state so state management is a > bit easier. > > Opinions? Perhaps we need to have a larger 'reset' vocabulary? For Fibre-Channel, these are only going to occur in the event of error recovery or an explicit user request, but even so, you should be able to better express what you are attempting to achieve with the reset. -- Justin To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-scsi" in the body of the message