Commit 51f7c833 authored by Daniel Verkamp's avatar Daniel Verkamp
Browse files

test/nvme/sgl: factor out common len calculation



Also use uint32_t consistently for counting SGL elements.

Change-Id: Ibeffffdc5e0eccd11681703cd333bfb64319e164
Signed-off-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
parent 50e43f1e
Loading
Loading
Loading
Loading
+19 −67
Original line number Diff line number Diff line
@@ -74,15 +74,15 @@ struct sgl_element {
};

struct io_request {
	int current_iov_index;
	uint32_t current_iov_index;
	uint32_t current_iov_bytes_left;
	struct sgl_element iovs[MAX_IOVS];
	int nseg;
	uint32_t nseg;
};

static void nvme_request_reset_sgl(void *cb_arg, uint32_t sgl_offset)
{
	int i;
	uint32_t i;
	uint32_t offset = 0;
	struct sgl_element *iov;
	struct io_request *req = (struct io_request *)cb_arg;
@@ -134,61 +134,34 @@ io_complete(void *ctx, const struct spdk_nvme_cpl *cpl)
		io_complete_flag = 1;
}

static uint32_t build_io_request_0(struct io_request *req)
static void build_io_request_0(struct io_request *req)
{
	int i;
	uint32_t len = 0;

	req->nseg = 1;

	req->iovs[0].base = rte_zmalloc(NULL, 0x800, 4);
	req->iovs[0].len = 0x800;

	for (i = 0; i < req->nseg; i++)
		len += req->iovs[i].len;

	return len;
}

static uint32_t build_io_request_1(struct io_request *req)
static void build_io_request_1(struct io_request *req)
{
	int i;
	uint32_t len = 0;

	req->nseg = 1;

	/* 512B for 1st sge */
	req->iovs[0].base = rte_zmalloc(NULL, 0x200, 0x200);
	req->iovs[0].len = 0x200;

	for (i = 0; i < req->nseg; i++)
		len += req->iovs[i].len;

	return len;
}

static uint32_t build_io_request_2(struct io_request *req)
static void build_io_request_2(struct io_request *req)
{
	int i;
	uint32_t len = 0;

	req->nseg = 1;

	/* 256KB for 1st sge */
	req->iovs[0].base = rte_zmalloc(NULL, 0x40000, 0x1000);
	req->iovs[0].len = 0x40000;

	for (i = 0; i < req->nseg; i++)
		len += req->iovs[i].len;

	return len;
}

static uint32_t build_io_request_3(struct io_request *req)
static void build_io_request_3(struct io_request *req)
{
	int i;
	uint32_t len = 0;

	req->nseg = 3;

	/* 2KB for 1st sge, make sure the iov address start at 0x800 boundary,
@@ -204,17 +177,11 @@ static uint32_t build_io_request_3(struct io_request *req)
	/* 12KB for 3th sge */
	req->iovs[2].base = rte_zmalloc(NULL, 0x3000, 0x1000);
	req->iovs[2].len = 0x3000;

	for (i = 0; i < req->nseg; i++)
		len += req->iovs[i].len;

	return len;
}

static uint32_t build_io_request_4(struct io_request *req)
static void build_io_request_4(struct io_request *req)
{
	int i;
	uint32_t len = 0;
	uint32_t i;

	req->nseg = 32;

@@ -227,35 +194,19 @@ static uint32_t build_io_request_4(struct io_request *req)
		req->iovs[i].base = rte_zmalloc(NULL, 0x2000, 0x1000);
		req->iovs[i].len = 0x2000;
	}

	for (i = 0; i < req->nseg; i++)
		len += req->iovs[i].len;

	return len;
}

static uint32_t build_io_request_5(struct io_request *req)
static void build_io_request_5(struct io_request *req)
{
	int i;
	uint32_t len = 0;

	req->nseg = 1;

	/* 8KB for 1st sge */
	req->iovs[0].base = rte_zmalloc(NULL, 0x2000, 0x1000);
	req->iovs[0].len = 0x2000;

	for (i = 0; i < req->nseg; i++)
		len += req->iovs[i].len;

	return len;
}

static uint32_t build_io_request_6(struct io_request *req)
static void build_io_request_6(struct io_request *req)
{
	int i;
	uint32_t len = 0;

	req->nseg = 2;

	/* 4KB for 1st sge */
@@ -265,14 +216,9 @@ static uint32_t build_io_request_6(struct io_request *req)
	/* 4KB for 2st sge */
	req->iovs[1].base = rte_zmalloc(NULL, 0x1000, 0x1000);
	req->iovs[1].len = 0x1000;

	for (i = 0; i < req->nseg; i++)
		len += req->iovs[i].len;

	return len;
}

typedef uint32_t (*nvme_build_io_req_fn_t)(struct io_request *req);
typedef void (*nvme_build_io_req_fn_t)(struct io_request *req);

static int
writev_readv_tests(struct dev *dev, nvme_build_io_req_fn_t build_io_fn, const char *test_name)
@@ -305,7 +251,13 @@ writev_readv_tests(struct dev *dev, nvme_build_io_req_fn_t build_io_fn, const ch
	}

	/* IO parameters setting */
	len = build_io_fn(req);
	build_io_fn(req);

	len = 0;
	for (i = 0; i < req->nseg; i++) {
		len += req->iovs[i].len;
	}

	lba_count = len / spdk_nvme_ns_get_sector_size(ns);
	if (!lba_count || (BASE_LBA_START + lba_count > (uint32_t)nsdata->nsze)) {
		fprintf(stderr, "%s: %s Invalid IO length parameter\n", dev->name, test_name);