All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: <alison.schofield@intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Ben Widawsky <bwidawsk@kernel.org>,
	Dave Jiang <dave.jiang@intel.com>, <linux-cxl@vger.kernel.org>
Subject: Re: [PATCH v8 3/3] tools/testing/cxl: Add XOR Math support to cxl_test
Date: Wed, 30 Nov 2022 18:24:54 +0000	[thread overview]
Message-ID: <20221130182454.00002270@Huawei.com> (raw)
In-Reply-To: <7293239bdf2f23f5d25b4019e3937dbf2547026c.1669153633.git.alison.schofield@intel.com>

On Tue, 22 Nov 2022 14:52:25 -0800
alison.schofield@intel.com wrote:

> From: Alison Schofield <alison.schofield@intel.com>
> 
> Expand the cxl_test topology to include CFMWS's that use XOR math
> for interleave arithmetic, as defined in the CXL Specification 3.0.
> 
> With this expanded topology, cxl_test is useful for testing:
> x1,x2,x4 ways with XOR interleave arithmetic.
> 
> Define the additional XOR CFMWS entries to appear only with the
> module parameter interleave_arithmetic=1. The cxl_test default
> continues to be modulo math.
> 
> modprobe cxl_test interleave_arithmetic=1
> 
> Signed-off-by: Alison Schofield <alison.schofield@intel.com>
Trivial comments inline, but looks good to me and you can tidy those
up if it makes sense to you.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  tools/testing/cxl/test/cxl.c | 118 ++++++++++++++++++++++++++++++++++-
>  1 file changed, 115 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/testing/cxl/test/cxl.c b/tools/testing/cxl/test/cxl.c
> index 7edce12fd2ce..97849e9753f5 100644
> --- a/tools/testing/cxl/test/cxl.c
> +++ b/tools/testing/cxl/test/cxl.c
> @@ -11,6 +11,8 @@
>  #include <cxlmem.h>
>  #include "mock.h"
>  
> +static int interleave_arithmetic;
> +
>  #define NR_CXL_HOST_BRIDGES 2
>  #define NR_CXL_SINGLE_HOST 1
>  #define NR_CXL_ROOT_PORTS 2
> @@ -122,6 +124,22 @@ static struct {
>  		struct acpi_cedt_cfmws cfmws;
>  		u32 target[1];
>  	} cfmws4;
> +	struct {
> +		struct acpi_cedt_cfmws cfmws;
> +		u32 target[1];
> +	} cfmws5;
> +	struct {
> +		struct acpi_cedt_cfmws cfmws;
> +		u32 target[2];
> +	} cfmws6;
> +	struct {
> +		struct acpi_cedt_cfmws cfmws;
> +		u32 target[4];
> +	} cfmws7;
> +	struct {
> +		struct acpi_cedt_cxims cxims;
> +		u64 xormap_list[2];
> +	} cxims0;
>  } __packed mock_cedt = {
>  	.cedt = {
>  		.header = {
> @@ -229,14 +247,89 @@ static struct {
>  		},
>  		.target = { 2 },
>  	},
> +	/* .cfmws5,6,7 use XOR Math (interleave_arithmetic == 1) */
> +	.cfmws5 = {
> +		.cfmws = {
> +			.header = {
> +				.type = ACPI_CEDT_TYPE_CFMWS,
> +				.length = sizeof(mock_cedt.cfmws5),
> +			},
> +			.interleave_arithmetic = 1,

Can we either use the defines from patch 1 directly, or carry a local copy in this
file so naming matches up etc?

> +			.interleave_ways = 0,
> +			.granularity = 4,
> +			.restrictions = ACPI_CEDT_CFMWS_RESTRICT_TYPE3 |
> +					ACPI_CEDT_CFMWS_RESTRICT_PMEM,
> +			.qtg_id = 0,
> +			.window_size = SZ_256M * 8UL,
> +		},
> +		.target = { 0 },
consistency of trailing , 
Don't mind which but nice to do it the same here...
> +	},
> +	.cfmws6 = {
> +		.cfmws = {
> +			.header = {
> +				.type = ACPI_CEDT_TYPE_CFMWS,
> +				.length = sizeof(mock_cedt.cfmws6),
> +			},
> +			.interleave_arithmetic = 1,
> +			.interleave_ways = 1,
> +			.granularity = 0,
> +			.restrictions = ACPI_CEDT_CFMWS_RESTRICT_TYPE3 |
> +					ACPI_CEDT_CFMWS_RESTRICT_PMEM,
> +			.qtg_id = 1,
> +			.window_size = SZ_256M * 8UL,
> +		},
> +		.target = { 0, 1, },
and here.

> +	},
> +	.cfmws7 = {
> +		.cfmws = {
> +			.header = {
> +				.type = ACPI_CEDT_TYPE_CFMWS,
> +				.length = sizeof(mock_cedt.cfmws7),
> +			},
> +			.interleave_arithmetic = 1,
> +			.interleave_ways = 2,
> +			.granularity = 0,
> +			.restrictions = ACPI_CEDT_CFMWS_RESTRICT_TYPE3 |
> +					ACPI_CEDT_CFMWS_RESTRICT_PMEM,
> +			.qtg_id = 0,
> +			.window_size = SZ_256M * 16UL,
> +		},
> +		.target = { 0, 1, 0, 1, },
> +	},
> +	.cxims0 = {
> +		.cxims = {
> +			.header = {
> +				.type = ACPI_CEDT_TYPE_CXIMS,
> +				.length = sizeof(mock_cedt.cxims0),
> +			},
> +			.hbig = 0,
> +			.nr_xormaps = 2,
> +		},
> +		.xormap_list = { 0x404100, 0x808200 },
> +	},
>  };
>  
> -struct acpi_cedt_cfmws *mock_cfmws[] = {
> +struct acpi_cedt_cfmws *mock_cfmws[8] = {
>  	[0] = &mock_cedt.cfmws0.cfmws,
>  	[1] = &mock_cedt.cfmws1.cfmws,
>  	[2] = &mock_cedt.cfmws2.cfmws,
>  	[3] = &mock_cedt.cfmws3.cfmws,
>  	[4] = &mock_cedt.cfmws4.cfmws,
> +	/* Modulo Math above, XOR Math below */
> +	[5] = &mock_cedt.cfmws5.cfmws,
> +	[6] = &mock_cedt.cfmws6.cfmws,
> +	[7] = &mock_cedt.cfmws7.cfmws,
> +};
> +
> +static int cfmws_start;
> +static int cfmws_end;
> +#define CFMWS_MOD_ARRAY_START 0
> +#define CFMWS_MOD_ARRAY_END   4
> +#define CFMWS_XOR_ARRAY_START 5
> +#define CFMWS_XOR_ARRAY_END   7
> +
> +struct acpi_cedt_cxims *mock_cxims[1] = {
> +	[0] = &mock_cedt.cxims0.cxims,
>  };
>  
>  struct cxl_mock_res {
> @@ -308,7 +401,7 @@ static int populate_cedt(void)
>  		chbs->length = size;
>  	}
>  
> -	for (i = 0; i < ARRAY_SIZE(mock_cfmws); i++) {
> +	for (i = cfmws_start; i <= cfmws_end; i++) {
>  		struct acpi_cedt_cfmws *window = mock_cfmws[i];
>  
>  		res = alloc_mock_res(window->window_size);
> @@ -351,12 +444,19 @@ static int mock_acpi_table_parse_cedt(enum acpi_cedt_type id,
>  		}
>  
>  	if (id == ACPI_CEDT_TYPE_CFMWS)
> -		for (i = 0; i < ARRAY_SIZE(mock_cfmws); i++) {
> +		for (i = cfmws_start; i <= cfmws_end; i++) {
>  			h = (union acpi_subtable_headers *) mock_cfmws[i];
>  			end = (unsigned long) h + mock_cfmws[i]->header.length;
>  			handler_arg(h, arg, end);
>  		}
>  
> +	if (id == ACPI_CEDT_TYPE_CXIMS)
> +		for (i = 0; i < ARRAY_SIZE(mock_cxims); i++) {
> +			h = (union acpi_subtable_headers *)mock_cxims[i];
> +			end = (unsigned long)h + mock_cxims[i]->header.length;
> +			handler_arg(h, arg, end);
> +		}
> +
>  	return 0;
>  }
>  
> @@ -897,6 +997,16 @@ static __init int cxl_test_init(void)
>  	if (rc)
>  		goto err_gen_pool_add;
>  
> +	if (interleave_arithmetic == 1) {
> +		cfmws_start = CFMWS_XOR_ARRAY_START;
> +		cfmws_end = CFMWS_XOR_ARRAY_END;
> +		dev_dbg(NULL, "cxl_test loading xor math option\n");
> +	} else {
> +		cfmws_start = CFMWS_MOD_ARRAY_START;
> +		cfmws_end = CFMWS_MOD_ARRAY_END;
> +		dev_dbg(NULL, "cxl_test loading modulo math option\n");
> +	}
> +
>  	rc = populate_cedt();
>  	if (rc)
>  		goto err_populate;
> @@ -1073,6 +1183,8 @@ static __exit void cxl_test_exit(void)
>  	unregister_cxl_mock_ops(&cxl_mock_ops);
>  }
>  
> +module_param(interleave_arithmetic, int, 0000);
> +MODULE_PARM_DESC(interleave_arithmetic, "Modulo:0, XOR:1");
>  module_init(cxl_test_init);
>  module_exit(cxl_test_exit);
>  MODULE_LICENSE("GPL v2");


      reply	other threads:[~2022-11-30 18:25 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-22 22:52 [PATCH v8 0/3] CXL XOR Interleave Arithmetic alison.schofield
2022-11-22 22:52 ` [PATCH v8 1/3] ACPICA commit 2d8dc0383d3c908389053afbdc329bbd52f009ce alison.schofield
2022-11-22 22:52 ` [PATCH v8 2/3] cxl/acpi: Support CXL XOR Interleave Math (CXIMS) alison.schofield
2022-11-30 18:14   ` Jonathan Cameron
2022-11-30 18:23     ` Jonathan Cameron
2022-11-30 22:51     ` Alison Schofield
2022-11-22 22:52 ` [PATCH v8 3/3] tools/testing/cxl: Add XOR Math support to cxl_test alison.schofield
2022-11-30 18:24   ` Jonathan Cameron [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221130182454.00002270@Huawei.com \
    --to=jonathan.cameron@huawei.com \
    --cc=alison.schofield@intel.com \
    --cc=bwidawsk@kernel.org \
    --cc=dan.j.williams@intel.com \
    --cc=dave.jiang@intel.com \
    --cc=ira.weiny@intel.com \
    --cc=linux-cxl@vger.kernel.org \
    --cc=vishal.l.verma@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.