1
0
Fork 0

Merging upstream version 1.2.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-16 10:05:45 +01:00
parent de317aafca
commit a2fa71affa
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
762 changed files with 7536 additions and 1096 deletions

View file

@ -308,7 +308,8 @@ static void test_admin_resp_err(nvme_mi_ep_t ep, struct test_peer *peer)
peer->tx_buf_len = 8;
rc = nvme_mi_admin_identify_ctrl(ctrl, &id);
assert(rc == 0x2);
assert(nvme_status_get_type(rc) == NVME_STATUS_TYPE_MI);
assert(nvme_status_get_value(rc) == NVME_MI_RESP_INTERNAL_ERR);
}
/* test: all 4-byte aligned response sizes - should be decoded into the
@ -332,7 +333,8 @@ static void test_admin_resp_sizes(nvme_mi_ep_t ep, struct test_peer *peer)
for (i = 8; i <= 4096 + 8; i+=4) {
peer->tx_buf_len = i;
rc = nvme_mi_admin_identify_ctrl(ctrl, &id);
assert(rc == 2);
assert(nvme_status_get_type(rc) == NVME_STATUS_TYPE_MI);
assert(nvme_status_get_value(rc) == NVME_MI_RESP_INTERNAL_ERR);
}
nvme_mi_close_ctrl(ctrl);
@ -407,6 +409,7 @@ static void test_poll_timeout(nvme_mi_ep_t ep, struct test_peer *peer)
/* test: send a More Processing Required response, then the actual response */
struct mpr_tx_info {
int msg_no;
bool admin_quirk;
size_t final_len;
};
@ -422,6 +425,9 @@ static int tx_mpr(struct test_peer *peer, void *buf, size_t len)
case 1:
peer->tx_buf[4] = NVME_MI_RESP_MPR;
peer->tx_buf_len = 8;
if (tx_info->admin_quirk) {
peer->tx_buf_len = 20;
}
break;
case 2:
peer->tx_buf[4] = NVME_MI_RESP_SUCCESS;
@ -446,6 +452,7 @@ static void test_mpr_mi(nvme_mi_ep_t ep, struct test_peer *peer)
tx_info.msg_no = 1;
tx_info.final_len = sizeof(struct nvme_mi_mi_resp_hdr) + sizeof(ss_info);
tx_info.admin_quirk = false;
peer->tx_fn = tx_mpr;
peer->tx_data = &tx_info;
@ -463,6 +470,32 @@ static void test_mpr_admin(nvme_mi_ep_t ep, struct test_peer *peer)
tx_info.msg_no = 1;
tx_info.final_len = sizeof(struct nvme_mi_admin_resp_hdr) + sizeof(id);
tx_info.admin_quirk = false;
peer->tx_fn = tx_mpr;
peer->tx_data = &tx_info;
ctrl = nvme_mi_init_ctrl(ep, 1);
rc = nvme_mi_admin_identify_ctrl(ctrl, &id);
assert(rc == 0);
nvme_mi_close_ctrl(ctrl);
}
/* We have seen drives that send a MPR response as a full Admin message,
* rather than a MI message; these have a larger message body
*/
static void test_mpr_admin_quirked(nvme_mi_ep_t ep, struct test_peer *peer)
{
struct mpr_tx_info tx_info;
struct nvme_id_ctrl id;
nvme_mi_ctrl_t ctrl;
int rc;
tx_info.msg_no = 1;
tx_info.final_len = sizeof(struct nvme_mi_admin_resp_hdr) + sizeof(id);
tx_info.admin_quirk = true;
peer->tx_fn = tx_mpr;
peer->tx_data = &tx_info;
@ -638,6 +671,7 @@ struct test {
DEFINE_TEST(poll_timeout),
DEFINE_TEST(mpr_mi),
DEFINE_TEST(mpr_admin),
DEFINE_TEST(mpr_admin_quirked),
DEFINE_TEST(mpr_timeouts),
DEFINE_TEST(mpr_timeout_clamp),
DEFINE_TEST(mpr_mprt_zero),