Commit 802d7fe0 authored by Liang Yan's avatar Liang Yan Committed by Daniel Verkamp
Browse files

spdk: Update sgl request unit test



Add test case which verify invalid second phys_addr would cause
_nvme_fail_request_bad_vtophys be called.

Change-Id: Id1b62e249b7192e29334bd7cab33815722f5662d
Signed-off-by: default avatarLiang Yan <liangx.yan@intel.com>
parent ddc4e7d0
Loading
Loading
Loading
Loading
+42 −6
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ uint64_t nvme_vtophys(void *buf)
struct io_request {
	uint64_t address_offset;
	bool	invalid_addr;
	bool	invalid_second_addr;
};

static void nvme_request_reset_sgl(void *cb_arg, uint32_t sgl_offset)
@@ -72,22 +73,45 @@ static void nvme_request_reset_sgl(void *cb_arg, uint32_t sgl_offset)
	struct io_request *req = (struct io_request *)cb_arg;

	req->address_offset = 0;
	if (sgl_offset == 0)
	req->invalid_addr = false;
	else
	req->invalid_second_addr = false;
	switch (sgl_offset) {
	case 0:
		req->invalid_addr = false;
		break;
	case 1:
		req->invalid_addr = true;

		break;
	case 2:
		req->invalid_addr = false;
		req->invalid_second_addr = true;
		break;
	default:
		break;
	}
	return;
}

static int nvme_request_next_sge(void *cb_arg, uint64_t *address, uint32_t *length)
{
	struct io_request *req = (struct io_request *)cb_arg;
	if (req->invalid_addr)

	if (req->address_offset == 0) {
		if (req->invalid_addr) {
			*address = 7;
		} else {
			*address = 4096 * req->address_offset;
		}
	} else if (req->address_offset == 1) {
		if (req->invalid_second_addr) {
			*address = 7;
	else {
		} else {
			*address = 4096 * req->address_offset;
		}
	} else {
		*address = 4096 * req->address_offset;
	}

	req->address_offset += 1;
	*length = 4096;

@@ -377,6 +401,18 @@ test_sgl_req(void)

	fail_next_sge = false;

	prepare_submit_request_test(&qpair, &ctrlr, &regs);
	req = nvme_allocate_request(&payload, 2 * PAGE_SIZE, NULL, &io_req);
	SPDK_CU_ASSERT_FATAL(req != NULL);
	req->cmd.opc = SPDK_NVME_OPC_WRITE;
	req->cmd.cdw10 = 10000;
	req->cmd.cdw12 = 255 | 0;
	req->payload_offset = 2;

	nvme_qpair_submit_request(&qpair, req);
	CU_ASSERT(qpair.sq_tail == 0);
	cleanup_submit_request_test(&qpair);

	prepare_submit_request_test(&qpair, &ctrlr, &regs);
	req = nvme_allocate_request(&payload, 33 * PAGE_SIZE, NULL, &io_req);
	SPDK_CU_ASSERT_FATAL(req != NULL);