Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Sep 2012 00:11:43 +0530
From:      Penta <penta1998@gmail.com>
To:        freebsd-scsi@freebsd.org
Subject:   Re: isp 24xx target-mode SRR handling
Message-ID:  <CAPvJ%2BQfRL71Y1txg_ooADTb83UbQVEiCqXB0GQs2Cc-E1TOhnQ@mail.gmail.com>
In-Reply-To: <50475A54.5000804@feral.com>
References:  <CAPvJ%2BQfSeY=OLbmTX2XuNAQN4DdW%2B8NTRXbEn2fcyK5ewCp%2BXQ@mail.gmail.com> <50475A54.5000804@feral.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Matthew,

Thanks, things are much more clear to me. I also came across your commit
description at http://svnweb.freebsd.org/base?view=revision&revision=238869which
helped.

My sources were a bit outdated and didn't have the SRR/FC Tape changes. Now
that i have them, i'm back to my reading :-)

Thanks a lot once again.

On Wed, Sep 5, 2012 at 7:27 PM, Matthew Jacob <mj@feral.com> wrote:

> On 9/5/2012 2:45 AM, Penta wrote:
>
>> Hi Matthew,
>>
>> I'm trying to understand the target-mode implementation of the isp driver.
>> My question is regarding SRR handling. On receiving a notify request
>> IN24XX_SRR_RCVD, it seems that the target rejects the notify request
>> (na_srr_flags = 1, na_srr_reject_flags = 1 etc.. which i dont understand)
>>
>> My question is that shouldn't the initiator send a SRR request only when
>> data retransmission is supported by the target (in isp's case it isn't).
>> The PRLI handling doesn't seem to do anything w.r.t to SRR. How does the
>> target notify the initiator that retransmission isn't supported ? Also
>> what
>> happens next, does the initiator retry the entire command, or is it
>> dependent on the initiator implementation ?
>>
>> Is an SRR implementation for target-mode vital moving forward (8GB cards
>> etc.) or is it just a nice to have feature ?
>>
>> I am new with the FC protocol and the code. I might have asked something
>> obvious, so please bear with me.
>>
>>  Yes, the initiator is only going to send an SRR to devices that have set
> in the PRLI word3 that they support that. Note also that isp(8) is
> cognizant about this for it's initiator side as well. It's been supported
> in the QLogic cards for quite some time, but not in isp(8).
>
> That setting is done in  isp_fibre_init_2400 by looking at options gotten
> from card NVRAM, looking at softer setting options and setting the value in
> the ICB (init control block) and local softc appropriately:
>
>         icbp->icb_fwoptions2 = fcp->isp_xfwoptions;
>         if (isp->isp_confopts & ISP_CFG_NOFCTAPE) {
>                 icbp->icb_fwoptions2 &= ~ICB2400_OPT2_FCTAPE;
>         }
>         if (isp->isp_confopts & ISP_CFG_FCTAPE) {
>                 icbp->icb_fwoptions2 |= ICB2400_OPT2_FCTAPE;
>         }
>
>         if (icbp->icb_fwoptions2 & ICB2400_OPT2_FCTAPE) {
>                 FCPARAM(isp, chan)->fctape_enabled = 1;
>         } else {
>                 FCPARAM(isp, chan)->fctape_enabled = 0;
>         }
>
> and in isp_fiber_init (for 23XX cards);
>
>                if (ISP_CAP_FCTAPE(isp)) {
>                         if (isp->isp_confopts & ISP_CFG_NOFCTAPE)
>                                 icbp->icb_xfwoptions &= ~ICBXOPT_FCTAPE;
>
>                         if (isp->isp_confopts & ISP_CFG_FCTAPE)
>                                 icbp->icb_xfwoptions |= ICBXOPT_FCTAPE;
>
>                         if (icbp->icb_xfwoptions & ICBXOPT_FCTAPE) {
>                                 icbp->icb_fwoptions &= ~ICBOPT_FULL_LOGIN;
>      /* per documents */
>                                 icbp->icb_xfwoptions |=
> ICBXOPT_FCTAPE_CCQ|ICBXOPT_**FCTAPE_CONFIRM;
>                                 FCPARAM(isp, 0)->fctape_enabled = 1;
>                         } else {
>                                 FCPARAM(isp, 0)->fctape_enabled = 0;
>                         }
>                 } else {
>                         icbp->icb_xfwoptions &= ~ICBXOPT_FCTAPE;
>                         FCPARAM(isp, 0)->fctape_enabled = 0;
>                 }
>
> What the initiator does after the SRR depends on what the target does. The
> idea of sending an SRR is to let the target know that you didn't quite get
> what they were sending. In the case of lost data, the SRR causes a reset of
> the SCSI protocol data pointer so that data retransmission begins again
> from the reset data pointer offset. In the case of a lost RSPNS frame, the
> response frame is just resent.
>
> There are some subtleties about the practical aspects of current
> implementations that make things a little difficult. For example you're not
> likely to know you've lost a frame until the RSPNS frame is sent (for reads
> from the target), and as you may or may not have noticed this causes some
> complications with the current CAM state machine notion- by the time you're
> told that a frame was lost, the SIM has no idea what to do because that
> relates to a CTIO that was done some time in the past (hence the current
> CAM_RECV_MESSAGE hack).
>
> If you want to see all of the ins and outs of data recovery cases related
> to SRR and other mechanisms, you should read FCP2 (probably not available
> w/o being a t10 member) or FCP4 (available from www.t10.org I think
> because it's still in draft form) which goes on at great length about
> recovery mechanisms.
>
>
> ______________________________**_________________
> freebsd-scsi@freebsd.org mailing list
> http://lists.freebsd.org/**mailman/listinfo/freebsd-scsi<http://lists.freebsd.org/mailman/listinfo/freebsd-scsi>;
> To unsubscribe, send any mail to "freebsd-scsi-unsubscribe@**freebsd.org<freebsd-scsi-unsubscribe@freebsd.org>
> "
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPvJ%2BQfRL71Y1txg_ooADTb83UbQVEiCqXB0GQs2Cc-E1TOhnQ>