SAS SSP DONE in response to CREDIT_BLOCKED when waiting for ACKs or NAKs

Elliott, Robert (Server Storage) Elliott at hp.com
Fri Apr 25 16:18:34 PDT 2003


* From the T10 Reflector (t10 at t10.org), posted by:
* "Elliott, Robert (Server Storage)" <Elliott at hp.com>
*
This is a multi-part message in MIME format.

------_=_NextPart_001_01C30B80.FDF0C22B
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

After an SSP phy sends DONE, it is allowed to continue sending RRDY,
ACK, NAK, and CREDIT_BLOCKED to keep the other side going.  There would
be a problem if both sides send DONE before all frames have been ACKed
or NAKed yet. =20

This is handled in SSP_TF2:Tx_Wait for both normal Close Connection
requests and Credit Timeout timer expiration; the state machine does =
not
jump to SSP_TF4:Indicate_DONE_Tx unless it got Tx Balance Status
(Balanced), meaning all outgoing frames have been ACKed or NAKed.

If SSP_TF decides to send a DONE because it received a CREDIT_BLOCKED
primitive, however, it does not check that its incoming ACKs or NAKs =
are
balanced.  Just because a CREDIT_BLOCKED arrived does not mean that an
ACK/NAK timeout has also happened and this phy should stop waiting for
them.  The SSP_TC logic that transmits CREDIT_BLOCKED doesn't consider
ACK/NAK status.  If both phys decide to send CREDIT_BLOCKED, the
resulting DONEs could cross before the ACKs and the ACKs could get lost
amongst the CLOSEs that follow.

I think adding a check for Tx Balance Status (Balanced) to the third
paragraph fixes this.=20

Current:=20
7.16.7.6.3.3 Transition SSP_TF2:Tx_Wait to SSP_TF4:Indicate_DONE_Tx=20
This transition shall occur and include an ACK/NAK Timeout argument if
an ACK/NAK Timeout message is=20
received.=20

This transition shall occur and include a Close Connection argument if
this state was entered from the=20
SSP_TF1:Connected_Idle state with an argument of Close Connection and
the last Tx Balance Status=20
message received had an argument of Balanced.=20

This transition shall occur and include a Credit Timeout argument if
this state was entered from the=20
SSP_TF1:Connected_Idle state with a Transmit Frame Balance Required
argument or a Transmit Frame=20
Balance Not Required argument and the last Tx Credit Status message
received had an argument of Blocked.=20

This transition shall occur and include a Credit Timeout argument if:=20
a) this state was entered from the SSP_TF1:Connected_Idle state with a
Transmit Frame Balance=20
Required argument or a Transmit Frame Balance Not Required argument;=20
b) the Credit Timeout timer expired before a Tx Credit Status message
was received with an argument of=20
Available; and=20
c) a Tx Balance Status message was received with an argument of =
Balanced
(i.e., the Credit Timeout=20
argument shall not be included in this transition for this reason =
unless
the ACK/NAK count is=20
balanced); and=20
d) an ACK/NAK Timeout message was not received.=20


to (new text in <<< >>>):=20
...=20
This transition shall occur and include a Credit Timeout argument if:=20
a) this state was entered from the SSP_TF1:Connected_Idle state with a
Transmit Frame Balance=20
Required argument or a Transmit Frame Balance Not Required argument;=20
b) the last Tx Credit Status message received had an argument of
Blocked; and=20
<<< c) the last Tx Balance Status message received had an argument of
Balanced.  >>>=20
...=20


--=20
Rob Elliott, elliott at hp.com=20
Hewlett-Packard Industry Standard Server Storage Advanced Technology=20
 <https://ecardfile.com/id/RobElliott>
https://ecardfile.com/id/RobElliott=20




------_=_NextPart_001_01C30B80.FDF0C22B
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">

SAS SSP DONE in response to CREDIT_BLOCKED when waiting for ACKs = or NAKs After an SSP phy sends DONE, it is = allowed to continue sending RRDY, ACK, NAK, and CREDIT_BLOCKED to keep = the other side going.  There would be a problem if both sides send = DONE before all frames have been ACKed or NAKed yet.  This is handled in SSP_TF2:Tx_Wait for = both normal Close Connection requests and Credit Timeout timer = expiration; the state machine does not jump to SSP_TF4:Indicate_DONE_Tx = unless it got Tx Balance Status (Balanced), meaning all outgoing frames = have been ACKed or NAKed. If SSP_TF decides to send a DONE = because it received a CREDIT_BLOCKED primitive, however, it does not = check that its incoming ACKs or NAKs are balanced.  Just because a = CREDIT_BLOCKED arrived does not mean that an ACK/NAK timeout has also = happened and this phy should stop waiting for them.  The SSP_TC = logic that transmits CREDIT_BLOCKED doesn't consider ACK/NAK = status.  If both phys decide to send CREDIT_BLOCKED, the resulting = DONEs could cross before the ACKs and the ACKs could get lost amongst = the CLOSEs that follow. I think adding a check for Tx Balance = Status (Balanced) to the third paragraph fixes this. Current: 
7.16.7.6.3.3 Transition = SSP_TF2:Tx_Wait to SSP_TF4:Indicate_DONE_Tx 
This transition shall occur and = include an ACK/NAK Timeout argument if an ACK/NAK Timeout message = is 
received. This transition shall occur and = include a Close Connection argument if this state was entered from = the 
SSP_TF1:Connected_Idle state with an = argument of Close Connection and the last Tx Balance Status 
message received had an argument of = Balanced. This transition = shall occur and include a Credit Timeout argument if this state was = entered from the 
SSP_TF1:Connected_Idle state with a Transmit Frame = Balance Required argument or a Transmit Frame 
Balance Not = Required argument and the last Tx Credit Status message received had an = argument of Blocked. This transition shall occur and = include a Credit Timeout argument if: 
a) this state was entered from the = SSP_TF1:Connected_Idle state with a Transmit Frame Balance 
Required argument or a Transmit Frame = Balance Not Required argument; 
b) the Credit Timeout timer expired = before a Tx Credit Status message was received with an argument = of 
Available; and 
c) a Tx Balance Status message was = received with an argument of Balanced (i.e., the Credit Timeout 
argument shall not be included in = this transition for this reason unless the ACK/NAK count is 
balanced); and 
d) an ACK/NAK Timeout message was not = received. 
to (new text in <<< = >>>): 
... 
This transition shall occur and = include a Credit Timeout argument if: 
a) this state was entered from the = SSP_TF1:Connected_Idle state with a Transmit Frame Balance 
Required argument or a Transmit Frame = Balance Not Required argument; 
b) the last Tx Credit Status message = received had an argument of Blocked; and 
<<< c) the = last Tx Balance Status message received had an argument of = Balanced.  >>> 
... 
-- 
Rob Elliott, elliott at hp.com 
Hewlett-Packard Industry Standard = Server Storage Advanced Technology 
https://ecardfile.com/id/RobElliott 


------_=_NextPart_001_01C30B80.FDF0C22B--




More information about the T10 mailing list