linux/drivers/nvdimm
Jane Chu 5898b43af9 mce: fix set_mce_nospec to always unmap the whole page
The set_memory_uc() approach doesn't work well in all cases.
As Dan pointed out when "The VMM unmapped the bad page from
guest physical space and passed the machine check to the guest."
"The guest gets virtual #MC on an access to that page. When
the guest tries to do set_memory_uc() and instructs cpa_flush()
to do clean caches that results in taking another fault / exception
perhaps because the VMM unmapped the page from the guest."

Since the driver has special knowledge to handle NP or UC,
mark the poisoned page with NP and let driver handle it when
it comes down to repair.

Please refer to discussions here for more details.
https://lore.kernel.org/all/CAPcyv4hrXPb1tASBZUg-GgdVs0OOFKXMXLiHmktg_kFi7YBMyQ@mail.gmail.com/

Now since poisoned page is marked as not-present, in order to
avoid writing to a not-present page and trigger kernel Oops,
also fix pmem_do_write().

Fixes: 284ce4011b ("x86/memory_failure: Introduce {set, clear}_mce_nospec()")
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Jane Chu <jane.chu@oracle.com>
Acked-by: Tony Luck <tony.luck@intel.com>
Link: https://lore.kernel.org/r/165272615484.103830.2563950688772226611.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2022-05-16 11:46:44 -07:00
..
badrange.c mm/memremap_pages: convert to 'struct range' 2020-10-13 18:38:28 -07:00
btt_devs.c block: remove genhd.h 2022-02-02 07:49:59 -07:00
btt.c nvdimm-btt: use bvec_kmap_local in btt_rw_integrity 2022-03-04 12:29:21 -07:00
btt.h nvdimm-btt: convert to blk_alloc_disk/blk_cleanup_disk 2021-06-01 07:42:23 -06:00
bus.c libnvdimm for 5.18 2022-03-30 10:04:11 -07:00
claim.c libnvdimm: Cleanup include of badblocks.h 2020-12-15 21:47:45 -08:00
core.c cxl for v5.16 2021-11-08 11:49:48 -08:00
dax_devs.c
dimm_devs.c nvdimm/region: Delete nd_blk_region infrastructure 2022-03-11 15:53:13 -08:00
dimm.c libnvdimm: Make remove callback return void 2021-02-16 19:35:29 -08:00
e820.c libnvdimm/e820: Retrieve and populate correct 'target_node' info 2020-02-18 10:28:05 -08:00
Kconfig nvdimm/blk: Delete the block-aperture window driver 2022-03-11 15:53:12 -08:00
label.c nvdimm/region: Delete nd_blk_region infrastructure 2022-03-11 15:53:13 -08:00
label.h nvdimm/region: Delete nd_blk_region infrastructure 2022-03-11 15:53:13 -08:00
Makefile drivers/nvdimm: Fix build failure when CONFIG_PERF_EVENTS is not set 2022-03-23 12:17:36 -07:00
namespace_devs.c nvdimm/region: Delete nd_blk_region infrastructure 2022-03-11 15:53:13 -08:00
nd_perf.c drivers/nvdimm: Fix build failure when CONFIG_PERF_EVENTS is not set 2022-03-23 12:17:36 -07:00
nd_virtio.c block: pass a block_device and opf to bio_alloc 2022-02-02 07:49:59 -07:00
nd-core.h libnvdimm for 5.18 2022-03-30 10:04:11 -07:00
nd.h nvdimm/region: Delete nd_blk_region infrastructure 2022-03-11 15:53:13 -08:00
of_pmem.c powerpc/pmem: Initialize pmem device on newer hardware 2020-07-16 13:00:23 +10:00
pfn_devs.c block: remove genhd.h 2022-02-02 07:49:59 -07:00
pfn.h libnvdimm/namespace: Enforce memremap_compat_align() 2020-03-17 12:23:21 -07:00
pmem.c mce: fix set_mce_nospec to always unmap the whole page 2022-05-16 11:46:44 -07:00
pmem.h mm: don't include <linux/memremap.h> in <linux/mm.h> 2022-03-03 12:47:33 -05:00
region_devs.c nvdimm/region: Delete nd_blk_region infrastructure 2022-03-11 15:53:13 -08:00
region.c nvdimm/region: Delete nd_blk_region infrastructure 2022-03-11 15:53:13 -08:00
security.c nvdimm: Allow overwrite in the presence of disabled dimms 2022-04-28 15:47:46 -07:00
virtio_pmem.c virtio: wrap config->reset calls 2022-01-14 18:50:52 -05:00
virtio_pmem.h