From 802d7fe0b9108dd169fc0212b9522166c930c6c3 Mon Sep 17 00:00:00 2001 From: Liang Yan Date: Wed, 2 Mar 2016 11:22:48 +0800 Subject: [PATCH] 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: Liang Yan --- .../nvme/unit/nvme_qpair_c/nvme_qpair_ut.c | 48 ++++++++++++++++--- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/test/lib/nvme/unit/nvme_qpair_c/nvme_qpair_ut.c b/test/lib/nvme/unit/nvme_qpair_c/nvme_qpair_ut.c index ab3cd11c6..65215c5f8 100644 --- a/test/lib/nvme/unit/nvme_qpair_c/nvme_qpair_ut.c +++ b/test/lib/nvme/unit/nvme_qpair_c/nvme_qpair_ut.c @@ -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; + req->invalid_second_addr = false; + switch (sgl_offset) { + case 0: req->invalid_addr = false; - else + 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) - *address = 7; - else { + + 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 { + *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, ®s); + 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, ®s); req = nvme_allocate_request(&payload, 33 * PAGE_SIZE, NULL, &io_req); SPDK_CU_ASSERT_FATAL(req != NULL);