forked from mirrors/linux
		
	 c953cc987a
			
		
	
	
		c953cc987a
		
	
	
	
	
		
			
			Use clear_mce_nospec() to restore WB mode for the kernel linear mapping of a pmem page that was marked 'HWPoison'. A page with 'HWPoison' set has also been marked UC in PAT (page attribute table) via set_mce_nospec() to prevent speculative retrievals of poison. The 'HWPoison' flag is only cleared when overwriting an entire page. Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Dave Jiang <dave.jiang@intel.com>
		
			
				
	
	
		
			43 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1.1 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/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__ */
 |