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