Linux-NVDIMM Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Verma, Vishal L" <vishal.l.verma@intel.com>
To: "y-goto@jp.fujitsu.com" <y-goto@jp.fujitsu.com>,
	"linux-nvdimm@lists.01.org" <linux-nvdimm@lists.01.org>
Subject: Re: [PATCH 3/3] acpi nfit: nfit_test supports translate SPA
Date: Thu, 21 Sep 2017 21:50:56 +0000	[thread overview]
Message-ID: <1506030534.23025.25.camel@intel.com> (raw)
In-Reply-To: <20170818135014.8EC5.E1E9C6FF@jp.fujitsu.com>

On Fri, 2017-08-18 at 13:50 +0900, Yasunori Goto wrote:
> nfit_test supports translate SPA
> 
> To test ndctl list which use interface of Translate SPA,
> nfit_test needs to emulates it.
> This test module searches region which includes SPA and 
> returns 1 dimm handle which is last one.
> 
> 
> Signed-off-by: Yasunori Goto <y-goto@jp.fujitsu.com>
> 
> ---
>  drivers/nvdimm/region_devs.c     |  1 +
>  tools/testing/nvdimm/test/nfit.c | 98
> +++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 98 insertions(+), 1 deletion(-)

A few >80 character lines in this, but other than that, looks good to
me. You can run patches through scripts/checkpatch.pl in the kernel tree
to catch problems like this.

Reviewed-by: Vishal Verma <vishal.l.verma@intel.com>

