Adding upstream version 1.7.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
e82bec3657
commit
86acbfc29e
878 changed files with 2965 additions and 1746 deletions
|
@ -13,6 +13,7 @@
|
|||
#include "util.h"
|
||||
|
||||
#define TEST_FD 0xFD
|
||||
#define HEADER_LEN 20
|
||||
|
||||
static void arbitrary_ascii_string(size_t max_len, char *str, char *log_str)
|
||||
{
|
||||
|
@ -61,9 +62,8 @@ static void test_no_entries(nvme_ctrl_t c)
|
|||
struct mock_cmd mock_admin_cmds[] = {
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header),
|
||||
.cdw10 = (sizeof(header) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header,
|
||||
},
|
||||
|
@ -90,9 +90,8 @@ static void test_four_entries(nvme_ctrl_t c)
|
|||
struct mock_cmd mock_admin_cmds[] = {
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header),
|
||||
.cdw10 = (sizeof(header) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header,
|
||||
},
|
||||
|
@ -100,15 +99,14 @@ static void test_four_entries(nvme_ctrl_t c)
|
|||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(entries),
|
||||
.cdw10 = (sizeof(entries) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.cdw12 = sizeof(header), /* LPOL */
|
||||
.out_data = log_entries,
|
||||
},
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header),
|
||||
.cdw10 = (sizeof(header) / 4 - 1) << 16 /* NUMDL */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header,
|
||||
},
|
||||
|
@ -142,9 +140,8 @@ static void test_five_entries(nvme_ctrl_t c)
|
|||
struct mock_cmd mock_admin_cmds[] = {
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header),
|
||||
.cdw10 = (sizeof(header) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header,
|
||||
},
|
||||
|
@ -161,15 +158,14 @@ static void test_five_entries(nvme_ctrl_t c)
|
|||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = second_data_len,
|
||||
.cdw10 = (second_data_len / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.cdw12 = sizeof(header) + first_data_len, /* LPOL */
|
||||
.out_data = log_entries + first_entries,
|
||||
},
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header),
|
||||
.cdw10 = (sizeof(header) / 4 - 1) << 16 /* NUMDL */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header,
|
||||
},
|
||||
|
@ -200,14 +196,13 @@ static void test_genctr_change(nvme_ctrl_t c)
|
|||
};
|
||||
/*
|
||||
* genctr changes after the entries are fetched the first time,
|
||||
* so the log page fetch is retried
|
||||
* so the log page entries are refetched
|
||||
*/
|
||||
struct mock_cmd mock_admin_cmds[] = {
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header1),
|
||||
.cdw10 = (sizeof(header1) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header1,
|
||||
},
|
||||
|
@ -215,23 +210,14 @@ static void test_genctr_change(nvme_ctrl_t c)
|
|||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(entries1),
|
||||
.cdw10 = (sizeof(entries1) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
| NVME_LOG_LID_DISCOVER, /* NUMDL */
|
||||
.cdw12 = sizeof(header1), /* LPOL */
|
||||
.out_data = entries1,
|
||||
},
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header2),
|
||||
.cdw10 = (sizeof(header2) / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header2,
|
||||
},
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header2),
|
||||
.cdw10 = (sizeof(header2) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header2,
|
||||
},
|
||||
|
@ -239,15 +225,14 @@ static void test_genctr_change(nvme_ctrl_t c)
|
|||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(entries2),
|
||||
.cdw10 = (sizeof(entries2) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.cdw12 = sizeof(header2), /* LPOL */
|
||||
.out_data = log_entries2,
|
||||
},
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header2),
|
||||
.cdw10 = (sizeof(header2) / 4 - 1) << 16 /* NUMDL */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header2,
|
||||
},
|
||||
|
@ -280,9 +265,8 @@ static void test_max_retries(nvme_ctrl_t c)
|
|||
struct mock_cmd mock_admin_cmds[] = {
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header1),
|
||||
.cdw10 = (sizeof(header1) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header1,
|
||||
},
|
||||
|
@ -290,23 +274,14 @@ static void test_max_retries(nvme_ctrl_t c)
|
|||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(entry),
|
||||
.cdw10 = (sizeof(entry) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.cdw12 = sizeof(header1), /* LPOL */
|
||||
.out_data = &entry,
|
||||
},
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header2),
|
||||
.cdw10 = (sizeof(header2) / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header2,
|
||||
},
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header2),
|
||||
.cdw10 = (sizeof(header2) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header2,
|
||||
},
|
||||
|
@ -314,15 +289,14 @@ static void test_max_retries(nvme_ctrl_t c)
|
|||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(entry),
|
||||
.cdw10 = (sizeof(entry) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.cdw12 = sizeof(header2), /* LPOL */
|
||||
.out_data = &entry,
|
||||
},
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header3),
|
||||
.cdw10 = (sizeof(header3) / 4 - 1) << 16 /* NUMDL */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header3,
|
||||
},
|
||||
|
@ -339,14 +313,12 @@ static void test_max_retries(nvme_ctrl_t c)
|
|||
|
||||
static void test_header_error(nvme_ctrl_t c)
|
||||
{
|
||||
size_t header_size = sizeof(struct nvmf_discovery_log);
|
||||
/* Stop after an error in fetching the header the first time */
|
||||
struct mock_cmd mock_admin_cmds[] = {
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = header_size,
|
||||
.cdw10 = (header_size / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.err = NVME_SC_INVALID_OPCODE,
|
||||
},
|
||||
|
@ -367,9 +339,8 @@ static void test_entries_error(nvme_ctrl_t c)
|
|||
struct mock_cmd mock_admin_cmds[] = {
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header),
|
||||
.cdw10 = (sizeof(header) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header,
|
||||
},
|
||||
|
@ -377,7 +348,6 @@ static void test_entries_error(nvme_ctrl_t c)
|
|||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = entry_size,
|
||||
.cdw10 = (entry_size / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.cdw12 = sizeof(header), /* LPOL */
|
||||
.err = -EIO,
|
||||
|
@ -400,9 +370,8 @@ static void test_genctr_error(nvme_ctrl_t c)
|
|||
struct mock_cmd mock_admin_cmds[] = {
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header),
|
||||
.cdw10 = (sizeof(header) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.out_data = &header,
|
||||
},
|
||||
|
@ -410,15 +379,14 @@ static void test_genctr_error(nvme_ctrl_t c)
|
|||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(entry),
|
||||
.cdw10 = (sizeof(entry) / 4 - 1) << 16 /* NUMDL */
|
||||
| 1 << 15 /* RAE */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.cdw12 = sizeof(header), /* LPOL */
|
||||
.out_data = &entry,
|
||||
},
|
||||
{
|
||||
.opcode = nvme_admin_get_log_page,
|
||||
.data_len = sizeof(header),
|
||||
.cdw10 = (sizeof(header) / 4 - 1) << 16 /* NUMDL */
|
||||
.data_len = HEADER_LEN,
|
||||
.cdw10 = (HEADER_LEN / 4 - 1) << 16 /* NUMDL */
|
||||
| NVME_LOG_LID_DISCOVER, /* LID */
|
||||
.err = NVME_SC_INTERNAL,
|
||||
},
|
||||
|
|
|
@ -46,7 +46,7 @@ static void test_set_features(void)
|
|||
.nsid = TEST_NSID,
|
||||
.in_data = data,
|
||||
.data_len = sizeof(data),
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| TEST_FID,
|
||||
.cdw11 = TEST_CDW11,
|
||||
.cdw12 = TEST_CDW12,
|
||||
|
@ -163,7 +163,7 @@ static void test_set_features_simple(void)
|
|||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.nsid = TEST_NSID,
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| TEST_FID,
|
||||
.cdw11 = TEST_CDW11,
|
||||
.result = TEST_RESULT,
|
||||
|
@ -205,7 +205,7 @@ static void test_set_arbitration(void)
|
|||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.cdw10 = NVME_FEAT_FID_ARBITRATION,
|
||||
.cdw11 = HPW << 24 | MPW << 16 | LPW << 8 | AB,
|
||||
.cdw11 = (uint32_t)HPW << 24 | MPW << 16 | LPW << 8 | AB,
|
||||
.result = TEST_RESULT,
|
||||
};
|
||||
uint32_t result = 0;
|
||||
|
@ -243,7 +243,7 @@ static void test_set_power_mgmt(void)
|
|||
uint8_t PS = 0b10101, WH = 0b101;
|
||||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_POWER_MGMT,
|
||||
.cdw11 = WH << 5 | PS,
|
||||
.result = TEST_RESULT,
|
||||
|
@ -337,7 +337,7 @@ static void test_set_temp_thresh(void)
|
|||
NVME_FEATURE_TEMPTHRESH_THSEL_UNDER;
|
||||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_TEMP_THRESH,
|
||||
.cdw11 = THSEL << 20 | TMPSEL << 16 | TMPTH,
|
||||
.result = TEST_RESULT,
|
||||
|
@ -424,7 +424,7 @@ static void test_set_volatile_wc(void)
|
|||
{
|
||||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_VOLATILE_WC,
|
||||
.cdw11 = 1 << 0, /* WCE */
|
||||
.result = TEST_RESULT,
|
||||
|
@ -521,7 +521,7 @@ static void test_set_irq_config(void)
|
|||
uint16_t IV = 0x1234;
|
||||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_IRQ_CONFIG,
|
||||
.cdw11 = 1 << 16 /* CD */
|
||||
| IV,
|
||||
|
@ -600,7 +600,7 @@ static void test_set_async_event(void)
|
|||
uint32_t EVENTS = 0x87654321;
|
||||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_ASYNC_EVENT,
|
||||
.cdw11 = EVENTS,
|
||||
.result = TEST_RESULT,
|
||||
|
@ -717,7 +717,7 @@ static void test_set_timestamp(void)
|
|||
.opcode = nvme_admin_set_features,
|
||||
.in_data = &ts,
|
||||
.data_len = sizeof(ts),
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_TIMESTAMP,
|
||||
};
|
||||
int err;
|
||||
|
@ -771,7 +771,7 @@ static void test_set_hctm(void)
|
|||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.cdw10 = NVME_FEAT_FID_HCTM,
|
||||
.cdw11 = TMT1 << 16 | TMT2,
|
||||
.cdw11 = (uint32_t)TMT1 << 16 | TMT2,
|
||||
.result = TEST_RESULT,
|
||||
};
|
||||
uint32_t result = 0;
|
||||
|
@ -807,7 +807,7 @@ static void test_set_nopsc(void)
|
|||
{
|
||||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_NOPSC,
|
||||
.cdw11 = 1 << 0 /* NOPPME */,
|
||||
.result = TEST_RESULT,
|
||||
|
@ -890,7 +890,7 @@ static void test_set_plm_config(void)
|
|||
.opcode = nvme_admin_set_features,
|
||||
.in_data = &config,
|
||||
.data_len = sizeof(config),
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_PLM_CONFIG,
|
||||
.cdw11 = NVMSETID,
|
||||
.cdw12 = 1 << 0 /* Predictable Latency Enable */,
|
||||
|
@ -984,7 +984,7 @@ static void test_set_lba_sts_interval(void)
|
|||
uint16_t LSIRI = 0x1234, LSIPI = 0x5678;
|
||||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_LBA_STS_INTERVAL,
|
||||
.cdw11 = LSIPI << 16 | LSIRI,
|
||||
.result = TEST_RESULT,
|
||||
|
@ -1105,7 +1105,7 @@ static void test_set_endurance_evt_cfg(void)
|
|||
uint8_t EGWARN = 0xCD;
|
||||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_ENDURANCE_EVT_CFG,
|
||||
.cdw11 = EGWARN << 16 | ENDGID,
|
||||
.result = TEST_RESULT,
|
||||
|
@ -1182,7 +1182,7 @@ static void test_set_sw_progress(void)
|
|||
uint8_t PBSLC = 0xBA;
|
||||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_SW_PROGRESS,
|
||||
.cdw11 = PBSLC,
|
||||
.result = TEST_RESULT,
|
||||
|
@ -1223,7 +1223,7 @@ static void test_set_host_id(void)
|
|||
.opcode = nvme_admin_set_features,
|
||||
.in_data = hostid,
|
||||
.data_len = sizeof(hostid),
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_HOST_ID,
|
||||
.result = TEST_RESULT,
|
||||
};
|
||||
|
@ -1305,7 +1305,7 @@ static void test_set_resv_mask(void)
|
|||
struct mock_cmd mock_admin_cmd = {
|
||||
.opcode = nvme_admin_set_features,
|
||||
.nsid = TEST_NSID,
|
||||
.cdw10 = 1 << 31 /* SAVE */
|
||||
.cdw10 = (uint32_t)1 << 31 /* SAVE */
|
||||
| NVME_FEAT_FID_RESV_MASK,
|
||||
.cdw11 = MASK,
|
||||
.result = TEST_RESULT,
|
||||
|
|
|
@ -3,6 +3,16 @@ mock_ioctl = library(
|
|||
['mock.c', 'util.c'],
|
||||
)
|
||||
|
||||
# Add mock-ioctl to the LD_PRELOAD path so it overrides libc.
|
||||
# Append to LD_PRELOAD so existing libraries, e.g. libasan, are kept.
|
||||
# If libasan isn't specified in the LD_PRELOAD path, ASAN warns about mock-ioctl
|
||||
# being loaded first because its memory allocations might not get intercepted.
|
||||
# But it appears this isn't a problem; ASAN errors in mock-ioctl are reported.
|
||||
# This is likely because the executable still links with libasan before libc.
|
||||
mock_ioctl_env = environment()
|
||||
mock_ioctl_env.append('LD_PRELOAD', mock_ioctl.full_path())
|
||||
mock_ioctl_env.set('ASAN_OPTIONS', 'verify_asan_link_order=0')
|
||||
|
||||
discovery = executable(
|
||||
'test-discovery',
|
||||
'discovery.c',
|
||||
|
@ -11,7 +21,7 @@ discovery = executable(
|
|||
link_with: mock_ioctl,
|
||||
)
|
||||
|
||||
test('discovery', discovery, env: ['LD_PRELOAD=' + mock_ioctl.full_path()])
|
||||
test('discovery', discovery, env: mock_ioctl_env)
|
||||
|
||||
features = executable(
|
||||
'test-features',
|
||||
|
@ -20,7 +30,7 @@ features = executable(
|
|||
link_with: mock_ioctl,
|
||||
)
|
||||
|
||||
test('features', features, env: ['LD_PRELOAD=' + mock_ioctl.full_path()])
|
||||
test('features', features, env: mock_ioctl_env)
|
||||
|
||||
identify = executable(
|
||||
'test-identify',
|
||||
|
@ -29,4 +39,4 @@ identify = executable(
|
|||
link_with: mock_ioctl,
|
||||
)
|
||||
|
||||
test('identify', identify, env: ['LD_PRELOAD=' + mock_ioctl.full_path()])
|
||||
test('identify', identify, env: mock_ioctl_env)
|
||||
|
|
|
@ -75,10 +75,12 @@ void end_mock_cmds(void)
|
|||
check((cmd)->metadata_len == (mock_cmd)->metadata_len, \
|
||||
"got metadata_len %" PRIu32 ", expected %" PRIu32, \
|
||||
(cmd)->metadata_len, (mock_cmd)->metadata_len); \
|
||||
cmp((void const *)(uintptr_t)(cmd)->metadata, \
|
||||
(mock_cmd)->metadata, \
|
||||
(cmd)->metadata_len, \
|
||||
"incorrect metadata"); \
|
||||
if ((cmd)->metadata_len) { \
|
||||
cmp((void const *)(uintptr_t)(cmd)->metadata, \
|
||||
(mock_cmd)->metadata, \
|
||||
(cmd)->metadata_len, \
|
||||
"incorrect metadata"); \
|
||||
} \
|
||||
__u32 data_len = (cmd)->data_len; \
|
||||
check(data_len == (mock_cmd)->data_len, \
|
||||
"got data_len %" PRIu32 ", expected %" PRIu32, \
|
||||
|
@ -114,7 +116,11 @@ void end_mock_cmds(void)
|
|||
} \
|
||||
})
|
||||
|
||||
#ifdef HAVE_GLIBC_IOCTL
|
||||
int ioctl(int fd, unsigned long request, ...)
|
||||
#else
|
||||
int ioctl(int fd, int request, ...)
|
||||
#endif
|
||||
{
|
||||
struct mock_cmds *mock_cmds;
|
||||
bool result64;
|
||||
|
@ -141,7 +147,7 @@ int ioctl(int fd, unsigned long request, ...)
|
|||
result64 = true;
|
||||
break;
|
||||
default:
|
||||
fail("unexpected %s %lu", __func__, request);
|
||||
fail("unexpected %s %lu", __func__, (unsigned long) request);
|
||||
}
|
||||
check(mock_cmds->remaining_cmds,
|
||||
"unexpected %s command", mock_cmds->name);
|
||||
|
|
|
@ -72,6 +72,11 @@ if conf.get('HAVE_NETDB')
|
|||
['mock-ifaddrs.c', ],
|
||||
)
|
||||
|
||||
# See comment in test/ioctl/meson.build explaining how LD_PRELOAD is used
|
||||
mock_ifaddrs_env = environment()
|
||||
mock_ifaddrs_env.append('LD_PRELOAD', mock_ifaddrs.full_path())
|
||||
mock_ifaddrs_env.set('ASAN_OPTIONS', 'verify_asan_link_order=0')
|
||||
|
||||
tree = executable(
|
||||
'tree',
|
||||
['tree.c'],
|
||||
|
@ -80,14 +85,14 @@ if conf.get('HAVE_NETDB')
|
|||
link_with: mock_ifaddrs,
|
||||
)
|
||||
|
||||
test('tree', tree, env: ['LD_PRELOAD=' + mock_ifaddrs.full_path()])
|
||||
test('tree', tree, env: mock_ifaddrs_env)
|
||||
|
||||
test_util = executable(
|
||||
'test-util',
|
||||
['test-util.c'],
|
||||
include_directories: [incdir, internal_incdir]
|
||||
)
|
||||
test('Test util.c', test_util)
|
||||
test('util', test_util)
|
||||
endif
|
||||
|
||||
subdir('ioctl')
|
||||
|
|
|
@ -83,12 +83,14 @@ static void test_set_tx_mic(struct test_peer *peer)
|
|||
{
|
||||
extern __u32 nvme_mi_crc32_update(__u32 crc, void *data, size_t len);
|
||||
__u32 crc = 0xffffffff;
|
||||
__le32 crc_le;
|
||||
|
||||
assert(peer->tx_buf_len + sizeof(crc) <= MAX_BUFSIZ);
|
||||
assert(peer->tx_buf_len + sizeof(crc_le) <= MAX_BUFSIZ);
|
||||
|
||||
crc = nvme_mi_crc32_update(crc, peer->tx_buf, peer->tx_buf_len);
|
||||
*(uint32_t *)(peer->tx_buf + peer->tx_buf_len) = cpu_to_le32(~crc);
|
||||
peer->tx_buf_len += sizeof(crc);
|
||||
crc_le = cpu_to_le32(~crc);
|
||||
memcpy(peer->tx_buf + peer->tx_buf_len, &crc_le, sizeof(crc_le));
|
||||
peer->tx_buf_len += sizeof(crc_le);
|
||||
}
|
||||
|
||||
int __wrap_socket(int family, int type, int protocol)
|
||||
|
|
10
test/mi.c
10
test/mi.c
|
@ -44,7 +44,8 @@ static int test_transport_submit(struct nvme_mi_ep *ep,
|
|||
|
||||
/* start from a minimal response: zeroed data, nmp to match request */
|
||||
memset(resp->hdr, 0, resp->hdr_len);
|
||||
memset(resp->data, 0, resp->data_len);
|
||||
if (resp->data_len)
|
||||
memset(resp->data, 0, resp->data_len);
|
||||
resp->hdr->type = NVME_MI_MSGTYPE_NVME;
|
||||
resp->hdr->nmp = req->hdr->nmp | (NVME_MI_ROR_RSP << 7);
|
||||
|
||||
|
@ -1646,7 +1647,10 @@ static int test_admin_format_nvm_cb(struct nvme_mi_ep *ep,
|
|||
|
||||
assert(rq_hdr[4] == nvme_admin_format_nvm);
|
||||
|
||||
nsid = rq_hdr[11] << 24 | rq_hdr[10] << 16 | rq_hdr[9] << 8 | rq_hdr[8];
|
||||
nsid = (__u32)rq_hdr[11] << 24
|
||||
| rq_hdr[10] << 16
|
||||
| rq_hdr[9] << 8
|
||||
| rq_hdr[8];
|
||||
assert(nsid == args->nsid);
|
||||
|
||||
assert(((rq_hdr[44] >> 0) & 0xf) == args->lbaf);
|
||||
|
@ -1721,7 +1725,7 @@ static int test_admin_sanitize_nvm_cb(struct nvme_mi_ep *ep,
|
|||
assert(((rq_hdr[45] >> 0) & 0x1) == args->oipbp);
|
||||
assert(((rq_hdr[45] >> 1) & 0x1) == args->nodas);
|
||||
|
||||
ovrpat = rq_hdr[51] << 24 | rq_hdr[50] << 16 |
|
||||
ovrpat = (__u32)rq_hdr[51] << 24 | rq_hdr[50] << 16 |
|
||||
rq_hdr[49] << 8 | rq_hdr[48];
|
||||
assert(ovrpat == args->ovrpat);
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
#include <netdb.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "nvme/cleanup.c" /* to resolve cleanup_charp() */
|
||||
#include "nvme/log.c" /* to resolve __nvme_msg() */
|
||||
#include "nvme/util.c"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue