Linux-NVDIMM Archive on lore.kernel.org
 help / color / Atom feed
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
To: Dan Williams <dan.j.williams@intel.com>, linux-nvdimm@lists.01.org
Cc: hch@lst.de, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH 4/5] libnvdimm/region: Introduce NDD_LABELING
Date: Mon, 03 Feb 2020 22:39:52 +0530
Message-ID: <87pnevfvhb.fsf@linux.ibm.com> (raw)
In-Reply-To: <158041477856.3889308.4212605617834097674.stgit@dwillia2-desk3.amr.corp.intel.com>

Dan Williams <dan.j.williams@intel.com> writes:

> The NDD_ALIASING flag is used to indicate where pmem capacity might
> alias with blk capacity and require labeling. It is also used to
> indicate whether the DIMM supports labeling. Separate this latter
> capability into its own flag so that the NDD_ALIASING flag is scoped to
> true aliased configurations.
>
> To my knowledge aliased configurations only exist in the ACPI spec,
> there are no known platforms that ship this support in production.
>
> This clarity allows namespace-capacity alignment constraints around
> interleave-ways to be relaxed.
>

Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>

> Cc: Vishal Verma <vishal.l.verma@intel.com>
> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
> Cc: Oliver O'Halloran <oohall@gmail.com>
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> ---
>  arch/powerpc/platforms/pseries/papr_scm.c |    2 +-
>  drivers/acpi/nfit/core.c                  |    4 +++-
>  drivers/nvdimm/dimm.c                     |    2 +-
>  drivers/nvdimm/dimm_devs.c                |    9 +++++----
>  drivers/nvdimm/namespace_devs.c           |    2 +-
>  drivers/nvdimm/nd.h                       |    2 +-
>  drivers/nvdimm/region_devs.c              |   10 +++++-----
>  include/linux/libnvdimm.h                 |    2 ++
>  8 files changed, 19 insertions(+), 14 deletions(-)
>
> diff --git a/arch/powerpc/platforms/pseries/papr_scm.c b/arch/powerpc/platforms/pseries/papr_scm.c
> index c2ef320ba1bf..aae60cfd4e38 100644
> --- a/arch/powerpc/platforms/pseries/papr_scm.c
> +++ b/arch/powerpc/platforms/pseries/papr_scm.c
> @@ -326,7 +326,7 @@ static int papr_scm_nvdimm_init(struct papr_scm_priv *p)
>  	}
>  
>  	dimm_flags = 0;
> -	set_bit(NDD_ALIASING, &dimm_flags);
> +	set_bit(NDD_LABELING, &dimm_flags);
>  
>  	p->nvdimm = nvdimm_create(p->bus, p, NULL, dimm_flags,
>  				  PAPR_SCM_DIMM_CMD_MASK, 0, NULL);
> diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
> index a3320f93616d..71d7f2aa1b12 100644
> --- a/drivers/acpi/nfit/core.c
> +++ b/drivers/acpi/nfit/core.c
> @@ -2026,8 +2026,10 @@ static int acpi_nfit_register_dimms(struct acpi_nfit_desc *acpi_desc)
>  			continue;
>  		}
>  
> -		if (nfit_mem->bdw && nfit_mem->memdev_pmem)
> +		if (nfit_mem->bdw && nfit_mem->memdev_pmem) {
>  			set_bit(NDD_ALIASING, &flags);
> +			set_bit(NDD_LABELING, &flags);
> +		}
>  
>  		/* collate flags across all memdevs for this dimm */
>  		list_for_each_entry(nfit_memdev, &acpi_desc->memdevs, list) {
> diff --git a/drivers/nvdimm/dimm.c b/drivers/nvdimm/dimm.c
> index 64776ed15bb3..7d4ddc4d9322 100644
> --- a/drivers/nvdimm/dimm.c
> +++ b/drivers/nvdimm/dimm.c
> @@ -99,7 +99,7 @@ static int nvdimm_probe(struct device *dev)
>  	if (ndd->ns_current >= 0) {
>  		rc = nd_label_reserve_dpa(ndd);
>  		if (rc == 0)
> -			nvdimm_set_aliasing(dev);
> +			nvdimm_set_labeling(dev);
>  	}
>  	nvdimm_bus_unlock(dev);
>  
> diff --git a/drivers/nvdimm/dimm_devs.c b/drivers/nvdimm/dimm_devs.c
> index 94ea6dba6b4f..64159d4d4b8f 100644
> --- a/drivers/nvdimm/dimm_devs.c
> +++ b/drivers/nvdimm/dimm_devs.c
> @@ -32,7 +32,7 @@ int nvdimm_check_config_data(struct device *dev)
>  
>  	if (!nvdimm->cmd_mask ||
>  	    !test_bit(ND_CMD_GET_CONFIG_DATA, &nvdimm->cmd_mask)) {
> -		if (test_bit(NDD_ALIASING, &nvdimm->flags))
> +		if (test_bit(NDD_LABELING, &nvdimm->flags))
>  			return -ENXIO;
>  		else
>  			return -ENOTTY;
> @@ -173,11 +173,11 @@ int nvdimm_set_config_data(struct nvdimm_drvdata *ndd, size_t offset,
>  	return rc;
>  }
>  
> -void nvdimm_set_aliasing(struct device *dev)
> +void nvdimm_set_labeling(struct device *dev)
>  {
>  	struct nvdimm *nvdimm = to_nvdimm(dev);
>  
> -	set_bit(NDD_ALIASING, &nvdimm->flags);
> +	set_bit(NDD_LABELING, &nvdimm->flags);
>  }
>  
>  void nvdimm_set_locked(struct device *dev)
> @@ -312,8 +312,9 @@ static ssize_t flags_show(struct device *dev,
>  {
>  	struct nvdimm *nvdimm = to_nvdimm(dev);
>  
> -	return sprintf(buf, "%s%s\n",
> +	return sprintf(buf, "%s%s%s\n",
>  			test_bit(NDD_ALIASING, &nvdimm->flags) ? "alias " : "",
> +			test_bit(NDD_LABELING, &nvdimm->flags) ? "label" : "",
>  			test_bit(NDD_LOCKED, &nvdimm->flags) ? "lock " : "");
>  }
>  static DEVICE_ATTR_RO(flags);
> diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c
> index aff1f32fdb4f..30cda9f235de 100644
> --- a/drivers/nvdimm/namespace_devs.c
> +++ b/drivers/nvdimm/namespace_devs.c
> @@ -2531,7 +2531,7 @@ static int init_active_labels(struct nd_region *nd_region)
>  		if (!ndd) {
>  			if (test_bit(NDD_LOCKED, &nvdimm->flags))
>  				/* fail, label data may be unreadable */;
> -			else if (test_bit(NDD_ALIASING, &nvdimm->flags))
> +			else if (test_bit(NDD_LABELING, &nvdimm->flags))
>  				/* fail, labels needed to disambiguate dpa */;
>  			else
>  				return 0;
> diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h
> index c9f6a5b5253a..ca39abe29c7c 100644
> --- a/drivers/nvdimm/nd.h
> +++ b/drivers/nvdimm/nd.h
> @@ -252,7 +252,7 @@ int nvdimm_set_config_data(struct nvdimm_drvdata *ndd, size_t offset,
>  		void *buf, size_t len);
>  long nvdimm_clear_poison(struct device *dev, phys_addr_t phys,
>  		unsigned int len);
> -void nvdimm_set_aliasing(struct device *dev);
> +void nvdimm_set_labeling(struct device *dev);
>  void nvdimm_set_locked(struct device *dev);
>  void nvdimm_clear_locked(struct device *dev);
>  int nvdimm_security_setup_events(struct device *dev);
> diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
> index a19e535830d9..a5fc6e4c56ff 100644
> --- a/drivers/nvdimm/region_devs.c
> +++ b/drivers/nvdimm/region_devs.c
> @@ -195,16 +195,16 @@ EXPORT_SYMBOL_GPL(nd_blk_region_set_provider_data);
>  int nd_region_to_nstype(struct nd_region *nd_region)
>  {
>  	if (is_memory(&nd_region->dev)) {
> -		u16 i, alias;
> +		u16 i, label;
>  
> -		for (i = 0, alias = 0; i < nd_region->ndr_mappings; i++) {
> +		for (i = 0, label = 0; i < nd_region->ndr_mappings; i++) {
>  			struct nd_mapping *nd_mapping = &nd_region->mapping[i];
>  			struct nvdimm *nvdimm = nd_mapping->nvdimm;
>  
> -			if (test_bit(NDD_ALIASING, &nvdimm->flags))
> -				alias++;
> +			if (test_bit(NDD_LABELING, &nvdimm->flags))
> +				label++;
>  		}
> -		if (alias)
> +		if (label)
>  			return ND_DEVICE_NAMESPACE_PMEM;
>  		else
>  			return ND_DEVICE_NAMESPACE_IO;
> diff --git a/include/linux/libnvdimm.h b/include/linux/libnvdimm.h
> index 9df091bd30ba..18da4059be09 100644
> --- a/include/linux/libnvdimm.h
> +++ b/include/linux/libnvdimm.h
> @@ -37,6 +37,8 @@ enum {
>  	NDD_WORK_PENDING = 4,
>  	/* ignore / filter NSLABEL_FLAG_LOCAL for this DIMM, i.e. no aliasing */
>  	NDD_NOBLK = 5,
> +	/* dimm supports namespace labels */
> +	NDD_LABELING = 6,
>  
>  	/* need to set a limit somewhere, but yes, this is likely overkill */
>  	ND_IOCTL_MAX_BUFLEN = SZ_4M,
> _______________________________________________
> Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org
> To unsubscribe send an email to linux-nvdimm-leave@lists.01.org
_______________________________________________
Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org
To unsubscribe send an email to linux-nvdimm-leave@lists.01.org

  reply index

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-30 20:05 [PATCH 0/5] libnvdimm: Cross-arch compatible namespace alignment Dan Williams
2020-01-30 20:06 ` [PATCH 1/5] mm/memremap_pages: Kill unused __devm_memremap_pages() Dan Williams
2020-01-31  5:32   ` Christoph Hellwig
2020-02-03 17:08   ` Aneesh Kumar K.V
2020-01-30 20:06 ` [PATCH 2/5] mm/memremap_pages: Introduce memremap_compat_align() Dan Williams
2020-02-03 17:09   ` Aneesh Kumar K.V
2020-02-05  3:05   ` Michael Ellerman
2020-02-06  5:51     ` Dan Williams
2020-02-06  6:21       ` Aneesh Kumar K.V
2020-01-30 20:06 ` [PATCH 3/5] libnvdimm/namespace: Enforce memremap_compat_align() Dan Williams
2020-02-03 17:09   ` Aneesh Kumar K.V
2020-01-30 20:06 ` [PATCH 4/5] libnvdimm/region: Introduce NDD_LABELING Dan Williams
2020-02-03 17:09   ` Aneesh Kumar K.V [this message]
2020-01-30 20:06 ` [PATCH 5/5] libnvdimm/region: Introduce an 'align' attribute Dan Williams
2020-02-03 17:10   ` Aneesh Kumar K.V

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=87pnevfvhb.fsf@linux.ibm.com \
    --to=aneesh.kumar@linux.ibm.com \
    --cc=dan.j.williams@intel.com \
    --cc=hch@lst.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    /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

Linux-NVDIMM Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-nvdimm/0 linux-nvdimm/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-nvdimm linux-nvdimm/ https://lore.kernel.org/linux-nvdimm \
		linux-nvdimm@lists.01.org
	public-inbox-index linux-nvdimm

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.01.lists.linux-nvdimm


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git