> 
> diff --git a/drivers/nvdimm/region_devs.c
> b/drivers/nvdimm/region_devs.c
> index 5954cfb..3c8cc7f 100644
> --- a/drivers/nvdimm/region_devs.c
> +++ b/drivers/nvdimm/region_devs.c
> @@ -162,6 +162,7 @@ bool is_nd_pmem(struct device *dev)
>  {
>  	return dev ? dev->type == &nd_pmem_device_type : false;
>  }
> +EXPORT_SYMBOL_GPL(is_nd_pmem);
>  
>  bool is_nd_blk(struct device *dev)
>  {
> diff --git a/tools/testing/nvdimm/test/nfit.c
> b/tools/testing/nvdimm/test/nfit.c
> index 4c2fa98..426d1fa 100644
> --- a/tools/testing/nvdimm/test/nfit.c
> +++ b/tools/testing/nvdimm/test/nfit.c
> @@ -342,6 +342,78 @@ static int nfit_test_cmd_clear_error(struct
> nd_cmd_clear_error *clear_err,
>  	return 0;
>  }
>  
> +struct region_search_spa{
> +	u64 addr;
> +	struct nd_region *region;
> +};
> +
> +static int nfit_test_search_region_spa(struct device *dev, void
> *data)
> +{
> +	struct region_search_spa *ctx = data;
> +	struct nd_region *nd_region;
> +	resource_size_t ndr_end;
> +
> +	if (!is_nd_pmem(dev))
> +		return 0;
> +
> +	nd_region = to_nd_region(dev);
> +	ndr_end = nd_region->ndr_start + nd_region->ndr_size;
> +
> +	if (ctx->addr >= nd_region->ndr_start && ctx->addr < ndr_end)
> {
> +		ctx->region = nd_region;
> +		return 1;
> +	}
> +
> +	return 0;
> +}
> +
> +static int nfit_test_search_spa(struct nvdimm_bus *bus, struct
> nd_cmd_trans_spa *spa)

Over 80 char, you can split the line after 'bus' here.

> +{
> +	int ret;
> +	struct nd_region *nd_region = NULL;
> +	struct nvdimm *nvdimm = NULL;
> +	struct nd_mapping *nd_mapping = NULL;
> +	struct region_search_spa ctx = {
> +		.addr = spa->spa,
> +		.region = NULL,
> +	};
> +	u64 dpa;
> +
> +	ret = device_for_each_child(&bus->dev, &ctx,
> nfit_test_search_region_spa);

>80 ch

> +
> +	if (!ret)
> +		return -ENODEV;
> +
> +	nd_region = ctx.region;
> +
> +	dpa = ctx.addr - nd_region->ndr_start;
> +
> +	/*
> +	 * last dimm is selected for test
> +	 */
> +	nd_mapping = &nd_region->mapping[nd_region->ndr_mappings -
> 1];
> +	nvdimm = nd_mapping->nvdimm;
> +
> +	spa->devices[0].nfit_device_handle = handle[nvdimm->id];
> +	spa->num_nvdimms = 1;
> +	spa->devices[0].dpa = dpa;
> +
> +	return 0;
> +}
> +
> +static int nfit_test_cmd_translate_spa(struct nvdimm_bus *bus, struct
> nd_cmd_trans_spa *spa,

>80 ch

> +				unsigned int buf_len)

By convention, the second line starts after just two tab stops in this
file.

> +{
> +
> +	if (buf_len < spa->trans_length)
> +		return -EINVAL;
> +
> +	if (nfit_test_search_spa(bus, spa) < 0|| !spa->num_nvdimms)
> +		spa->status = 2;
> +
> +	return 0;
> +}
> +
>  static int nfit_test_cmd_smart(struct nd_cmd_smart *smart, unsigned
> int buf_len)
>  {
>  	static const struct nd_smart_payload smart_data = {
> @@ -449,6 +521,26 @@ static int nfit_test_ctl(struct
> nvdimm_bus_descriptor *nd_desc,
>  		}
>  	} else {
>  		struct ars_state *ars_state = &t->ars_state;
> +		struct nd_cmd_pkg *call_pkg = buf;
> +
> +		if (!nd_desc)
> +			return -ENOTTY;
> +
> +		if (cmd == ND_CMD_CALL) {
> +			func = call_pkg->nd_command;
> +
> +			buf_len = call_pkg->nd_size_in + call_pkg-
> >nd_size_out;
> +			buf = (void *) call_pkg->nd_payload;
> +
> +			switch (func) {
> +			case NFIT_CMD_TRANSLATE_SPA:
> +				rc =
> nfit_test_cmd_translate_spa(acpi_desc->nvdimm_bus,

> 80 ch

> +							buf,
> buf_len);

and a couple extra tab stops here.

> +				return rc;
> +			default:
> +				return -ENOTTY;
> +			}
> +		}
>  
>  		if (!nd_desc || !test_bit(cmd, &nd_desc->cmd_mask))
>  			return -ENOTTY;
> @@ -1430,7 +1522,9 @@ static void nfit_test0_setup(struct nfit_test
> *t)
>  	set_bit(ND_CMD_ARS_START, &acpi_desc->bus_cmd_force_en);
>  	set_bit(ND_CMD_ARS_STATUS, &acpi_desc->bus_cmd_force_en);
>  	set_bit(ND_CMD_CLEAR_ERROR, &acpi_desc->bus_cmd_force_en);
> +	set_bit(ND_CMD_CALL, &acpi_desc->bus_cmd_force_en);
>  	set_bit(ND_CMD_SMART_THRESHOLD, &acpi_desc-
> >dimm_cmd_force_en);
> +	set_bit(NFIT_CMD_TRANSLATE_SPA, &acpi_desc-
> >bus_sub_cmd_force_en);
>  }
>  
>  static void nfit_test1_setup(struct nfit_test *t)
> @@ -1616,10 +1710,12 @@ static int nfit_ctl_test(struct device *dev)
>  			.cmd_mask = 1UL << ND_CMD_ARS_CAP
>  				| 1UL << ND_CMD_ARS_START
>  				| 1UL << ND_CMD_ARS_STATUS
> -				| 1UL << ND_CMD_CLEAR_ERROR,
> +				| 1UL << ND_CMD_CLEAR_ERROR
> +				| 1UL << ND_CMD_CALL,
>  			.module = THIS_MODULE,
>  			.provider_name = "ACPI.NFIT",
>  			.ndctl = acpi_nfit_ctl,
> +			.bus_dsm_mask = 1UL <<
> NFIT_CMD_TRANSLATE_SPA,
>  		},
>  		.dev = &adev->dev,
>  	};
> 
> 
> 
> _______________________________________________
> Linux-nvdimm mailing list
> Linux-nvdimm@lists.01.org
> https://lists.01.org/mailman/listinfo/linux-nvdimm
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

  parent reply	other threads:[~2017-09-21 21:47 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-18  4:46 [PATCH 0/3] acpi nfit: make emulation of translate SPA on nfit_test Yasunori Goto
2017-08-18  4:47 ` [PATCH 1/3] acpi nfit: move definitions which nfit_test will use Yasunori Goto
2017-08-26  0:07   ` Dan Williams
2017-08-18  4:49 ` [PATCH 2/3] Enable to show what feature is supported via ND_CMD_CALL for nfit_test Yasunori Goto
2017-08-18  4:50 ` [PATCH 3/3] acpi nfit: nfit_test supports translate SPA Yasunori Goto
2017-08-26  0:12   ` Dan Williams
2017-08-28  0:47     ` Yasunori Goto
2017-09-21 21:50   ` Verma, Vishal L [this message]
2017-09-21 21:52 ` [PATCH 0/3] acpi nfit: make emulation of translate SPA on nfit_test Verma, Vishal L

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=1506030534.23025.25.camel@intel.com \
    --to=vishal.l.verma@intel.com \
    --cc=linux-nvdimm@lists.01.org \
    --cc=y-goto@jp.fujitsu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox