mirror of
https://github.com/torvalds/linux.git
synced 2024-12-05 10:32:35 +00:00
dc90f0846d
Move the check for the actual pgmap types that need the free at refcount one behavior into the out of line helper, and thus avoid the need to pull memremap.h into mm.h. Link: https://lkml.kernel.org/r/20220210072828.2930359-7-hch@lst.de Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Logan Gunthorpe <logang@deltatee.com> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Reviewed-by: Dan Williams <dan.j.williams@intel.com> Acked-by: Felix Kuehling <Felix.Kuehling@amd.com> Tested-by: "Sierra Guiza, Alejandro (Alex)" <alex.sierra@amd.com> Cc: Alex Deucher <alexander.deucher@amd.com> Cc: Alistair Popple <apopple@nvidia.com> Cc: Ben Skeggs <bskeggs@redhat.com> Cc: Chaitanya Kulkarni <kch@nvidia.com> Cc: Karol Herbst <kherbst@redhat.com> Cc: Lyude Paul <lyude@redhat.com> Cc: Miaohe Lin <linmiaohe@huawei.com> Cc: Muchun Song <songmuchun@bytedance.com> Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com> Cc: Ralph Campbell <rcampbell@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
45 lines
1.2 KiB
C
45 lines
1.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __NVDIMM_PMEM_H__
|
|
#define __NVDIMM_PMEM_H__
|
|
#include <linux/page-flags.h>
|
|
#include <linux/badblocks.h>
|
|
#include <linux/memremap.h>
|
|
#include <linux/types.h>
|
|
#include <linux/pfn_t.h>
|
|
#include <linux/fs.h>
|
|
|
|
/* this definition is in it's own header for tools/testing/nvdimm to consume */
|
|
struct pmem_device {
|
|
/* One contiguous memory region per device */
|
|
phys_addr_t phys_addr;
|
|
/* when non-zero this device is hosting a 'pfn' instance */
|
|
phys_addr_t data_offset;
|
|
u64 pfn_flags;
|
|
void *virt_addr;
|
|
/* immutable base size of the namespace */
|
|
size_t size;
|
|
/* trim size when namespace capacity has been section aligned */
|
|
u32 pfn_pad;
|
|
struct kernfs_node *bb_state;
|
|
struct badblocks bb;
|
|
struct dax_device *dax_dev;
|
|
struct gendisk *disk;
|
|
struct dev_pagemap pgmap;
|
|
};
|
|
|
|
long __pmem_direct_access(struct pmem_device *pmem, pgoff_t pgoff,
|
|
long nr_pages, void **kaddr, pfn_t *pfn);
|
|
|
|
#ifdef CONFIG_MEMORY_FAILURE
|
|
static inline bool test_and_clear_pmem_poison(struct page *page)
|
|
{
|
|
return TestClearPageHWPoison(page);
|
|
}
|
|
#else
|
|
static inline bool test_and_clear_pmem_poison(struct page *page)
|
|
{
|
|
return false;
|
|
}
|
|
#endif
|
|
#endif /* __NVDIMM_PMEM_H__ */
|