mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
x86, libnvdimm, pmem: remove global pmem api
Now that all callers of the pmem api have been converted to dax helpers that call back to the pmem driver, we can remove include/linux/pmem.h and asm/pmem.h. Cc: <x86@kernel.org> Cc: Jeff Moyer <jmoyer@redhat.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Toshi Kani <toshi.kani@hpe.com> Cc: Oliver O'Halloran <oohall@gmail.com> Cc: Ross Zwisler <ross.zwisler@linux.intel.com> Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
f2b612578e
commit
ca6a4657e5
@ -7592,9 +7592,7 @@ M: Ross Zwisler <ross.zwisler@linux.intel.com>
|
|||||||
L: linux-nvdimm@lists.01.org
|
L: linux-nvdimm@lists.01.org
|
||||||
Q: https://patchwork.kernel.org/project/linux-nvdimm/list/
|
Q: https://patchwork.kernel.org/project/linux-nvdimm/list/
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/nvdimm/pmem.c
|
F: drivers/nvdimm/pmem*
|
||||||
F: include/linux/pmem.h
|
|
||||||
F: arch/*/include/asm/pmem.h
|
|
||||||
|
|
||||||
LIGHTNVM PLATFORM SUPPORT
|
LIGHTNVM PLATFORM SUPPORT
|
||||||
M: Matias Bjorling <mb@lightnvm.io>
|
M: Matias Bjorling <mb@lightnvm.io>
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright(c) 2015 Intel Corporation. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of version 2 of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*/
|
|
||||||
#ifndef __ASM_X86_PMEM_H__
|
|
||||||
#define __ASM_X86_PMEM_H__
|
|
||||||
|
|
||||||
#include <linux/uaccess.h>
|
|
||||||
#include <asm/cacheflush.h>
|
|
||||||
#include <asm/cpufeature.h>
|
|
||||||
#include <asm/special_insns.h>
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_HAS_PMEM_API
|
|
||||||
/**
|
|
||||||
* arch_memcpy_to_pmem - copy data to persistent memory
|
|
||||||
* @dst: destination buffer for the copy
|
|
||||||
* @src: source buffer for the copy
|
|
||||||
* @n: length of the copy in bytes
|
|
||||||
*
|
|
||||||
* Copy data to persistent memory media via non-temporal stores so that
|
|
||||||
* a subsequent pmem driver flush operation will drain posted write queues.
|
|
||||||
*/
|
|
||||||
static inline void arch_memcpy_to_pmem(void *dst, const void *src, size_t n)
|
|
||||||
{
|
|
||||||
int rem;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We are copying between two kernel buffers, if
|
|
||||||
* __copy_from_user_inatomic_nocache() returns an error (page
|
|
||||||
* fault) we would have already reported a general protection fault
|
|
||||||
* before the WARN+BUG.
|
|
||||||
*/
|
|
||||||
rem = __copy_from_user_inatomic_nocache(dst, (void __user *) src, n);
|
|
||||||
if (WARN(rem, "%s: fault copying %p <- %p unwritten: %d\n",
|
|
||||||
__func__, dst, src, rem))
|
|
||||||
BUG();
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_ARCH_HAS_PMEM_API */
|
|
||||||
#endif /* __ASM_X86_PMEM_H__ */
|
|
@ -20,7 +20,6 @@
|
|||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/acpi.h>
|
#include <linux/acpi.h>
|
||||||
#include <linux/sort.h>
|
#include <linux/sort.h>
|
||||||
#include <linux/pmem.h>
|
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/nd.h>
|
#include <linux/nd.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
@ -1956,7 +1955,7 @@ static int acpi_nfit_blk_region_enable(struct nvdimm_bus *nvdimm_bus,
|
|||||||
nfit_blk->bdw_offset = nfit_mem->bdw->offset;
|
nfit_blk->bdw_offset = nfit_mem->bdw->offset;
|
||||||
mmio = &nfit_blk->mmio[BDW];
|
mmio = &nfit_blk->mmio[BDW];
|
||||||
mmio->addr.base = devm_nvdimm_memremap(dev, nfit_mem->spa_bdw->address,
|
mmio->addr.base = devm_nvdimm_memremap(dev, nfit_mem->spa_bdw->address,
|
||||||
nfit_mem->spa_bdw->length, ARCH_MEMREMAP_PMEM);
|
nfit_mem->spa_bdw->length, nd_blk_memremap_flags(ndbr));
|
||||||
if (!mmio->addr.base) {
|
if (!mmio->addr.base) {
|
||||||
dev_dbg(dev, "%s: %s failed to map bdw\n", __func__,
|
dev_dbg(dev, "%s: %s failed to map bdw\n", __func__,
|
||||||
nvdimm_name(nvdimm));
|
nvdimm_name(nvdimm));
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
*/
|
*/
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/sizes.h>
|
#include <linux/sizes.h>
|
||||||
#include <linux/pmem.h>
|
|
||||||
#include "nd-core.h"
|
#include "nd-core.h"
|
||||||
#include "pmem.h"
|
#include "pmem.h"
|
||||||
#include "pfn.h"
|
#include "pfn.h"
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include "nd-core.h"
|
#include "nd-core.h"
|
||||||
#include "label.h"
|
#include "label.h"
|
||||||
|
#include "pmem.h"
|
||||||
#include "nd.h"
|
#include "nd.h"
|
||||||
|
|
||||||
static DEFINE_IDA(dimm_ida);
|
static DEFINE_IDA(dimm_ida);
|
||||||
@ -235,6 +236,13 @@ struct nvdimm *nd_blk_region_to_dimm(struct nd_blk_region *ndbr)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nd_blk_region_to_dimm);
|
EXPORT_SYMBOL_GPL(nd_blk_region_to_dimm);
|
||||||
|
|
||||||
|
unsigned long nd_blk_memremap_flags(struct nd_blk_region *ndbr)
|
||||||
|
{
|
||||||
|
/* pmem mapping properties are private to libnvdimm */
|
||||||
|
return ARCH_MEMREMAP_PMEM;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(nd_blk_memremap_flags);
|
||||||
|
|
||||||
struct nvdimm_drvdata *to_ndd(struct nd_mapping *nd_mapping)
|
struct nvdimm_drvdata *to_ndd(struct nd_mapping *nd_mapping)
|
||||||
{
|
{
|
||||||
struct nvdimm *nvdimm = nd_mapping->nvdimm;
|
struct nvdimm *nvdimm = nd_mapping->nvdimm;
|
||||||
|
@ -14,10 +14,10 @@
|
|||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/sort.h>
|
#include <linux/sort.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/pmem.h>
|
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/nd.h>
|
#include <linux/nd.h>
|
||||||
#include "nd-core.h"
|
#include "nd-core.h"
|
||||||
|
#include "pmem.h"
|
||||||
#include "nd.h"
|
#include "nd.h"
|
||||||
|
|
||||||
static void namespace_io_release(struct device *dev)
|
static void namespace_io_release(struct device *dev)
|
||||||
@ -155,11 +155,7 @@ bool pmem_should_map_pages(struct device *dev)
|
|||||||
IORES_DESC_NONE) == REGION_MIXED)
|
IORES_DESC_NONE) == REGION_MIXED)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
#ifdef ARCH_MEMREMAP_PMEM
|
|
||||||
return ARCH_MEMREMAP_PMEM == MEMREMAP_WB;
|
return ARCH_MEMREMAP_PMEM == MEMREMAP_WB;
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pmem_should_map_pages);
|
EXPORT_SYMBOL(pmem_should_map_pages);
|
||||||
|
|
||||||
|
@ -28,7 +28,6 @@
|
|||||||
#include <linux/blk-mq.h>
|
#include <linux/blk-mq.h>
|
||||||
#include <linux/pfn_t.h>
|
#include <linux/pfn_t.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/pmem.h>
|
|
||||||
#include <linux/uio.h>
|
#include <linux/uio.h>
|
||||||
#include <linux/dax.h>
|
#include <linux/dax.h>
|
||||||
#include <linux/nd.h>
|
#include <linux/nd.h>
|
||||||
|
@ -6,9 +6,11 @@
|
|||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_HAS_PMEM_API
|
#ifdef CONFIG_ARCH_HAS_PMEM_API
|
||||||
|
#define ARCH_MEMREMAP_PMEM MEMREMAP_WB
|
||||||
void arch_wb_cache_pmem(void *addr, size_t size);
|
void arch_wb_cache_pmem(void *addr, size_t size);
|
||||||
void arch_invalidate_pmem(void *addr, size_t size);
|
void arch_invalidate_pmem(void *addr, size_t size);
|
||||||
#else
|
#else
|
||||||
|
#define ARCH_MEMREMAP_PMEM MEMREMAP_WT
|
||||||
static inline void arch_wb_cache_pmem(void *addr, size_t size)
|
static inline void arch_wb_cache_pmem(void *addr, size_t size)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/hash.h>
|
#include <linux/hash.h>
|
||||||
#include <linux/pmem.h>
|
|
||||||
#include <linux/sort.h>
|
#include <linux/sort.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/nd.h>
|
#include <linux/nd.h>
|
||||||
|
1
fs/dax.c
1
fs/dax.c
@ -25,7 +25,6 @@
|
|||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
#include <linux/pagevec.h>
|
#include <linux/pagevec.h>
|
||||||
#include <linux/pmem.h>
|
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/sched/signal.h>
|
#include <linux/sched/signal.h>
|
||||||
#include <linux/uio.h>
|
#include <linux/uio.h>
|
||||||
|
@ -159,6 +159,7 @@ void *nd_region_provider_data(struct nd_region *nd_region);
|
|||||||
void *nd_blk_region_provider_data(struct nd_blk_region *ndbr);
|
void *nd_blk_region_provider_data(struct nd_blk_region *ndbr);
|
||||||
void nd_blk_region_set_provider_data(struct nd_blk_region *ndbr, void *data);
|
void nd_blk_region_set_provider_data(struct nd_blk_region *ndbr, void *data);
|
||||||
struct nvdimm *nd_blk_region_to_dimm(struct nd_blk_region *ndbr);
|
struct nvdimm *nd_blk_region_to_dimm(struct nd_blk_region *ndbr);
|
||||||
|
unsigned long nd_blk_memremap_flags(struct nd_blk_region *ndbr);
|
||||||
unsigned int nd_region_acquire_lane(struct nd_region *nd_region);
|
unsigned int nd_region_acquire_lane(struct nd_region *nd_region);
|
||||||
void nd_region_release_lane(struct nd_region *nd_region, unsigned int lane);
|
void nd_region_release_lane(struct nd_region *nd_region, unsigned int lane);
|
||||||
u64 nd_fletcher64(void *addr, size_t len, bool le);
|
u64 nd_fletcher64(void *addr, size_t len, bool le);
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright(c) 2015 Intel Corporation. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of version 2 of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*/
|
|
||||||
#ifndef __PMEM_H__
|
|
||||||
#define __PMEM_H__
|
|
||||||
|
|
||||||
#include <linux/io.h>
|
|
||||||
#include <linux/uio.h>
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_HAS_PMEM_API
|
|
||||||
#define ARCH_MEMREMAP_PMEM MEMREMAP_WB
|
|
||||||
#include <asm/pmem.h>
|
|
||||||
#else
|
|
||||||
#define ARCH_MEMREMAP_PMEM MEMREMAP_WT
|
|
||||||
/*
|
|
||||||
* These are simply here to enable compilation, all call sites gate
|
|
||||||
* calling these symbols with arch_has_pmem_api() and redirect to the
|
|
||||||
* implementation in asm/pmem.h.
|
|
||||||
*/
|
|
||||||
static inline void arch_memcpy_to_pmem(void *dst, const void *src, size_t n)
|
|
||||||
{
|
|
||||||
BUG();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline bool arch_has_pmem_api(void)
|
|
||||||
{
|
|
||||||
return IS_ENABLED(CONFIG_ARCH_HAS_PMEM_API);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* memcpy_to_pmem - copy data to persistent memory
|
|
||||||
* @dst: destination buffer for the copy
|
|
||||||
* @src: source buffer for the copy
|
|
||||||
* @n: length of the copy in bytes
|
|
||||||
*
|
|
||||||
* Perform a memory copy that results in the destination of the copy
|
|
||||||
* being effectively evicted from, or never written to, the processor
|
|
||||||
* cache hierarchy after the copy completes. After memcpy_to_pmem()
|
|
||||||
* data may still reside in cpu or platform buffers, so this operation
|
|
||||||
* must be followed by a blkdev_issue_flush() on the pmem block device.
|
|
||||||
*/
|
|
||||||
static inline void memcpy_to_pmem(void *dst, const void *src, size_t n)
|
|
||||||
{
|
|
||||||
if (arch_has_pmem_api())
|
|
||||||
arch_memcpy_to_pmem(dst, src, n);
|
|
||||||
else
|
|
||||||
memcpy(dst, src, n);
|
|
||||||
}
|
|
||||||
#endif /* __PMEM_H__ */
|
|
Loading…
Reference in New Issue
Block a user