Re: [PATCH 11/17] mm: move get_dev_pagemap out of line
From: Dan Williams <hidden>
Date: 2017-12-17 17:26:23
Also in:
linux-mm, lkml, nvdimm
On Fri, Dec 15, 2017 at 6:09 AM, Christoph Hellwig [off-list ref] wrote:
This is a pretty big function, which should be out of line in general, and a no-op stub if CONFIG_ZONE_DEVIC=D0=95 is not set. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
[..]
+/** + * get_dev_pagemap() - take a new live reference on the dev_pagemap for =
@pfn
+ * @pfn: page frame number to lookup page_map + * @pgmap: optional known pgmap that already has a reference + * + * @pgmap allows the overhead of a lookup to be bypassed when @pfn lands=
in the
+ * same mapping.
+ */
+struct dev_pagemap *get_dev_pagemap(unsigned long pfn,
+ struct dev_pagemap *pgmap)
+{
+ const struct resource *res =3D pgmap ? pgmap->res : NULL;
+ resource_size_t phys =3D PFN_PHYS(pfn);
+
+ /*
+ * In the cached case we're already holding a live reference so
+ * we can simply do a blind increment
+ */
+ if (res && phys >=3D res->start && phys <=3D res->end) {
+ percpu_ref_get(pgmap->ref);
+ return pgmap;
+ }I was going to say keep the cached case in the static inline, but with the optimization to the calling convention in the following patch I think that makes this moot. So, Reviewed-by: Dan Williams <redacted>