From: Dan Williams <dan.j.williams-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: Christoph Hellwig <hch-jcswGhMUV9g@public.gmane.org>
Cc: linux-nvdimm
<linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org>,
nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
"Linux Kernel Mailing List"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"Maling list - DRI developers"
<dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>,
"Linux MM" <linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org>,
"Jérôme Glisse" <jglisse-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
"Jason Gunthorpe" <jgg-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
"Ben Skeggs" <bskeggs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 15/25] device-dax: use the dev_pagemap internal refcount
Date: Tue, 18 Jun 2019 12:43:59 -0700 [thread overview]
Message-ID: <CAPcyv4iwawKnG4jQtcNWNtXQeH3PYG6iWc6JV59DnyixmwDEcg@mail.gmail.com> (raw)
In-Reply-To: <20190617122733.22432-16-hch-jcswGhMUV9g@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 506 bytes --]
On Mon, Jun 17, 2019 at 5:28 AM Christoph Hellwig <hch-jcswGhMUV9g@public.gmane.org> wrote:
>
> The functionality is identical to the one currently open coded in
> device-dax.
>
> Signed-off-by: Christoph Hellwig <hch-jcswGhMUV9g@public.gmane.org>
> ---
> drivers/dax/dax-private.h | 4 ----
> drivers/dax/device.c | 43 ---------------------------------------
> 2 files changed, 47 deletions(-)
This needs the mock devm_memremap_pages() to setup the common
percpu_ref. Incremental patch attached:
[-- Attachment #2: 0001-tools-testing-nvdimm-Support-the-internal-ref-of-dev.patch --]
[-- Type: text/x-patch, Size: 2464 bytes --]
From 875e71489c8485448a5b7df2d8a8b2ed77d2b555 Mon Sep 17 00:00:00 2001
From: Dan Williams <dan.j.williams@intel.com>
Date: Tue, 18 Jun 2019 11:58:24 -0700
Subject: [PATCH] tools/testing/nvdimm: Support the 'internal' ref of
dev_pagemap
For users of the common percpu-ref implementation, like device-dax,
arrange for nfit_test to initialize the common parameters.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
tools/testing/nvdimm/test/iomap.c | 41 ++++++++++++++++++++++++-------
1 file changed, 32 insertions(+), 9 deletions(-)
diff --git a/tools/testing/nvdimm/test/iomap.c b/tools/testing/nvdimm/test/iomap.c
index 3bc1c16c4ef9..9019dd8afbc1 100644
--- a/tools/testing/nvdimm/test/iomap.c
+++ b/tools/testing/nvdimm/test/iomap.c
@@ -108,8 +108,6 @@ static void nfit_test_kill(void *_pgmap)
{
struct dev_pagemap *pgmap = _pgmap;
- WARN_ON(!pgmap || !pgmap->ref);
-
if (pgmap->ops && pgmap->ops->kill)
pgmap->ops->kill(pgmap);
else
@@ -123,20 +121,45 @@ static void nfit_test_kill(void *_pgmap)
}
}
+static void dev_pagemap_percpu_release(struct percpu_ref *ref)
+{
+ struct dev_pagemap *pgmap =
+ container_of(ref, struct dev_pagemap, internal_ref);
+
+ complete(&pgmap->done);
+}
+
void *__wrap_devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)
{
+ int error;
resource_size_t offset = pgmap->res.start;
struct nfit_test_resource *nfit_res = get_nfit_res(offset);
- if (nfit_res) {
- int rc;
+ if (!nfit_res)
+ return devm_memremap_pages(dev, pgmap);
- rc = devm_add_action_or_reset(dev, nfit_test_kill, pgmap);
- if (rc)
- return ERR_PTR(rc);
- return nfit_res->buf + offset - nfit_res->res.start;
+ pgmap->dev = dev;
+ if (!pgmap->ref) {
+ if (pgmap->ops && (pgmap->ops->kill || pgmap->ops->cleanup))
+ return ERR_PTR(-EINVAL);
+
+ init_completion(&pgmap->done);
+ error = percpu_ref_init(&pgmap->internal_ref,
+ dev_pagemap_percpu_release, 0, GFP_KERNEL);
+ if (error)
+ return ERR_PTR(error);
+ pgmap->ref = &pgmap->internal_ref;
+ } else {
+ if (!pgmap->ops || !pgmap->ops->kill || !pgmap->ops->cleanup) {
+ WARN(1, "Missing reference count teardown definition\n");
+ return ERR_PTR(-EINVAL);
+ }
}
- return devm_memremap_pages(dev, pgmap);
+
+ error = devm_add_action_or_reset(dev, nfit_test_kill, pgmap);
+ if (error)
+ return ERR_PTR(error);
+ return nfit_res->buf + offset - nfit_res->res.start;
}
EXPORT_SYMBOL_GPL(__wrap_devm_memremap_pages);
--
2.20.1
[-- Attachment #3: Type: text/plain, Size: 178 bytes --]
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org
https://lists.01.org/mailman/listinfo/linux-nvdimm
next prev parent reply other threads:[~2019-06-18 19:43 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-17 12:27 dev_pagemap related cleanups v2 Christoph Hellwig
2019-06-17 12:27 ` [PATCH 01/25] mm: remove the unused ARCH_HAS_HMM_DEVICE Kconfig option Christoph Hellwig
2019-06-17 12:27 ` [PATCH 05/25] mm: export alloc_pages_vma Christoph Hellwig
[not found] ` <20190617122733.22432-1-hch-jcswGhMUV9g@public.gmane.org>
2019-06-17 12:27 ` [PATCH 02/25] mm: remove the struct hmm_device infrastructure Christoph Hellwig
2019-06-17 12:27 ` [PATCH 03/25] mm: remove hmm_devmem_add_resource Christoph Hellwig
2019-06-17 12:27 ` [PATCH 04/25] mm: don't clear ->mapping in hmm_devmem_free Christoph Hellwig
2019-06-17 12:27 ` [PATCH 06/25] mm: factor out a devm_request_free_mem_region helper Christoph Hellwig
[not found] ` <20190617122733.22432-7-hch-jcswGhMUV9g@public.gmane.org>
2019-06-17 17:37 ` Dan Williams
2019-06-17 17:40 ` Christoph Hellwig
[not found] ` <20190617174018.GA18185-jcswGhMUV9g@public.gmane.org>
2019-06-17 17:42 ` Christoph Hellwig
2019-06-17 12:27 ` [PATCH 07/25] memremap: validate the pagemap type passed to devm_memremap_pages Christoph Hellwig
[not found] ` <20190617122733.22432-8-hch-jcswGhMUV9g@public.gmane.org>
2019-06-17 19:02 ` Dan Williams
[not found] ` <CAPcyv4hbGfOawfafqQ-L1CMr6OMFGmnDtdgLTXrgQuPxYNHA2w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-06-17 19:54 ` Christoph Hellwig
[not found] ` <20190617195404.GA20275-jcswGhMUV9g@public.gmane.org>
2019-06-17 20:36 ` Dan Williams
2019-06-17 12:27 ` [PATCH 08/25] memremap: move dev_pagemap callbacks into a separate structure Christoph Hellwig
2019-06-17 17:51 ` Dan Williams
[not found] ` <CAPcyv4i_0wUJHDqY91R=x5M2o_De+_QKZxPyob5=E9CCv8rM7A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-06-17 19:55 ` Christoph Hellwig
[not found] ` <20190617195526.GB20275-jcswGhMUV9g@public.gmane.org>
2019-06-17 21:09 ` Dan Williams
2019-06-17 20:08 ` Logan Gunthorpe
[not found] ` <d68c5e4c-b2de-95c3-0b75-1f2391b25a34-OTvnGxWRz7hWk0Htik3J/w@public.gmane.org>
2019-06-17 20:09 ` Christoph Hellwig
2019-06-17 12:27 ` [PATCH 09/25] memremap: pass a struct dev_pagemap to ->kill and ->cleanup Christoph Hellwig
2019-06-17 12:27 ` [PATCH 10/25] memremap: lift the devmap_enable manipulation into devm_memremap_pages Christoph Hellwig
[not found] ` <20190617122733.22432-11-hch-jcswGhMUV9g@public.gmane.org>
2019-06-17 19:25 ` Dan Williams
2019-06-17 12:27 ` [PATCH 11/25] memremap: add a migrate_to_ram method to struct dev_pagemap_ops Christoph Hellwig
2019-06-17 12:27 ` [PATCH 12/25] memremap: remove the data field in struct dev_pagemap Christoph Hellwig
2019-06-17 12:27 ` [PATCH 13/25] memremap: replace the altmap_valid field with a PGMAP_ALTMAP_VALID flag Christoph Hellwig
2019-06-17 12:27 ` [PATCH 14/25] memremap: provide an optional internal refcount in struct dev_pagemap Christoph Hellwig
2019-06-17 12:27 ` [PATCH 15/25] device-dax: use the dev_pagemap internal refcount Christoph Hellwig
[not found] ` <20190617122733.22432-16-hch-jcswGhMUV9g@public.gmane.org>
2019-06-18 19:43 ` Dan Williams [this message]
2019-06-17 12:27 ` [PATCH 16/25] PCI/P2PDMA: " Christoph Hellwig
[not found] ` <20190617122733.22432-17-hch-jcswGhMUV9g@public.gmane.org>
2019-06-17 20:10 ` Logan Gunthorpe
2019-06-17 12:27 ` [PATCH 17/25] nouveau: use alloc_page_vma directly Christoph Hellwig
2019-06-17 12:27 ` [PATCH 18/25] nouveau: use devm_memremap_pages directly Christoph Hellwig
2019-06-17 12:27 ` [PATCH 19/25] mm: remove hmm_vma_alloc_locked_page Christoph Hellwig
2019-06-17 12:27 ` [PATCH 20/25] mm: remove hmm_devmem_add Christoph Hellwig
2019-06-17 12:27 ` [PATCH 21/25] mm: mark DEVICE_PUBLIC as broken Christoph Hellwig
2019-06-17 12:27 ` [PATCH 23/25] mm: sort out the DEVICE_PRIVATE Kconfig mess Christoph Hellwig
2019-06-17 12:27 ` [PATCH 24/25] mm: remove the HMM config option Christoph Hellwig
2019-06-17 12:27 ` [PATCH 25/25] mm: don't select MIGRATE_VMA_HELPER from HMM_MIRROR Christoph Hellwig
2019-06-17 12:27 ` [PATCH 22/25] mm: simplify ZONE_DEVICE page private data Christoph Hellwig
2019-06-18 19:47 ` dev_pagemap related cleanups v2 Dan Williams
2019-06-19 9:40 ` Christoph Hellwig
2019-06-19 16:36 ` Jason Gunthorpe
2019-06-19 16:46 ` Dan Williams
2019-06-19 18:19 ` Jason Gunthorpe
2019-06-20 6:32 ` Christoph Hellwig
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=CAPcyv4iwawKnG4jQtcNWNtXQeH3PYG6iWc6JV59DnyixmwDEcg@mail.gmail.com \
--to=dan.j.williams-ral2jqcrhueavxtiumwx3w@public.gmane.org \
--cc=bskeggs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=hch-jcswGhMUV9g@public.gmane.org \
--cc=jgg-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
--cc=jglisse-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \
--cc=linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org \
--cc=linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.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
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;
as well as URLs for NNTP newsgroup(s).